实验二白盒测试
一、实验目的
1、 掌握白盒测试的基础知识;
2、 掌握白盒测试的检查内容及测试目的;
3、 掌握黑盒测试的几种基本测试方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖。
二、实验要求
1、 复习有关内容,理解白盒测试;
2、 掌握语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,并能设计出测试用例;
3、 对具体软件,能分别使用相应的白盒测试方法设计测试用例,并实施测试、分析测试结果。
三、实验内容
l 对实验一1、3题使用逻辑覆盖法进行测试用例设计。
实验一 1
流程图如下所示
逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
- 语句覆盖
每个可执行语句都走一遍即可,即测试用例要覆盖所有的语句
输入 |
测试路径 |
测试结果 |
Aaaa |
1-2-4-5 |
输入日期格式错误 |
20220411 |
1-2-4-6-14 |
星期一 |
20220412 |
1-2-4-6-7-15 |
星期二 |
20220413 |
1-2-4-6-7-8-16 |
星期三 |
20220414 |
1-2-4-6-7-8-10-17 |
星期四 |
20220415 |
1-2-4-6-7-8-10-11-18 |
星期五 |
20220416 |
1-2-4-6-7-8-10-11-12-19 |
星期六 |
20220417 |
1-2-4-6-7-8-10-11-12-13-20 |
星期日 |
- 判定覆盖
针对判断语句,在设定案例的时候,要设定True和False的两种案例;与语句覆盖不同的是增加了False的情况
使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假均曾被满足。上例需要设计测试用例使其分别满足下列条件即可(1)A=true,B=true,C=true,D=false(2)A=true,B=false,C=false,D=false。
输入 |
测试路径 |
测试结果 |
Aaaa |
1-2-4-5 |
输入日期格式错误 |
20220411 |
1-2-4-6-14 |
星期一 |
20220412 |
1-2-4-6-7-15 |
星期二 |
20220413 |
1-2-4-6-7-8-16 |
星期三 |
20220414 |
1-2-4-6-7-8-10-17 |
星期四 |
20220415 |
1-2-4-6-7-8-10-11-18 |
星期五 |
20220416 |
1-2-4-6-7-8-10-11-12-19 |
星期六 |
20220417 |
1-2-4-6-7-8-10-11-12-13-20 |
星期日 |
- 条件覆盖
要使得每个判断中的每个条件的可能取值至少满足一次。
输入 |
测试路径 |
测试结果 |
Aaaa |
1-2-4-5 |
输入日期格式错误 |
20220411 |
1-2-4-6-14 |
星期一 |
20220412 |
1-2-4-6-7-15 |
星期二 |
20220413 |
1-2-4-6-7-8-16 |
星期三 |
20220414 |
1-2-4-6-7-8-10-17 |
星期四 |
20220415 |
1-2-4-6-7-8-10-11-18 |
星期五 |
20220416 |
1-2-4-6-7-8-10-11-12-19 |
星期六 |
20220417 |
1-2-4-6-7-8-10-11-12-13-20 |
星期日 |
- 判定/条件覆盖
判定覆盖各条件覆盖交叉,针对于判定中的条件取值
执行足够的测试用例,使得判定中每个条件取到各种可能的值,并使每个判定取到各种可能的结果。
如下例所示:
输入 |
测试路径 |
测试结果 |
Aaaa |
1-2-4-5 |
输入日期格式错误 |
20220411 |
1-2-4-6-14 |
星期一 |
20220412 |
1-2-4-6-7-15 |
星期二 |
20220413 |
1-2-4-6-7-8-16 |
星期三 |
20220414 |
1-2-4-6-7-8-10-17 |
星期四 |
20220415 |
1-2-4-6-7-8-10-11-18 |
星期五 |
20220416 |
1-2-4-6-7-8-10-11-12-19 |
星期六 |
20220417 |
1-2-4-6-7-8-10-11-12-13-20 |
星期日 |
- 条件组合覆盖
判定-条件覆盖的加强版
输入 |
测试路径 |
测试结果 |
Aaaa |
1-2-4-5 |
输入日期格式错误 |
20220411 |
1-2-4-6-14 |
星期一 |
20220412 |
1-2-4-6-7-15 |
星期二 |
20220413 |
1-2-4-6-7-8-16 |
星期三 |
20220414 |
1-2-4-6-7-8-10-17 |
星期四 |
20220415 |
1-2-4-6-7-8-10-11-18 |
星期五 |
20220416 |
1-2-4-6-7-8-10-11-12-19 |
星期六 |
20220417 |
1-2-4-6-7-8-10-11-12-13-20 |
星期日 |
- 路径覆盖
走完所有的路径
输入 |
测试路径 |
测试结果 |
Aaaa |
1-2-4-5 |
输入日期格式错误 |
20220411 |
1-2-4-6-14 |
星期一 |
20220412 |
1-2-4-6-7-15 |
星期二 |
20220413 |
1-2-4-6-7-8-16 |
星期三 |
20220414 |
1-2-4-6-7-8-10-17 |
星期四 |
20220415 |
1-2-4-6-7-8-10-11-18 |
星期五 |
20220416 |
1-2-4-6-7-8-10-11-12-19 |
星期六 |
20220417 |
1-2-4-6-7-8-10-11-12-13-20 |
星期日 |
实验一 3
- 语句覆盖
输入 |
测试路径 |
测试结果 |
|
coin |
choice |
||
0.5 |
橙汁 |
1-2-3-4-6 |
橙汁 |
1 |
橙汁 |
1-2-3-4-5-6-7-8 |
橙汁+0.5元 |
0.5 |
啤酒 |
1-2-3-7-9 |
啤酒 |
- 判定覆盖
每个判断的取真分支和取假分支至少经历一次,即判断的真假均曾被满足
输入 |
测试路径 |
测试结果 |
|
coin |
choice |
||
0.5 |
|
1-2-3-4-5 |
投币错误 |
1 |
橙汁 |
1-2-3-4-5-6-7-8 |
橙汁+0.5 |
0.5 |
啤酒 |
1-2-3-7-9 |
啤酒 |
- 条件覆盖(由于这个判定中,每个判定中都只有一个条件,因此与判定覆盖一致)
要使得每个判断中的每个条件的可能取值至少满足一次。
输入 |
测试路径 |
测试结果 |
|
coin |
choice |
||
0.5 |
|
1-2-3-4-5 |
投币错误 |
1 |
橙汁 |
1-2-3-4-5-6-7-8 |
橙汁+0.5 |
0.5 |
啤酒 |
1-2-3-7-9 |
啤酒 |
- 判定/条件覆盖
足够的测试用例,使得判定中每个条件取到各种可能的值,并使每个判定取到各种可能
输入 |
测试路径 |
测试结果 |
|
coin |
choice |
||
0.5 |
|
1-2-3-4-5 |
投币错误 |
1 |
橙汁 |
1-2-3-4-5-6-7-8 |
橙汁+0.5 |
0.5 |
啤酒 |
1-2-3-7-9 |
啤酒 |
5.条件组合覆盖
执行足够的例子,使得每个判定中条件的各种可能组合都至少出现一次。
输入 |
测试路径 |
测试结果 |
|
|
|||
coin |
choice |
||
0.5 |
|
1-2-3-4-5 |
投币错误 |
1 |
橙汁 |
1-2-3-4-5-6-7-8 |
橙汁+0.5 |
0.5 |
啤酒 |
1-2-3-7-9 |
啤酒 |
路径覆盖
选取足够多的测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)。
输入 |
测试路径 |
测试结果 |
|
coin |
choice |
||
0.5 |
|
1-2-3-4-5 |
投币错误 |
1 |
橙汁 |
1-2-3-4-5-6-7-8 |
橙汁+0.5 |
0.5 |
啤酒 |
1-2-3-7-9 |
啤酒 |
l 对实验一2、4题使用基本路径法进行测试用例设计。
实验一 2
输入 |
测试路径 |
测试结果 |
|
Price |
sum |
||
105 |
|
1-2-3-4 |
输入错误 |
80 |
105 |
1-2-3-5-6-7 |
输入错误 |
90 |
80 |
1-2-3-5-6-8-9 |
输入错误 |
80 |
90 |
1-2-3-5-6-8-10 |
找零成功 |
实验一 4
输入 |
测试路径 |
测试结果 |
欧美 |
1-2-3 |
食物供应电影播放 |
国外非欧美商务 |
1-2-4-5-6 |
食物供应电影播放 |
国外非欧美经济 |
1-2-4-5-7 |
食物供应 |
111 |
1-2-4-8-14 |
航班信息错误 |
国内商务 |
1-2-4-8-9-10 |
食物供应 |
国内经济大于2小时 |
1-2-4-8-9-11-12 |
食物供应 |
国内经济小于2小时 |
1-2-4-8-9-11-13 |
暂无任何服务 |
程序伪代码
注意: 1)参数表中EMPTAB 为职员表,DEPTTAB为部门表;
2 ) ESIZE为职员表长度,DSIZE为部门表长度;
3)ERRCODE为出错码
MAXSALERS = 0;
ERRCODE = 0;
if(ESIZE <= 0 || DSIZE <= 0)
ERRCODE = 1;
else
{
for(i = 1; i < DSIZE ; i++) //选出各部门中最大的销售额值
if(SALES[i] > MAXSALES)
MAXSALES = SALES[i];
for(j = 1; j < DSIZE; j++) //循环找出销售额最大的部门
if(SALES[j] == MAXSALES)
{
FOUND = false;
for(int k = 1; k < ESIZE ; k++) //检查销售额最大部门的所有人员
if(EMPTAB.DEPT(k) == DEPTTAB.DEPT(j))
{
FOUND = true;
if(SALARY(k) >= 15000.00 or JOB(k) = 'M') //满足条件的人员加工资
SALARY(k) = SALARY(k) + 100.00;
else
SALARY(k) = SALARY(k) + 200.00;
}
if(FOUND == false)
ERRCODE == 2;
}
}
采用判定覆盖、条件覆盖对该程序进行用例设计
判定覆盖
输入条件 |
测试路径 |
测试结果 |
|
1-2-4-3 |
0 |
|
1-2-4-5-9-10-11-15-17-18-19-16-14 |
2 |
|
1-2-4-5-9-10-11-15-17-18-19 |
1 |
条件覆盖
输入条件 |
测试路径 |
测试结果 |
|
1-2-4-3 |
0 |
|
1-2-4-5-9-10-11-15-17-18-19-16-14 |
2 |
|
1-2-4-5-9-10-11-15-17-18-19 |
1 |
五、实验体会:
较好的理解了语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,以及理解了这几种覆盖之间的区别,这几种覆盖的强弱关系是由弱到强的,在一定条件下,他们的测试用例可能一样,同时了解了基本路径覆盖的测试方法,整体来说较为清晰的了解了白盒测试的用例编写流程。同时也加强了逻辑图的绘制能力。想要设计出好饿的测试用例就要设计较为合理的测试流程图,有的情况下需要将特定的条件分割开来。