软件测试试题 - 下载本文

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)条件组合覆盖: