[超详细有案例]理解白盒测试的5种逻辑覆盖
白盒测试是穷举路径测试,在逻辑覆盖中有6种,分别是语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,组合覆盖,路径覆盖,下面我将以每种覆盖的定义,实例讲解,优点,缺点了帮助大家理解。
[超详细有案例]理解白盒测试的5种逻辑覆盖
白盒测试是穷举路径测试,在逻辑覆盖中有6种,分别是语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,组合覆盖,路径覆盖,下面我将以每种覆盖的定义,实例讲解,优点,缺点了帮助大家理解。
(1)语句覆盖
语句覆盖是最起码的结构覆盖要求,语句覆盖用覆盖率最强的测试用例,使得程序中每一条语句至少被执行一次。
实例:
序号 |
输入数据 |
预期 |
覆盖语句 |
路径 |
1 |
x=1,y=7 |
X=8 |
X=x+y |
OBCE |
2 |
X=11,y=-3 |
X=14 |
X=x-y |
OBDE |
由上可知,语句覆盖中第一个判定每次都会运行,如果第一次判定正确会直接结束本次运行,覆盖率不强,因此我们只需第一次错误的情况下跳到第二个测试去测试。
优点:不用细分每条判定表达式
缺点:只能针对程序逻辑中显示存在的语句,隐式逻辑分支无法测试,比如上面的例子加一个else
if,语句覆盖就不会考虑这种情况。
(2)判定覆盖
判定覆盖也叫分支覆盖,它要求每次判定都要测试真或假。
序号 |
输入数据 |
预期输出 |
覆盖判定 |
路径 |
1 |
x=-1,y=1 |
X=0 |
Y1 |
OAE |
2 |
x=1,y=7 |
X=8 |
N1Y2 |
OBCE |
3 |
X=11,y=-3 |
X=14 |
N1N2 |
OBDE |
由上可知,每个真值或假值都至少执行一次。
优点:判定覆盖具有和语句覆盖一样的简单性,无须细分,只要每个判定的T和F判定一次就行。
缺点:实际项目中,大部分判断语句都不会是简单的对与错,通常与多个语句相结合,如“case”,“else if”等。如果仅仅只测试最终结果,忽略每个条件的取值,肯定会有遗漏部分。
(3)条件覆盖
条件覆盖的要求是判定中的每一个判定条件都获得一次结果,即每个条件至少有一次真值一次假值。
序号 |
输入数据 |
预期 |
条件取值 |
路径 |
1 |
x=1,y=7 |
X=8 |
T1T2T3T4 |
OBCE |
2 |
X=11,y=-3 |
X=14 |
F1F2F3F4 |
OBDE |
优点:比判定覆盖增加了对符合判定情况的测试,增加了测试路径。
缺点:需要足够多的测试用例,但条件覆盖不能保证判定覆盖,它只能保证每个条件至少有一次真值,考虑不了所有判定结果。
(4)判定/条件覆盖
设计足够多的测试用例,使判定中每个条件结果可能至少出现一次,每个判定本身的所有可能结果也至少出现一次。
序号 |
输入数据 |
预期 |
条件取值 |
判定取值 |
路径 |
1 |
x=1,y=7 |
X=8 |
N1Y2 |
T1T2T3T4 |
OBCE |
2 |
X=11,y=-3 |
X=14 |
N1N2 |
F1F2F3F4 |
OBDE |
3 |
x=-1,y=1 |
X=0 |
Y1 |
T1T2 |
OAE |
优点:是判定和条件的结合,弥补了两者的不足
缺点:没考虑条件的组合情况
(5)组合覆盖
组合覆盖就是设计足够多的测试用例,让每个判定中的条件结果的所有组合可能至少出现一次。
序号 |
输入数据 |
预期结果 |
条件取值 |
路径 |
1 |
X=-1,Y=9 |
X=0 |
T1T2T3T4 |
OAE |
2 |
X=?,Y=? |
? |
T1T2T3F4 |
OAE |
3 |
X=-1,Y=1 |
X=0 |
T1T2F3T4 |
OAE |
4 |
X=?,Y=? |
? |
T1F2F3F4 |
OAE |
5 |
X=?,Y=? |
? |
T1F2T3T4 |
OBCE |
6 |
X=?,Y=? |
? |
T1F2T3F4 |
OBDE |
7 |
X=-1,Y=-2 |
X=1 |
T1F2F3T4 |
OBDE |
8 |
X=-1,Y=-3 |
X=2 |
T1F2F3F4 |
OBDE |
9 |
X=10,Y=1 |
X=11 |
F1T2T3T4 |
OBCE |
10 |
X=?,Y=? |
? |
F1T2T3F4 |
OBDE |
11 |
X=?,Y=? |
? |
F1T2F3T4 |
OBDE |
12 |
X=?,Y=? |
? |
F1T2F3F4 |
OBDE |
13 |
X=10,Y=-1 |
X=9 |
F1F2T3T4 |
OBCE |
14 |
X=11,Y=-3 |
X=14 |
F1F2T3F4 |
OBDE |
15 |
X=10,Y=-3 |
X=13 |
F1F2F3T4 |
OBDE |
16 |
X=9,Y=-3 |
X=12 |
F1F2F3F4 |
OBDE |
优点:满足前面的判定覆盖、条件覆盖和判定/条件覆盖准则,判定每个条件所有可能都至少出现一次,覆盖率强。
缺点:线性的增加了测试用例的数量。
(6)路径覆盖
路径覆盖是设计足够的测试用例,覆盖程序中的所有可能的路径。
序号 |
输入数据 |
预期输出 |
路径 |
1 |
X=-1,Y=1 |
X=0 |
OAE |
2 |
X=-1,Y=-2 |
X=1 |
OBDE |
3 |
X=10,Y=1 |
X=11 |
OBCE |
优点:可以对程序进行彻底的测试,比以上5种的覆盖面都广。
缺点:因为要对所以可能的路径都进行测试,那么会使的工作量指数级增长,有些情况下一些执行路径是无法执行的,比如:
if(!A)B++;
else D--;
这两个语句只包括两条执行路径(A为真或假对B和D的处理)。真或假不可能都不可能存在,路径覆盖则认为包含了真或假的4条执行路径,这样很大程度上降低了测试效率,大量的测试结果累计也为排错带来了麻烦。
更多推荐
所有评论(0)