实验一白盒测试之判定条件
实验目的
(1) 能熟练应用白盒测试技术中的判定覆盖方法进行测试用例设计;
(2) 能熟练应用白盒测试技术中的判定条件覆盖方法进行测试用例设计;
(3) 能熟练应用白盒测试技术中的条件组合覆盖方法进行测试用例设计;
(4) 对测试用例进行优化设计。
实验内容
题目1:根据程序流程图,分别应用判定条件覆盖法和条件组合覆盖法导出两组测试用例,运行测试用例,分析测试结果,比较两种方法的区别。
图 1 程序流程图
(1)条件 a>0: 取真时为 T1,取假时为 F1;(2)条件 b>10:取真时为 T2,取假时为 F2;(3)条件 a<0: 取真时为 T3,取假时为 F3;(4)条件 b<0: 取真时为T4,取假时为 F4;
由流程图可知若要使用判断条件覆盖法,则既要满足条件覆盖,又要满足判断覆盖,可知使用两组用例即可满足判断条件覆盖:
用例1:a = 10 b = 12
用例2:a = -1 b = -2
若要满足条件组合覆盖,则需要满足所有判断里面的非原子判断的所有结果的可能都要有组合,可得用例如下满足条件组合覆盖:
用例1:a = 10 b = 12
用例2:a = -1 b = -2
用例3:a = 10 b = -2
用例4:a = -1 b = 12
(2) 题目2:输入3个0-10000 内的整数,求三个数中的最大数。根据程序流程图,分别应用判定覆盖法和判定条件覆盖法设计测试用例,运行测试用例,分析测试结果,比较这两种方法的区别。
图2 程序流程图
由该流程图可知若要满足判定覆盖则要满足每个判断至少实现一次真或假,则可得到以下用例:
用例1:a = 5 b = 3 c = 10
用例2:a = -1 b = 3 c = 10
用例3:a = 5 b = 6 c = 4
若要满足判定条件覆盖则得到以下用例:
用例1:a = 5 b = 3 c = 10
用例2:a = -1 b = -3 c = -10
用例3:a = 5 b = 6 c = 4
采用判定覆盖法生成测试用例和判定条件覆盖生成测试用例有区别,在于判定条件覆盖还要满足每个非原子判断中条件还要有真假取值区别,不仅仅满足于判断真假的包含。
实验分析
题目一
判断条件覆盖:
序号 | 输入 | 条件组合 | 预期输出 | 实际输出 | 测试结果 |
1 | a = 10 b = 12 | T1 T2 | a = 10 b = 2 | a = 10 b = -12 | × |
2 | a = -1 b = -2 | T3 T4 | a = -1 b = 3 | a = -1 b = 3 | √ |
条件组合覆盖:
序号 | 输入 | 条件组合 | 预期输出 | 实际输出 | 测试结果 |
1 | a = 10 b = 12 | T1 T2 | a = 10 b = 2 | a = 10 b = -12 | × |
2 | a = -1 b = -2 | T3 T4 | a = -1 b = 3 | a = -1 b = 3 | √ |
3 | a = 10 b = -2 | T1 T4 | a = 10 b = -8 | a = 10 b = -2 | × |
4 | a = -1 b = 12 | T3 T2 | a = -1 b = -11 | a = -1 b = -11 | √ |
由实验结果可知该代码实现存在较大误差,但是使用条件组合覆盖后,测试观察程序出错找到了更具体的修改地方。
题目二
判断覆盖:
序号 | 输入 | 条件组合 | 预期输出 | 实际输出 | 测试结果 |
1 | a = 5 b = 3 c = 10 | T1 T2 | MAX = 10 | MAX = 5 | × |
2 | a = -1 b = 3 c = 10 | T3 T4 | 数据无效 | 数据无效 | √ |
3 | a = 5 b = 6 c = 4 | T1 T4 | MAX = 6 | MAX = 4 | × |
判断条件覆盖:
序号 | 输入 | 条件组合 | 预期输出 | 实际输出 | 测试结果 |
1 | a = 5 b = 3 c = 10 | T1 T2 | MAX = 10 | MAX = 5 | × |
2 | a = -1 b = -3 c = -10 | T3 T4 | 数据无效 | 数据无效 | √ |
3 | a = 5 b = 6 c = 4 | T1 T4 | MAX = 6 | MAX = 4 | × |
由实验结果可知该代码实现存在较大误差,但是使用判断覆盖和判断条件覆盖有所不同,测试观察程序出错结果大体一致。
实验总结
在实际的测试中,把所有可能的输入数据,即将程序的输入域划分成若干个部分,然后从每一个部分中选取少数具有代表性的数据当成测试用例,才能达到用最少的测试用例检测出最多的缺陷。同时,在编写测试用例时,要充分熟悉需求,精心选择测试数据来达到对需求的一个较好的覆盖率,安排好测试用例的执行顺序,来达到测试数据的重用。
附程序清单(请不要修改程序源码,可以增加代码)。
(题目一)程序清单:
#include <iostream.h>
void main(void)
{
int a,b;
cout<<"请输入2 个整数:"<<endl;
cin>>a>>b;
if(a>0 && b>10)
b=b-a;
if(a<0 || b>0)
b=-(a+b);
cout<<"a: "<<a<<endl;
cout<<"b: "<<b<<endl;
}
*********************************************************************
(题目二)程序清单:
#include <iostream.h>
void main(void)
{
int a,b,c,max;
cout<<"请输入3 个整数:"<<endl;
cin>>a>>b>>c;
max=0;
if(a>=0 && a<=10000 && b>=0 && b<10000 && c>=0 && c<=10000)
{
if(a>b)
max=a;
else
max=b;
if(c<max)
max=c;
cout<<"max=: "<<max<<endl;
}
else
{
cout<<"输入的整数超出0~10000,不满足条件!"<<endl;
}
}