[超详细有案例]理解白盒测试的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条执行路径,这样很大程度上降低了测试效率,大量的测试结果累计也为排错带来了麻烦。
标签:语句,覆盖,白盒,路径,案例,判定,测试,OBDE From: https://blog.csdn.net/weixin_75003151/article/details/143243837