一、 逻辑覆盖
逻辑覆盖按覆盖程度由低到高大致分为以下几类:
(1) 语句覆盖:设计若干测试用例,使程序中每一可执行语句至少执行一次;
(2) 判定覆盖:设计用例,使程序中的每个逻辑判断的取真取假分支至少经历一次;
(3) 条件覆盖:设计用例,使判断中的每个条件的可能取值至少满足一次;
(4) 判定/条件覆盖:设计用例,使得判断中的每个条件的所有可能结果至少出现一次,而且判断本身所有可能结果也至少出现一次;
(5)修正判定/条件覆盖:判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次,并且每个条件都能独立地影响判定结果。
(6) 条件组合覆盖:设计用例,使得每个判断表达式中条件的各种可能组合都至少出现一次;
语句覆盖
判定覆盖
总结:判定覆盖比语句覆盖多了几乎一倍的测试路径,比语句覆盖稍强。但往往大部分的判定语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径,无法保证判断条件的正确性。
条件覆盖
总结:
覆盖了条件的测试用例不一定覆盖了分支。条件覆盖只能保证每个条件的真值和假值至少满足一次,而不考虑所有的判定结果,因此做到了完全的条件覆盖并不能保证达到完全的判定覆盖。同理,做到了完全的判定覆盖也并不能达到了完全的条件覆盖。因此,需要对条件和分支兼顾。
4.判定/条件覆盖
4.修正判定/条件覆盖
条件一:判定有真假,条件有真假。
条件二:条件的真假不影响判定的真假。(例如:a&&b ,b为0,那么a的值如何,判定都为假。)
但是有一点:修正条件判定覆盖必须依靠于多条件覆盖,即前者用例的选取是根据后者的用例(条件>=3的时候),且前者取值不具有唯一性。
总结:1.线性地增加了测试用例数量。2.对操作数及非等式条件变化敏感。3:覆盖性更强。4.主要用于测试飞行软件安全性的审查 。
5.条件组合覆盖
题目一:使用逻辑覆盖测试方法测试以下程序段
程序段中每行开头的数字是对每条语句的编号。
(1)补充下面的程序流程图。(流程图中填入适当的代码)
(2)分别以语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、修正的判定/条件覆盖和条件组合覆盖方法设计测试用例,并写出每个测试用例的执行路径。(通过的路径用a、b、c等字母来表示 )。
其中,规定 x>3为条件T1
z<10为条件T2
x==4为条件T3
y<5为条件T4
① 语句覆盖
ID
T1 T2 T3 T4的取值
输入
预期输出
通过路径
x
y
z
k
j
01
TTTT
4
6
8
23
1
acef
② 判定覆盖
ID
T1 T2 T3 T4的取值
输入
预期输出
通过路径
x
y
z
k
j
01
TTFF
5
4
8
19
2
acdf
FFTT
4
6
11
0
1
abef
③ 条件覆盖
ID
T1 T2 T3 T4的取值
输入
预期输出
通过路径
x
y
z
k
j
01
TTTT
4
6
8
23
1
acef
FFFF
1
1
11
0
0
abdf
④ 判定/条件覆盖
ID
T1 T2 T3 T4的取值
输入
预期输出
通过路径
x
y
z
k
j
01
TTTT
4
6
8
23
1
acef
FFFF
1
1
11
0
0
abdf
⑤ 修正的判定/条件覆盖
ID
T1 T2 T3 T4的取值
输入
预期输出
通过路径
x
y
z
k
j
01
TTFF
5
4
8
19
2
acdf
TFTF
4
0
11
0
1
abef
FTFT
1
6
1
0
1
abef
⑥ 条件组合覆盖
ID
T1 T2 T3 T4的取值
输入
预期输出
通过路径
x
y
z
k
j
01
TTTT
4
6
8
23
1
acef
TFTF
4
0
11
0
1
abef
FTFT
1
6
1
0
1
abef
FFFF
1
1
11
0
0
abdf
题目二:使用逻辑覆盖测试方法测试以下程序段
#include"stdio.h" int main() { int x,y,z; scanf("%d%d",&x,&y); if((x>0)&&(y>0)) { z=x+y+10; } else { z=x+y-10; } if(z<0) { z=0; printf("%d\n",z); } else { printf("%d\n",z); } return 0; }
(1)分别以语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、修正的判定/条件覆盖和条件组合覆盖方法设计测试用例,并写出每个测试用例的执行路径。(通过的路径用a、b、c等字母来表示 )。
- 语句覆盖
x,y的取值
输出magic
判定M的取值
判定N的取值
覆盖路径
1,1
12
Y
N
abef
-1,-1
0
N
Y
acdf
- 判定覆盖
x,y的取值
输出magic
判定M的取值
判定N的取值
覆盖路径
1,1
12
Y
N
abef
-1,-1
0
N
Y
acdf
- 条件覆盖
x,y的取值
输出magic
判定M的取值
判定N的取值
覆盖路径
1,1
12
Y
N
abef
-1,-1
0
N
Y
acdf
- 判定/条件覆盖
x,y的取值
输出magic
判定M的取值
判定N的取值
覆盖路径
1,1
12
Y
N
abef
-1,-1
0
N
Y
acdf
- 修正的判定/条件覆盖
x,y的取值
输出magic
判定M的取值
判定N的取值
覆盖路径
1,1
12
Y
N
abef
20,-1
0
N
Y
acdf
-10,1
-19
N
N
acef
- 条件组合覆盖
x,y的取值
输出magic
判定M的取值
判定N的取值
覆盖路径
1,1
12
Y
N
abef
-1,-1
0
N
Y
acdf
20,-1
0
N
Y
acdf
-10,1
-19
N
N
acef