目录 |
条件覆盖是指设计足够多的测试用例,运行被测程序,使得每一判定语句中每个逻辑条件的可能取值至少满足一次。
条件覆盖率=被评价到的条件取值的数量/条件取值的总数*100%
例1:
PROCEDURE M(VAR A,B,X:REAL);
BEGIN
IF (A>1) AND (B=0) THEN X:=X/A;
IF (A=2) OR (X>1) THEN X:=X+1;
END.
例1的程序有四个条件:
A>1、 B=0、A=2、X>1
为达到“条件覆盖”标准,需执行足够的测试用例使得在a点有:
A>1、A≤1、B=0、B≠0
等各种结果出现,以及在b点有:
A=2、A≠2、X>1、X≤1
等各种结果出现。
现在只需设计以下两个测试用例就可满足这一标准:
① A=2,B=0,X=4 (沿路径ace执行);
② A=1,B=1,X=1 (沿路径abd执行)。
例2:
void DoWork(int x,int y,int z)
{ int k=0,j=0;
if((x>3)&&(z<10))
{ k=x*y-1; //语句块1
j=sqrt(k);
}
if((x= =4)||(y>5))
j=x*y+10; //语句块2
j=j%3; //语句块3
}
对例2中的所有条件取值加以标记。
对于第一个判断:
条件x>3 取真值为T1,取假值为-T1
条件z<10 取真值为T2,取假值为-T2
对于第二个判断:
条件x=4 取真值为T3,取假值为-T3
条件y>5 取真值为T4,取假值为-T4
则可以设计测试用例如下:
测试用例 | 通过路径 | 条件取值 | 覆盖分支 |
---|---|---|---|
x=4、y=6、z=5 | abd | T1、T2、T3、T4 | bd |
x=2、y=5、z=5 | ace | -T1、T2、-T3、-T4 | ce |
x=4、y=5、z=15 | acd | T1、-T2、T3、-T4 | cd |
上面的测试用例不但覆盖了所有分支的真假两个分支,而且覆盖了判断中的所有条件的可能值。
“条件覆盖”并不包含“分支覆盖”
如对语句
IF(A AND B) THEN S
设计2个测试用例,使其满足“条件覆盖”:
1、使A为真并使B为假;
2、使A为假而且B为真;
但是它们都未能使语句S得以执行。
对例2设计了下面的测试用例,则虽然满足了条件覆盖,但只覆盖了第一个条件的取假分支和第二个条件的取真分支,不满足分支覆盖的要求。
测试用例 | 通过路径 | 条件取值 | 覆盖分支 |
---|---|---|---|
x=2、y=6、z=5 | acd | -T1、T2、-T3、T4 | cd |
x=4、y=5、z=15 | acd | T1、-T2、T3、-T4 | cd |