426
实验二白盒测试
一、实验目的
1、 掌握白盒测试的基础知识;
2、 掌握白盒测试的检查内容及测试目的;
3、 掌握黑盒测试的几种基本测试方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖。
二、实验要求
1、 复习有关内容,理解白盒测试;
2、 掌握语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,并能设计出测试用例;
3、 对具体软件,能分别使用相应的白盒测试方法设计测试用例,并实施测试、分析测试结果。
三、实验内容
l 对实验一1、3题使用逻辑覆盖法进行测试用例设计。
一设计函数实现输入日期显示星期几
1. 语句覆盖
测试用例表
|
测试用例编号 |
输入日期 |
预期输出 |
|
SC1 |
2025-04-20 |
星期日(Sunday) |
|
SC2 |
2025-02-29 |
无效日期 |
|
SC3 |
2000-02-29 |
星期二(Tuesday) |
|
SC4 |
非法格式(如abc) |
错误提示 |
2. 判定覆盖
确保程序中的每个判定语句的真假分支都被执行。
测试用例信息表
|
测试用例编号 |
输入日期 |
测试判定条件 |
预期输出 |
|
DC1 |
2025-04-20 |
合法日期为真 |
星期日 |
|
DC2 |
2025-02-29 |
合法日期 为假 |
无效日期 |
|
DC3 |
2000-02-29 |
是否闰年 为真 |
星期二 |
|
DC4 |
2001-02-28 |
是否闰年 为假 |
星期三 |
|
DC5 |
非法格式(如abc) |
分隔符判断为假 |
错误提示 |
3. 条件覆盖
确保程序中的每个条件的可能结果都被执行。
测试用例表
|
测试用例编号 |
输入日期 |
测试条件 |
预期输出 |
|
CC1 |
2000-02-29 |
year % 4 == 0 为真 |
星期二 |
|
CC2 |
2000-02-29 |
year % 100 != 0 为假 |
星期二 |
|
CC3 |
2000-02-29 |
year % 400 == 0 为真 |
星期二 |
|
CC4 |
1900-02-28 |
year % 4 == 0 为真 |
星期二 |
|
CC5 |
1900-02-28 |
year % 100 != 0 为假 |
星期二 |
|
CC6 |
1900-02-28 |
year % 400 == 0 为假 |
星期二 |
|
CC7 |
2004-02-29 |
year % 4 == 0 为真 |
星期五 |
|
CC8 |
2004-02-29 |
year % 100 != 0 为真 |
星期五 |
|
CC9 |
2004-02-29 |
year % 400 == 0 为假 |
星期五 |
流程图
三有一个饮料自动售货机(处理单价为5角钱)的控制处理软件,它的软件规格说明如下:
若投入5角钱的硬币,按下“橙汁”或“啤酒”的按钮,则相应的饮料就送出来。若投入1元钱的硬币,同样也是按“橙汁”或“啤酒”的按钮,则自动售货机在送出相应饮料的同时退回5角钱的硬币。
1. 语句覆盖
测试用例表
|
测试用例编号 |
输入硬币 |
按钮选择 |
预期输出 |
|
SC1 |
5角 |
橙汁 |
送出橙汁 |
|
SC2 |
5角 |
啤酒 |
送出啤酒 |
|
SC3 |
1元 |
橙汁 |
送出橙汁并退回5角 |
|
SC4 |
1元 |
啤酒 |
送出啤酒并退回5角 |
|
SC5 |
非法硬币 |
任意按钮 |
无动作并提示无效硬币 |
2. 判定覆盖
测试用例信息表
|
测试用例编号 |
输入硬币 |
按钮选择 |
测试判定条件 |
预期输出 |
|
DC1 |
5角 |
橙汁 |
判断投入硬币为5角为真 |
送出橙汁 |
|
DC2 |
1元 |
橙汁 |
判断投入硬币为1元为真 |
送出橙汁并退回5角 |
|
DC3 |
非法硬币 |
任意按钮 |
判断投入硬币合法为假 |
无动作并提示无效硬币 |
|
DC4 |
5角 |
无效按钮 |
判断按钮选择有效为假 |
无动作并提示无效选择 |
3. 条件覆盖
测试用例表
|
测试用例编号 |
输入硬币 |
按钮选择 |
测试条件 |
预期输出 |
|
CC1 |
5角 |
橙汁 |
投入硬币为5角为真 |
送出橙汁 |
|
CC2 |
1元 |
橙汁 |
投入硬币为1元为真 |
送出橙汁并退回5角 |
|
CC3 |
非法硬币 |
任意按钮 |
投入硬币合法为假 |
无动作并提示无效硬币 |
|
CC4 |
5角 |
无效按钮 |
按钮选择有效为假 |
无动作并提示无效选择 |
流程图
l 对实验一2、4题使用基本路径法进行测试用例设计。
二假设商店货品价格(R) 都不大于100元(且为整数),若顾客付款(P)在100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。 假定此商店的货币面值只包括:50元(N50)、10元(N10)、 5元(N5)、1元(N1) 四种。
控制流图
基本路径法测试用例设计
测试用例信息表
|
测试用例编号 |
价格 R |
付款 P |
预期输出(N50, N10, N5, N1) |
覆盖路径 |
|
TC1 |
95 |
100 |
(1, 0, 0, 0) |
1→2→3→4→5→6→7 |
|
TC2 |
101 |
100 |
"无效输入" |
1→2→3→7 |
|
TC3 |
50 |
49 |
"无效输入" |
1→2→3→4→7 |
|
TC4 |
'a' |
100 |
"输入必须为整数" |
1→2→7 |
|
TC5 |
45 |
100 |
(1, 0, 1, 0) |
1→2→3→4→5→6→7 |
|
TC6 |
99 |
100 |
(0, 0, 0, 1) |
1→2→3→4→5→6→7 |
|
TC7 |
1 |
100 |
(1, 1, 0, 0) |
1→2→3→4→5→6→7 |
4、航空服务查询问题:根据航线,仓位,飞行时间查询航空服务。
假设一个中国的航空公司规定:
① 中国去欧美的航线所有座位都有食物供应,每个座位都可以播放电影。
② 中国去非欧美的国外航线都有食物供应,只有商务仓可以播放电影。
③ 中国国内的航班的商务仓有食物供应,但是不可以播放电影
④ 中国国内航班的经济仓只有当飞行时间大于2小时时才有食物供应,但是不可以播放电影。
控制流图
基本路径法测试用例设计
测试用例信息表
|
测试用例编号 |
航线类型 |
舱位类型 |
飞行时间 |
预期输出(食物供应,电影服务) |
覆盖路径 |
|
TC1 |
国际欧美 |
商务舱 |
超过两小时 |
有,有 |
1→2→3→11→12 |
|
TC2 |
国际非欧美 |
经济舱 |
两小时以内 |
有,无 |
1→2→4→7→11→12 |
|
TC3 |
国内 |
经济舱 |
超过两小时 |
有,无 |
1→2→5→9→10→11→12 |
|
TC4 |
国内 |
商务舱 |
超过两小时 |
有,无 |
1→2→5→8→11→12 |
|
TC5 |
国际欧美 |
经济舱 |
两小时以内 |
有,有 |
1→2→3→11→12 |
|
TC6 |
国际非欧美 |
商务舱 |
超过两小时 |
有,有 |
1→2→4→6→11→12 |
|
TC7 |
国内 |
经济舱 |
两小时以内 |
无,无 |
1→2→5→9→10→11→12 |
l 5、
程序伪代码
注意: 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;
}
}
采用判定覆盖、条件覆盖对该程序进行用例设计
流程图
判定覆盖和条件覆盖测试用例设计
判定覆盖
测试用例编号 描述 输入条件 输出结果(ERRCODE) 覆盖路径
TC1 输入表为空 ESIZE = 0,DSIZE = 0 1 1→2→3→10→11
TC2 正常输入,最大部门有职员 ESIZE > 0,DSIZE > 0 0 1→2→3→4→5→6→7→8→9→10→11
TC3 最大部门无职员 ESIZE > 0,DSIZE > 0 2 1→2→3→4→5→6→7→8→9→10→11
测试用例信息表
|
测试用例编号 |
描述 |
输入条件 |
输出结果(ERRCODE) |
|
TC1 |
输入表为空 |
ESIZE = 0,DSIZE = 0 |
1 |
|
TC2 |
正常输入,最大部门有职员 |
ESIZE > 0,DSIZE > 0 |
0 |
|
TC3 |
最大部门无职员 |
ESIZE > 0,DSIZE > 0 |
2 |
条件覆盖
测试用例编号 描述 输入条件 输出结果(ERRCODE) 覆盖路径
TC4 薪资 ≥ 15000.00 SALARY[k] ≥ 15000.00 0 1→2→3→4→5→6→7→8→9→10→11
TC5 职位为经理 (M) JOB[k] = 'M' 0 1→2→3→4→5→6→7→8→9→10→11
TC6 薪资 < 15000.00 且职位非经理 SALARY[k] < 15000.00,JOB[k] ≠ 'M' 0
测试用例信息表
|
测试用例编号 |
描述 |
输入条件 |
输出结果(ERRCODE) |
|
TC4 |
薪资 ≥ 15000.00 |
SALARY[k] ≥ 15000.00 |
0 |
|
TC5 |
职位为经理 (M) |
JOB[k] = 'M' |
0 |
|
TC6 |
薪资 < 15000.00 且职位非经理 |
SALARY[k] < 15000.00,JOB[k] ≠ 'M' |
0 |
五、实验体会:
1. 遇到的问题
理解需求问题,一开始对于实验的具体要求和目标理解不够深入,导致在设计测试用例时方向有偏差,走了弯路。逻辑梳理问题,在分析程序逻辑时,对于一些复杂的条件判断和循环结构理解不够透彻,难以准确地构建控制流图和流程图。工具使用问题,不熟悉绘图工具的操作,绘制流程图时遇到了一些困难,如节点布局不合理、连线不清晰等,影响了图表的美观性和可读性。测试用例设计问题,在设计判定覆盖和条件覆盖的测试用例时,难以确保所有条件组合都被覆盖,存在遗漏的风险,设计出的测试用例不够全面。
2. 问题解决方法
深入分析逻辑,通过仔细阅读代码,使用调试工具单步执行程序,观察程序的执行流程和变量变化,结合手动画流程图的方式,逐步梳理清楚程序的逻辑结构,准确构建控制流图和流程图。学习工具使用,在网上查找绘图工具的使用教程,通过实践操作熟悉工具的各项功能,不断调整和优化流程图的布局,使其更加清晰、美观和符合规范。采用系统方法设计测试用例,学习和应用测试用例设计的系统方法,如判定表、等价类划分等,结合程序逻辑,全面分析所有可能的条件组合和路径,确保测试用例覆盖充分。
3. 收获
专业知识提升,通过本次实验,对程序测试的方法和流程有了更深入的理解,掌握了控制流图、流程图的绘制以及判定覆盖和条件覆盖的基本概念和应用场景,进一步巩固了软件工程的相关知识。问题解决能力增强,在遇到问题时,学会了通过多种途径查找资料、分析原因并寻找解决方案,提高了独立解决问题的能力,培养了严谨的思维习惯和耐心。工具使用熟练度提高,熟悉了绘图工具的使用,能够更熟练地运用工具表达自己的想法和成果,提高了工作效率,为今后的学习和工作提供了有力的支持。
浙公网安备 33010602011771号