3)转换成判定表:
4)在判定表中,阴影部分表示因违反约束条件的不可能出现的情况,删去。第16列与第32列因什么动作也没做,也删去。最后可根据剩下的16列作为确定测试用例的依据。
Homework4:第9章:路径测试(测试覆盖指标) 1. 练习一:
求解一元二次方程程序如下: main()
{float a,b,c,x1,x2,mid;
scanf(“%f,%f,%f”,&a,&b,&c); if(a!=0)
{mid=b*b-4*a*c; if(mid>0)
{x1=(-b+sqrt(mid))/(2*a); x2=(-b-sqrt(mid))/(2*a); printf(“two real roots\\n”);} else{ if(mid==0)
{x1=-b/2*a;
printf(“one real root\\n”);} else{x1=-b/(2*a);
x2=sqrt(-mid)/(2*a);
printf(“two complex roots\\n”); } }
printf(“x1=%f,x2=%f\\n” , x1,x2); }
}
1、用语句覆盖准则对该程序设计测试用例; 2、用分支覆盖准则对该程序设计测试用例;
解:
1.语句覆盖
由控制图可以很容易看到,可以只选3组(所有的点必须覆盖): 第1组:2,5,3, 执行顺序为:
1,2,3,4,5,10,11,12,13
第2组:1,2,1 执行顺序为:
1,2,3,4,5,6,8,9,11,12,13
第3组:4,2,1 执行顺序为:
1,2,3,4,5,6,7,9,11,12,13
2.分支覆盖
由控制图可以很容易看到,可以只选4组(所有的边必须覆盖): 第1组:2,5,3(a!=0,mid>0), 执行顺序为:
1,2,3,4,5,10,11,12,13 第2组:1,2,1 (a!=0,mid=0), 执行顺序为:
1,2,3,4,5,6,8,9,11,12,13 第3组:4,2,1 (a!=0,mid<0), 执行顺序为:
1,2,3,4,5,6,7,9,11,12,13 第4组:0,2,1 (a=0) 执行顺序为: 1,2,3,13
练习二:
程序如下: main()
{ int i,j,k,match;
scanf(“%d%d%d,&i,&j,&k);
if(i<=0‖j<=0‖k<=0‖i+j<=k‖i+k<=j‖j+k<=i) match=4; else if(i==j&&i==k&&j==k) match=1;
else if(i==j‖i==k‖j==k) match=2; else match=3; printf(“match=%d\\n”,match); }
用条件覆盖准则对该程序设计测试用例;
用分支-条件覆盖准则对该程序设计测试用例; 用组合覆盖准则对该程序设计测试用例;
解:分析:
三组判定:(1)条件覆盖:
第一组:if(a<=0||b<=0||c<=0||a+b<=c||b+c<=a||c+a<=b) 有6个条件
第二组: if(a==b && b==c && c==a) 有3个条件 第三组: if(a==b||b==c||c==a) 有3个条件 实际上只有9个条件
(a<=0 b<=0 c<=0 a+b<=c b+c<=a c+a<=b) a==b b==c c==a
0 0 0 T T T T T T T T T 2 3 4 F F F F F F F F F 这样,2组测试用例,使得每个条件,至少各有一次“真”和“假”。 (2)分支-条件覆盖:
根据流程图,有4条分支: 测试用例为:
0 0 0 match=1 2 3 4 match=3 1 1 1 match=4 2 2 3 match=2 (3)条件组合覆盖: