软件测试01
实验项目名称:实验一
一、 实验目的
1、 掌握黑盒测试的基础知识;
2、 掌握黑盒测试的检查内容及测试目的;
3、 掌握黑盒测试的几种基本测试方法:等价类划分方法、边界值分析方法、因果图法和决策表法;
二、 实验内容
1、 复习有关内容,理解黑盒测试;
2、 掌握等价类划分、边界值分析方法、因果图法和决策表法,并能设计出测试用例;
3、 对具体软件,能分别使用相应的黑盒测试方法设计测试用例,并实施测试、分析测试结果。
三、 实验步骤及结果
1、设计函数实现输入日期显示星期几,并用等价类及边界值法测试
实验步骤:
① 设计程序
源程序见学习通平台;
运用等价类划分法设计测试用例,得到测试用例表。图1图2是所有用例测试的结果:
图1
图2
② 划分等价类,得到等价类表。等价类表格式如下:
|
输入条件 |
有效等价类 |
唯一标识 |
无效等价类 |
唯一标识 |
|
年 |
1900到2050内的闰年 |
(1) |
Year<1900 |
(10) |
|
|
1900到2050内的平年 |
(2) |
Year>2050 |
(11) |
|
|
|
|
非数字 |
(12) |
|
月 |
1,3,5,7,8,10,12 |
(3) |
Month<1 |
(13) |
|
|
4,6,9,11 |
(4) |
Month>12 |
(14) |
|
|
2 |
(5) |
非数字 |
(15) |
|
日 |
1~28 |
(6) |
Day<1 |
(16) |
|
|
29 |
(7) |
Day>31 |
(17) |
|
|
30 |
(8) |
Year为闰年 且Month 为2时,Day>29 |
(18) |
|
|
31 |
(9) |
Year为平年 且Month 为2时,Day>28 |
(19) |
|
|
|
|
Month=1,3,5,7,8,10,12时,Day>31 |
(20) |
|
|
|
|
Month=4,6,9,11 时,Day>30 |
(21) |
|
|
|
|
非数字 |
(22) |
③ 运用等价类划分法设计测试用例,得到测试用例表。测试用例表格式如下:
|
序号 |
输入数据 |
覆盖等价类 |
输出 |
|
输入日期长度及类型 |
1位数字字符 5位数字字符 6位数字字符 7位数字字符 有1个非数字字符 全部是非数字字符 八位有效数字 |
5 20221 202201 2022012 2022.3.26 ....... 20220326 |
显示出错 显示出错 显示出错 显示出错 显示出错 显示出错 有效输入 |
|
月份范围 |
在有效范围边界上选取数据 |
20220101 20220001 20221201 20221301 |
有效输入 显示出错 有效输入 显示出错 |
|
天数范围 |
31天的月份 30天的月份 29天的月份 28天的月份 |
20220231 20220131 20220230 20220430 20220229 20200229 20220228
|
显示出错 有效输入 显示出错 有效输入 显示出错 有效输入 有效输入 |
④ 运用边界值法设计测试用例。
|
序号 |
输入数据 |
输出 |
|
1 |
0001-01-01 |
星期一 |
|
2 |
9999-12-31 |
星期五 |
|
3 |
2023-01-01 |
星期日 |
|
4 |
2023-12-31 |
星期日 |
|
5 |
2023-01-31 |
星期二 |
|
6 |
2023-04-30 |
星期日 |
|
7 |
2023-02-28 |
星期二 |
|
8 |
2020-02-29 |
星期六 |
|
9 |
2023-01-32 |
无效日期 |
|
10 |
2023-04-31 |
无效日期 |
|
11 |
2021-02-29 |
无效日期 |
|
12 |
2020-02-30 |
无效日期 |
|
13 |
2023-05-00 |
无效日期 |
|
14 |
2023-00-10 |
无效日期 |
|
15 |
2023-13-10 |
无效日期 |
|
16 |
0000-05-10 |
无效日期 |
|
17 |
10000-05-01 |
无效日期 |
2、找零钱最佳组合
假设商店货品价格(R) 都不大于100元(且为整数),若顾客付款(P)在100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。 假定此商店的货币面值只包括:50元(N50)、10元(N10)、 5元(N5)、1元(N1) 四种。
请结合等价类划分法和边界值分析法为上述程序设计 出相应的测试用例。
实验步骤:
① 设计程序
源程序见学习通平台;
运用等价类划分法设计测试用例,得到测试用例表。图3-10是所有用例测试的结果:
图3
图4
图5 图6
图7 图8
图9 图10
② 划分等价类,得到等价类表。等价类表格式如下:
|
输入条件 |
有效等价类 |
唯一标识 |
无效等价类 |
唯一标识 |
|
商品价格 R |
0≤R≤100 |
E1 |
R<0或 R>100 |
I1, I2 |
|
付款金额 P |
R≤P≤100 |
E2 |
P<R或 P>100 |
I3, I4 |
|
输入数据类型 |
R,P均为整数 |
E3 |
R,P含非整数 |
I5 |
③ 运用等价类划分法设计测试用例,得到测试用例表。测试用例表格式如下:
|
序号 |
输入数据 |
覆盖等价类 |
输出(N50, N10, N5, N1) |
|
1 |
(50, 50) |
E1, E2, E3 |
(0, 0, 0, 0) |
|
2 |
(99, 100) |
E1, E2, E3 |
(0, 0, 0, 1) |
|
3 |
(0, 100) |
E1, E2, E3 |
(2, 0, 0, 0) |
|
4 |
(41, 100) |
E1, E2, E3 |
(1, 0, 1, 4) |
|
5 |
(95, 100) |
E1, E2, E3 |
(0, 0, 1, 0) |
|
6 |
(-5, 50) |
I1 |
输入不合法 |
|
7 |
(101, 100) |
I2 |
输入不合法 |
|
8 |
(60, 50) |
I3 |
输入不合法 |
|
9 |
(0, 101) |
I4 |
输入不合法 |
|
10 |
(50.5, 60) |
I5 |
输入不合法 |
④ 运用边界值法设计测试用例。
|
序号 |
输入数据 |
输出(N50, N10, N5, N1) |
|
1 |
(0, 0) |
(0, 0, 0, 0) |
|
2 |
(0, 1) |
(0, 0, 0, 1) |
|
3 |
(0, 5) |
(0, 0, 1, 0) |
|
4 |
(0, 10) |
(0, 1, 0, 0) |
|
5 |
(0, 50) |
(1, 0, 0, 0) |
|
6 |
(0, 100) |
(2, 0, 0, 0) |
|
7 |
(99, 100) |
(0, 0, 0, 1) |
|
8 |
(95, 100) |
(0, 0, 1, 0) |
|
9 |
(49, 100) |
(1, 0, 0, 1) |
|
10 |
(55, 60) |
(0, 0, 1, 0) |
3、有一个饮料自动售货机(处理单价为5角钱)的控制处理软件,它的软件规格说明如下:
若投入5角钱的硬币,按下“橙汁”或“啤酒”的按钮,则相应的饮料就送出来。若投入1元钱的硬币,同样也是按“橙汁”或“啤酒”的按钮,则自动售货机在送出相应饮料的同时退回5角钱的硬币。
模拟程序如下:
用因果图法测试该程序,并撰写实验报告。
实验步骤:
①编写程序
源程序见学习通平台;
程序可视化结果如图11
图11
②分析原因与结果
原因(输入条件):
C1: 投入5角硬币
C2: 投入1元硬币
C3: 按下“橙汁”按钮
C4: 按下“啤酒”按钮
结果(输出动作):
E1: 送出橙汁
E2: 送出啤酒
E3: 退回5角硬币
E4: 提示无效输入
③画出因果图(图13)
图13
④转化为决策表
|
条件组合 |
C1 |
C2 |
C3 |
C4 |
有效输入 |
E1 |
E2 |
E3 |
E4 |
|
1 |
1 |
0 |
1 |
0 |
是 |
1 |
0 |
0 |
0 |
|
2 |
1 |
0 |
0 |
1 |
是 |
0 |
1 |
0 |
0 |
|
3 |
0 |
1 |
1 |
0 |
是 |
1 |
0 |
1 |
0 |
|
4 |
0 |
1 |
0 |
1 |
是 |
0 |
1 |
1 |
0 |
|
5 |
0 |
0 |
1 |
0 |
否 |
0 |
0 |
0 |
1 |
|
6 |
1 |
1 |
1 |
0 |
否 |
0 |
0 |
0 |
1 |
⑤根据决策表设计测试用例,得到测试用例表
|
序号 |
输入数据 |
输出 |
覆盖规则 |
|
1 |
(0.5, "橙汁") |
("送出橙汁", "无找零") |
组合1 |
|
2 |
(0.5, "啤酒") |
("送出啤酒", "无找零") |
组合2 |
|
3 |
(1.0, "橙汁") |
("送出橙汁", "退回5角") |
组合3 |
|
4 |
(1.0, "啤酒") |
("送出啤酒", "退回5角") |
组合4 |
|
5 |
(0.0, "橙汁") |
"无效输入" |
组合5 |
|
6 |
(0.5, "可乐") |
"无效输入" |
组合5 |
|
7 |
(1.0, "") |
"无效输入" |
组合5 |
4、航空服务查询问题:根据航线,仓位,飞行时间查询航空服务。
假设一个中国的航空公司规定:
① 中国去欧美的航线所有座位都有食物供应,每个座位都可以播放电影。
② 中国去非欧美的国外航线都有食物供应,只有商务仓可以播放电影。
③ 中国国内的航班的商务仓有食物供应,但是不可以播放电影
④ 中国国内航班的经济仓只有当飞行时间大于2小时时才有食物供应,但是不可以播放电影。
请用程序实现上述功能,并用决策表法设计测试用例,再执行测试,撰写实验报告。
实验步骤:
① 编写程序
源程序见学习通平台;
程序可视化结果以及测试用例如图14-16
图14
图15
图16
② 构造决策表
|
等价类 |
编号 |
等价类 |
编号 |
|
航线位国外欧美航线 |
M1 |
仓位位商务舱 |
D1 |
|
航线为国外非欧美航线 |
M2 |
仓位为经济舱 |
D2 |
|
航线位国内航线 |
M3 |
|
|
|
等价类 |
编号 |
等价类 |
编号 |
|
航线位国外欧美航线 |
M1 |
仓位位商务舱 |
D1 |
|
条件桩 |
动作桩 |
|
C1:航线位国外欧美航线 |
A1:播放电影 |
|
C2:航线为国外非欧美航线 |
A2:食物供应 |
|
C3:航线位国内航线 |
|
|
C4:仓位位商务舱 |
|
|
C5:仓位为经济舱 |
|
|
C6:飞行时间小于2h |
|
|
C7:飞行时间大2h |
|
|
条件桩 |
动作桩 |
|
C1:上图M1,M2,M3中之一 |
A1:播放电影 |
|
C2: 上图D1,D2之一 |
A2:食物供应 |
|
C3: 上图Y1,Y2之一 |
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
|
|
条件桩 |
C1航线 |
M1 |
M1 |
M1 |
M1 |
M2 |
M2 |
M2 |
M2 |
M3 |
M3 |
M3 |
M3 |
|
C2仓位 |
D1 |
D1 |
D2 |
D2 |
D1 |
D1 |
D2 |
D2 |
D1 |
D1 |
D2 |
D2 |
|
|
C3飞行时间 |
Y1 |
Y2 |
Y1 |
Y2 |
Y1 |
Y2 |
Y1 |
Y2 |
Y1 |
Y2 |
Y1 |
Y2 |
|
|
动作桩 |
A1:播放时间 |
Y |
Y |
Y |
Y |
Y |
Y |
|
|
|
|
|
|
|
A2:食物供应 |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
|
Y |
|
选项 规则 |
1 |
2 |
3 |
4 |
5 |
6 |
|
|
条件桩 |
C1航线 |
M1 |
M2 |
M2 |
M3 |
M3 |
M3 |
|
C2仓位 |
- |
D1 |
2 |
D1 |
D2 |
D2 |
|
|
C3飞行时间 |
- |
- |
- |
- |
Y1 |
Y2 |
|
|
动作桩 |
A1:播放时间 |
Y |
Y |
|
|
|
|
|
A2:食物供应 |
Y |
Y |
Y |
Y |
|
Y |
|
③ 根据决策表设计测试用例,得到测试用例表
|
测试用例编号 |
航线 |
仓位 |
飞行时间 |
预期输出 |
|
1 |
国外欧美航线 |
商务舱/经济舱 |
小于2h/大于等于2h |
播放电影 食物供应 |
|
2 |
国外非欧美航线 |
商务舱 |
小于2h/大于等于2h |
播放电影 食物供应 |
|
3 |
国外非欧美航线 |
经济舱 |
小于2h/大于等于2h |
食物供应 |
|
4 |
国内航线 |
商务舱 |
小于2h/大于等于2h |
食物供应 |
|
5 |
国内航线 |
经济舱 |
小于2h |
- |
|
6 |
国内航线 |
经济舱 |
大于等于2h |
食物供应 |
5、旅馆住宿系统中,旅馆业主可进行添加房间操作。
– 旅馆业主登录旅馆住宿系统后,可以请求添加房间;
– 待进入“房间管理”对话框,单击“添加”按钮可进行添加房间操作;
– 添加房间时,可以设定房间的房间编号、房间类型、房间描述信息;
– 添加房间信息不能缺失,若某一项未填写,要给出提示信息;
– 房间编号长度不超过5个字符;
– 房间描述长度不超过1000个字符;
– 房间信息不能重复,成功填写后,可进行保存或取消操作,之后返回“房间管理”对话框,结束添加房间流程。
实验步骤:
利用黑盒测试策略编写添加房间功能的测试用例。
源程序见学习通平台;
|
序号 |
房间编号长度是否大于5 |
是否添加房间类型 |
房间描述长度是否超过1000个字符 |
房间信息是否重复 |
信息是否缺失 |
期望输出 |
实际输出 |
|
1 |
Y |
Y |
Y |
N |
N |
添加成功 |
添加成功 |
|
2 |
Y |
Y |
Y |
Y |
N |
添加失败 |
添加失败 |
|
3 |
Y |
Y |
Y |
N |
Y |
添加失败 |
添加失败 |
|
4 |
Y |
Y |
Y |
Y |
Y |
添加失败 |
添加失败 |
|
5 |
Y |
Y |
N |
N |
N |
添加失败 |
添加失败 |
|
6 |
Y |
N |
Y |
N |
N |
添加失败 |
添加失败 |
|
7 |
N |
Y |
Y |
N |
N |
添加失败 |
添加失败 |
|
8 |
N |
N |
N |
N |
N |
添加失败 |
添加失败 |
四、 个人体会
① 在实际的测试中,如何设计测试用例才能达到用最少的测试用例检测出最多的缺陷;
盯着高风险的地儿测:先找找那些对用户影响大、常用或者容易出岔子的功能。就好比航空服务查询,国际航线和商务舱服务得重点测,因为这是大家特关心的。然后呢,按照风险高低给测试用例排个序,先把高风险的测了。
用等价类划分:把输入数据分成有效和无效的类别。比如说航线类型,能分成 “中国去欧美”“中国去非欧美”“中国国内” 这几个有效类,再加上个 “无效输入” 的无效类。从每个类别里挑一两个有代表性的例子当测试用例,像 “中国去欧美” 就选个具体的美国来测。
边界值分析:碰到数值型输入,像飞行时间,得把边界值找出来。比如飞行时间的边界可以是 “正好 2 小时”“不到 2 小时”“超过 2 小时”。然后设计测试用例专门测这些边界情况,像测测飞行 2 小时、1 小时 59 分、2 小时 1 分的情况。
场景分析:按照用户实际使用的场景来设计测试用例。像设计一个从中国到美国坐商务舱的航班查询场景,再设计一个国内短途坐经济舱的查询场景。得保证测试用例能把用户的关键操作流程,像查询、预订、支付这些都覆盖到。
用正交表测试:正交表这方法挺高效的,能减少测试用例数量,还能把各种可能的组合都覆盖到。就拿航线类型、舱位、飞行时间这几个因素来说,用正交表就能生成最少的测试用例组合。
靠经验测试:看看以前的缺陷数据,针对以前出过问题的地方设计测试用例。要是以前发现过经济舱在短途航班上食物供应有问题,那就专门设计个测试用例来看看现在还有没有这毛病。再就是结合开发人员和测试人员的经验,设计些可能找出缺陷的测试用例。
② 在进行用例设计时,如何考虑软件测试用例的充分性和减少软件测试用例的冗余性;
把需求搞清楚 比如说航空服务查询功能,需求可能包括航线类型、舱位、飞行时间、食物供应、电影播放这些,都得考虑到。
别重复测一样的:检查一下测试用例,别让它们重复测相同的等价类。要是已经测过 “中国去欧美” 的商务舱了,要是 “中国去欧美” 的经济舱和商务舱行为没啥大差别,就不用再测经济舱了。要是有好几个测试用例都测同一个功能点,能合并就合并。像两个测试用例都测 “中国国内” 的经济舱,就是飞行时间不一样,那就可以合并成一个,两种情况一块测。
优化测试用例: 把那些没用或者多余的删掉。
自动化测试:那些重复测、执行频率高的测试用例,可以用 Selenium、JUnit 这些自动化测试工具来测,能省不少人工。还可以用参数化测试,通过一组参数覆盖多种情况,减少测试用例数量。比如说测飞行时间,用参数化测试就能覆盖不同时间段。
文件源码位置:

压缩文件


浙公网安备 33010602011771号