Homework1:第5章:边界值测试
1. 加法器程序计算两个1~100之间的整数的和。设计加法器边界值测试用例集合。 解:加法器测试用例增加如下几条 (1)弱健壮性等价测试类:
A=0        B=10         C=ERROR A=1        B=10         C=11 A=2        B=10         C=12
A=10      B=0           C=ERROR A=10      B=1           C=11 A=10      B=2           C=12 A=99      B=10        C=109 A=100    B=10        C=110 A=101    B=10        C=ERROR A=10      B=99        C=109 A=10      B=100      C=110 A=10      B=101      C=ERROR (2)是否需要考虑以下情形?
虑到小数,非字符等其它情况测试用例还要增加以下几种情形: A=3.1     B=5.6      C=ERROR A=A      B=B         C=ERROR A=@     B=#          C=ERROR A=空格   B=空格    C=ERROR
A=         B=            C=ERROR
解:
Homework2:第6章:等价类测试
1. 保险公司人寿保险保费计算程序的等价类测试
某保险公司人寿保险的保费计算方式为:      保费 = 投保额 × 保险费率
其中,保险费率根据年龄、性别、婚姻状况和抚养人数的不同而有所不同,体现在不同年龄、性别、婚姻状况和抚养人数,点数设定不同。10点以上保险费率为0.6%,10点及10点以下保险费率为0.1%;而点数又是由投保人的年龄、性别、婚姻状况和抚养人数来决定的,具体规则如下所示:
保险公司计算保费费率的规则
年龄 20~39 6点
性别 其他 2点 M 4点 F 3点       婚姻 已婚 3点 未婚 5点   抚养人数 1人扣0.5点, 最多扣3点 40~59 4点 假设投保额是1万元,找出保险公司人寿保险保费计算程序的等价类测试用例。
对程序中各个输入条件的要求如下:
年龄是一位或两位非零整数,值的有效范围为 1~99;性别是一位英文字符,有效取值只能为‘M’(表示男性)或’F’(表示女性) ;婚姻的有效取值只能为‘已婚’或‘未婚’;抚养人数的有效取值可以是空白或一位非零整数(1~9)。  (1)分析程序的规格说明,列出等价类表(包括有效等价类和无效等价类)。  (2)根据(1)中的等价类表,设计能覆盖所有等价类的测试用例的输入数据和 预期输出。
解:(1)
(2)
Homework3:第7章:等价类测试
一个处理单价为5元钱的饮料自动售货机软件测试用例的设计。规格说明如下:若投入5元钱或10元钱,按下“橙汁”或“啤酒”的按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示“零钱找完”的红灯亮,这时在投入10元钱并按下按钮后,饮料不送出来而且10元钱也退出来;若有零钱找,则显示“零钱找完”的红灯灭,在送出饮料的同时退还5元钱。
构造因果图分析规格说明,用决策表设计测试用例。   解:
1)分析这一段说明,列出原因和结果 原因:
1.售货机有零钱找 2.投入1元硬币 3.投入5角硬币  4.押下橙汁按钮 5.押下啤酒按钮  结果:
21.售货机〖零钱找完〗灯亮     22.退还1元硬币
23.退还5角硬币               24.送出橙汁饮料 25.送出啤酒饮料
2)画出因果图,如图3-11所示。所有原因结点列在左边,所有结果结点列在右边。建立中间结点,表示处理的中间状态。中间结点:
11. 投入1元硬币且押下饮料按钮 12. 押下〖橙汁〗或〖啤酒〗的按钮
13. 应当找5角零钱并且售货机有零钱找 14. 钱已付清
图3-11: 售货机因果图
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)条件组合覆盖:
Homework5:第9章(基路径测试)
1.函数说明 :当i_flag=0;返回     i_count+100
当i_flag=1;返回     i_count  *10                                否则  返回     i_count  *20
输入参数:int  i_count ,                         int  i_flag
输出参数: int  i_return;
代码:1  int Test(int i_count, int i_flag)  2         {
3             int i_temp = 0;  4             while (i_count>0)  5             {
6                 if (0 == i_flag)  7                 {
8                     i_temp = i_count + 100;  9                     break; 10                 } 11                 else 12                 {
13                     if (1 == i_flag) 14                     {
15                         i_temp = i_temp + 10; 16                     } 17                     else 18                     {
19                         i_temp = i_temp + 20; 20                     } 21                 }
22                 i_count--; 23             }
24             return i_temp; 25         }
用基路径测试方法,画出DD路径图,计算圈复杂度,并列出基路径,设计对应的测试用例。
解:
(1) 基本路径测试步骤:
1.导出程序流程图的拓扑结构—控制流图G 2.计算控制流图G的环路复杂度V(G)
环路复杂度是一种为程序逻辑复杂性提供定量测试的软件度量。将该度量用于计算程序的基
本路径数目。为确保所有语句至少执行一次的测试数量的上界。 简单的定义就是控制流图的区域数目 3.确定只包含路径的基本路径集 4.设计测试用例 (2)控制流图
(3)计算流图G的环路复杂度V(G) 有三种方法计算环路复杂度: 1>V(G)= 区域个数=4
2>V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量。 V(G)=10-8+2=4
3>V(G)= P+1 ,P是流图G中判定结点的数量 V(G)=3+1=4 (4)基本路径: 1 B
(4,24) 2 C,E,J
(4,6,8,24)
3 C,D,F,H,A,B
(4,6,13,15,22,4,24) 4 C,D,G,I,A,B
(4,6,13,19,22,4,24) (5)测试用例: 1 B(4,24)
输入数据:i_flag=0,或者是i_flag<0的某一个值。 预期结果:i_temp=0.
2 C,E,J(4,6,8,24) 输入数据: i_count =1;i_flag=0  预期结果:i_temp=101.
3 C,D,F,H,A,B(4,6,13,15,22,4,24) 输入数据: i_count =1;i_flag=1  预期结果:i_temp=10.
4 C,D,G,I,A,B(4,6,13,19,22,4,24)  输入数据: i_count =1;i_flag=2       预期结果:i_temp=20.