详述白盒测试的逻辑覆盖的条件覆盖及其优缺点:
条件覆盖的定义:
设计测试用例,使得判定中的每个条件至少有一次取得真值,一次取得假值。所以,不仅程序中的每个语句至少被执行一次,而且使每个判定表达式中的每个条件都取到各种可能的结果。
与判定覆盖的区别:
- 判定覆盖要求的是满足判定的每个真值和假值,而条件覆盖是要求满足每个判定中的每个条件的真值和假值。
- 条件覆盖比判定覆盖增加了对判定中所有条件的测试,对于条件来说更加全面。
条件覆盖率:
条件覆盖率=每个真假值至少出现一次/条件结果的总数
eg: 案例代码中有判定两个,条件4个,条件结果8个,假如测试用例执行8个条件结果,条件覆盖率就为100%。
测试实例:
如下图中例子所示:图中共有两个判定表达式,每个判定表达式中有两个条件,为了做到条件覆盖,应选取测试数据使得在a点有下述各种结果出现。
A>1,A<=1,B=0,B!=0
在b点有下述各种结果出现:
A=2,A!=2,X>1,X<=1
只需要用下面两组测试数据就可以达到标准:
- A=2,B=0,X=4;
满足A>1,B=0,A=2和X>1的条件,执行路径ace - A=1,B=1,x=1
满足A<=1,B!=0,A!=2和X<=1的条件,执行路径abd
上面图片和用例举例引用了:https://baike.baidu.com/item/%E6%9D%A1%E4%BB%B6%E8%A6%86%E7%9B%96/9632173?fr=aladdin
以java为例,根据上图我们可以得到以下代码:
package kunlin;
import java.util.Scanner;
public class Cook {
public static void main(String[] args) {
//三个不定值变量A,B,X
Scanner sc =new Scanner(System.in);
System.out.println("请输入A,B,X的值");
//三个变量都是整形
int A =sc.nextInt();
int B =sc.nextInt();
int X =sc.nextInt();
//第一个判断当A>0 和 B ==0
if (A>1 && B==0) {
//符合按c路线
X=X/A;
}else if(A==2 || X>1) {
//前面第一个是if判断,所以只要符合就执行不符合进行整个b阶段
//如果符合这个判断,进入e阶段
X=X+1;
}
System.out.println("X的值:"+X);
}
}
当我们输入用例的值时得到以下两个结果:
分别执行了ace 和abd两条路径。完成了两个判定,判定覆盖率100%。
优缺点:
优点:条件覆盖比判定覆盖增加了对判定中所有条件的测试,对于条件来说更加全面
缺点:但条件覆盖并不能完全保证判定覆盖。