白盒测试
逻辑覆盖
![image-20200504090816701](https://img-blog.csdnimg.cn/20200504131142473.png?)
语句覆盖
为了暴露程序中的错误,至少每个语句都应该执行一次。可执行的语句顺序可以是sacbed
A=2, B=0, X=4 覆盖:sacbed
判定覆盖
判定覆盖又叫分支覆盖,他的含义是,不仅每个语句必须执行一次,而且每个判定的每种可能结果都要执行一次,也就是每个判定分支都要执行一次。
A=3,B=0,X=3 覆盖:sacbd
A=2,B=1,X=1 覆盖:sabed
条件覆盖
![image-20200504090816701](https://img-blog.csdnimg.cn/20200504131142473.png?)
条件覆盖的含义是不仅每条语句各执行至少一次,而且判定表达式中的每个条件真假各执行一次。
图中有两个判定,为了做到条件覆盖,应该选取测试数据使得在a点有下述各种结果出现:
A>1,A<=1;B=0,B!=0;
在b点有以下各种结果出现:
A=2,A!=2;X>1,X<=1;
A=2,B=0,X=4 覆盖:sacbed
A>1
,A<=1;B=0
,B!=0;
A=2
,A!=2;X>1
,X<=1;
A=1,B=1,X=1 覆盖:sabd
A>1,A<=1
;B=0,B!=0
;
A=2,A!=2
;X>1,X<=1
;
判定覆盖通常比条件覆盖强,因为判定覆盖关心每一个判定子条件,而条件覆盖只关注整个表达式的值。有时在满足条件覆盖的条件下,并不满足判定覆盖,例如以下两组测试用例:
A=2,B=0,X=1 覆盖:sacbed
A=1,B=1,X=2 覆盖:sabed
b为假的时候,没有取到
判定/条件覆盖
为解决上述问题,引入判定/条件覆盖,即用足够多的测试用例,使得其既满足判定覆盖,也满足条件覆盖
A=2,B=0,X=4 覆盖:sacbed
A>1
,A<=1;B=0
,B!=0;
A=2
,A!=2;X>1
,X<=1;
A=1,B=1,X=1 覆盖:sabd
A>1,A<=1
;B=0,B!=0
;
A=2,A!=2
;X>1,X<=1
;
这与条件覆盖用的是同一组测试用例,因此,有时判定/条件覆盖也并不比条件覆盖更强
条件组合覆盖
![image-20200504090816701](https://img-blog.csdnimg.cn/20200504131142473.png?)
条件组合覆盖是更强的逻辑覆盖标准,他要求选取足够多的测试数据,使得每个判定表达式中的条件的各种可能组合都至少出现一次
对于上图有8种可能的条件组合,他们分别是
a | b |
---|---|
1. A>1,B=0 | 5. A=2,X>1 |
2. A>1,B!=0 | 6. A=2,X<=1 |
3. A<=1,B=0 | 7. A!=2,X>1 |
4. A<=1,B!=0 | 8. A!=2,A<=1 |
A=2,B=0,X=4 针对1,5两种组合
A=2,B=1,X=1 针对2,6两种组合
A=1,B=0,X=4 针对3,7两种组合
A=1,B=1,X=1 针对4,8两种组合