资源描述
华中科技大学文华学院
《软件质量与测试》课程设计
软件工程专业07级3班
姓名: 曹洪
学号全称:
时间: 11月12日
《软件质量与测试》课程设计
1、 实验目的
掌握软件测试用例的设计
掌握软件缺陷报告的设计
掌握软件缺陷修正报告的设计
2、 实验过程
程序preday的基本功能: 输入有效的年、 月、 日, 按[计算]按钮, 画面输出显示前1天的年, 月, 日; 能对日期非法输入的合理提示等。
2.1程序代码的编写 详见preday文件
2.2黑盒软件测试用例的设计
2.2.1等价类划分法
程序的有效输入日期为18 1月1日到2050年12月31日之间的有效日期。其中,
有效等价类为
18 1月1日到2050年12月3日之间的日期, 其中
年份为1800到2050之间的整数;
月份为1到12之间的整数;
当月份为1、 3、 5、 7、 8、 10、 12时, 日为1到31之间的整数, 当月份为4、 6、 9、 11时, 日为1到30之间的整数, 当年份为闰年元份为2时, 日为1到29之间的数值, 否则为1到28之间的数值。
无效等价类:
18 1月1日之前的日期;
2050年12月3日之后的日期;
18 1月1日到2050年12月31日之间的日期, 可是月份不为1到12之间的整数; 或者当月份为1、 3、 5、 7、 8、 10、 12时, 日不为1到31之间的整数, 当月份为4、 6、 9、 11时, 日不为1到30之间的整数, 当年份为闰年元份为2时, 日为1到29之间的数值, 否则为1到28之间的数值。
最简单的等价类划分直接以输入条件边界来划分, 得到的等价类集合见下表, 其中Y1-Y3,M1-M3,D1-D3分别是三个输入条件的相应的等价类的编号。
表1: preday问题的等价类划分
等价类
年份
月份
日期
有效等价类
Y1:1800≤年份≤2500
M1:1≤月份≤12
D1:1≤日期≤31
无效等价类
Y2:年份<1800
M2:月份<1
D2:日期<1
Y3:年份>2050
M3:月份>12
D3:日期>31
根据表1的等价类划分, 无效等价类测试能够得到如表2的测试用例, 而较为合理的有效等价类的划分如表3。三个输入各自具有不同的有效等价类数目, 若从每个等价类中选择一个典型值, 则年份、 月份和日期的取值个数分别为2、 4、 4, 这时将年份的水平值加以扩展, 即对于年份, 可在Y1和Y2中各选两个典型值。这样得到所有输入条件的取值如下:
年份: 1850、 1900、 、
月份: 1、 3、 5、 11
日期: 1、 29、 30、 31
此时, 构成的有效等价类测试用例如表4所示:
表2: Preday的无效等价类的测试用例
ID
输入日期
(年-月-日)
操作步骤
预期输出
实际输出
备注
ND-001
1700-6-15
输入年月日, 点击”计算”按钮
提示”请输入一个在1800和2500之间的整数”
请输入一个在1800和2500之间的整数
年份在Y2中
ND-002
3000-12-15
输入年月日, 点击”计算”按钮
提示”请输入一个在1800和2500之间的整数”
请输入一个在1800和2500之间的整数
年份在Y3中
ND-003
1989—1-15
输入年月日, 点击”计算”按钮
提示”请输入一个在1和12之间的整数”
请输入一个在1和12之间的整数
月份在M2中
ND-004
1989-13-12
输入年月日, 点击”计算”按钮
提示”请输入一个在1和12之间的整数”
请输入一个在1和12之间的整数
月份在M3中
ND-005
1989-4--2
输入年月日, 点击”计算”按钮
提示”请填入一个在1和31之间的整数”
请填入一个在1和31之间的整数
日期在D2中
ND-006
1989-4-32
输入年月日, 点击”计算”按钮
提示”请填入一个在1和31之间的整数”
请填入一个在1和31之间的整数
日期在D3中
表3: 较为合理的有效等价类的划分
等价类
年份
月份
日期
有效等价类
Y1:1800≤年份≤2050, 且为闰年
M1: 5、 7、 10、 12
D1:1≤日期≤28
Y2:1800≤年份≤2050, 且为非闰年
M2:2、 4、 6、 8、 9、 11
D2:29
M3:1
D3:30
M4:3
D4:31
表4: 有效等价类测试用例
ID
输入日期
(年-月-日)
操作步骤
预期输出
(年-月-日)
实际输出
(年-月-日)
ND-007
1850-1-1
输入年月日, 点击”计算”按钮
1849-12-31
1849-12-31
ND-008
1850-3-29
同上
1850-3-28.
1850-3-28.
ND-009
1850-5-30
同上
1850-5-29
1850-5-29
ND-010
1850-11-31
同上
输入日期不合法的合理提示
The month 11 Can not have 31 days.
ND-011
1900-1-29
同上
1900-1-28
1900-1-28
ND-012
1900-3-30
同上
1900-3-29
1900-3-29
ND-013
1900-5-31
同上
1900-5-30
1900-5-30
ND-014
1900-11-1
同上
1900-10-31
1900-10-31
ND-015
-1-30
同上
-1-28
-1-28
ND-016
-3-31
同上
-3-30
-3-30
ND-017
-5-1
同上
-4-30
-4-30
ND-018
-11-29
同上
-11-28
-11-28
ND-019
-1-31
同上
-1-30
-1-30
ND-020
-2-1
同上
-1-31
-1-31
ND-021
-5-29
同上
-5-28
-5-28
ND-022
-11-30
同上
-11-29
-11-29
2.2.2边界值法
根据preday的有效输入日期能够设置边界值法的测试用例取值如下,
年份: 1800、 1801、 2049、 2050
月份: 1、 2、 11、 12
日期: 1、 2、 30、 31
此时, 构成的边界值法测试用例如表5所示。
表5: 边界值法测试用例
ID
输入日期
(年-月-日)
操作步骤
预期输出
(年-月-日)
实际输出
(年-月-日)
ND-023
1800-1-1
输入年月日, 点击”计算”按钮
输入日期超出范围的合理提示
Reach the min date.
ND-024
1800-2-1
同上
1800-1-31
1800-1-31
ND-025
1800-11-30
同上
1800-11-29
1800-11-29
ND-026
1800-12-31
同上
1800-12-30
1800-12-30
ND-027
1801-1-2
同上
1801-1-1
1801-1-1
ND-028
1801-2-30
同上
输入日期不合法的合理提示
The month 2 Can not have 30 days.
ND-029
1801-11-31
同上
输入日期不合法的合理提示
The month 11 Can not have 31 days.
ND-030
1801-12-1
同上
1801-11-30
1801-11-30
ND-031
2049-1-30
同上
2049-1-29
2049-1-29
ND-032
2049-2-31
同上
输入日期不合法的合理提示
The month 2 Can not have 31 days.
ND-033
2049-11-1
同上
2049-10-31
2049-10-31
ND-034
2049-12-2
同上
2049-12-1
2049-12-1
ND-035
2050-1-31
同上
2050-1-30
2050-1-30
ND-036
2050-2-1
同上
2050-1-31
2050-1-31
ND-037
2050-11-2
同上
2050-11-1
2050-11-1
ND-038
2050-12-30
同上
2050-12-29
2050-12-29
2.2.2错误推测法
错误推测法是基于测试人员的经验和直觉来推测系统中可能存在的各种缺陷, 有针对地设计测试用例的方法。错误推法的基本思想是列举出系统中所有可能的缺陷和容易发生缺陷的特殊情况, 并根据她们选择测试用例。
程序preday错误推测法测试用例设计如表6所示。
表6: 错误推测法测试用例
ID
输入日期
(年-月-日)
操作步骤
预期输出
(年-月-日)
实际输出
(年-月-日)
备注
ND-039
无
无
所有的接文本框都清零
如图1
Ver1-Bug0001
ND-040
1800-12-0
输入年月日, 点击”计算”按钮
无
1800-11-30
Ver1-Bug0002
ND-041
1989-8-1
同上
1989-7-31
1989-7-30
Ver1-Bug0003
ND-042
1800-1-1
同上
最小输入日期的合理提示
输出”Reach the min date.”
经过
ND-043
2050-12-31
同上
2050-12-30
2050-12-30
经过
ND-044
-3-1
同上
-2-29
-2-29
经过
ND-045
-0-0
同上
无
--1-29
Ver1-Bug0004
2.3 黑盒软件测试用例的执行
2.3.1 Ver1-Bug0001
运行程序后, 界面上的年、 月、 日输入框内的数据没有清空。如图1所示:
2.3.2 Ver1-Bug0002
输入日期1800-12-0后, 会跳出输入日期不合法提示的警告信息, 如图2所示, 点击确定后能得到前一天的日期并显示在对话框内, 如图3所示:
2.3.3 Ver1-Bug0003
输入1989年8月1日后点击确定按钮后显示的日期是1989-7-30, 实际上7月是有31天的, 即程序显示的日期不正确, 程序运行如图4所示:
2.3.3 Ver1-Bug0004
输入日期 -0-0后, 会跳出”请填入一个在1和12之间的整数”的警告信息, 如图5所示, 点击确定后能在对话框内显示 —1-29, 如图6所示:
图1
图2
图3
图4
图5
图6
2.4 软件缺陷报告的设计
缺陷报告
缺陷名称: 显示错误的日期 缺陷编号ID: Ver1-Bug0003
报 告 人: 曹 洪 报告时间: -11-3
部 门: 营业部 客服B组
发 现 人: 曹 洪 发现时间: -11-1
部 门: 泉海潮公司
发现场所: 泉海潮公司 软件工具实验室501
软件系统名: preday 软件版本: preday 1.0版
发生阶段: 用户使用
再现率: 100%
严重级: 高
优先级: 高
处理决定 决定人: 曹 洪
-11-3, 缺陷报告提交给软件开发部门, 限 -11-5 18:00前修复。
-11-4上午, 质保部门修错验证测试; -11-4 下午, 与其它修复软件一起提交给版本发布部门
-11-5, 版本发布部门作为升级版Ver1.0SP1交付给用户。
缺陷现象
输入日期是1989-8-1, 点击确定按钮后显示的日期是1989-7-30, 实际上7月是有31天的, 即程序显示的日期不正确, 程序运行如图4所示:
缺陷再现步骤
1、 在线数据
d:\preday\Bug\Ver1\Ver1-Bug0003\Ver1-Bug0003.txt
2、 输入数据
3、 点击【计算】按钮
2.5 软件缺陷修正报告的设计
修错报告
缺陷名称: 显示错误的日期 缺陷编号ID: Ver1-Bug0003
报 告 人: 曹 洪 报告时间: -11-4
部 门: 软件开发部 preday 项目组
修 错 人: 宫毕克 修错时间: -11-4
部 门: 软件开发部 preday 项目组
1.缺陷原因
表面原因: 将7月的天数错误的设置为30天, 实际应是31天。
实质原因: 在设置日期为1、 月份为8时, 选择处理的逻辑错误。
2.缺陷对策
重新设置8月1日的逻辑处理。
3.对策函数名
predayDlg.cpp的
void Preday1( const int& year, const int& month, const int& day, CString& strpreday )
修正记号: Ver1-Bug0003
4.缺陷产生阶段
编码
5.修正后结果
2.6 白盒软件测试用例的设计
修正的代码:
if(month == 5 || month == 7 || month == 10 || month == 12){
preday = 30;
premonth = month - 1;
}
else if (month == 3){
premonth = month -1;
if(isLeapYear(year)){
preday = 29;
}
else{
preday = 28;
}
}
else if(month == 1){
if( year == 1800 )
{
AfxMessageBox( "Reach the min date.\n" );
bValid = false;
}
else
{
preday = 31;
premonth = 12;
preyear = year - 1;
}
}
else{
preday = 31;
premonth = month -1;
}
2.6.1语句覆盖
利用语句覆盖设计测试用例时应保证程序的每一条可执行语句至少执行一次。从程序图上看, 其实等同于节点覆盖。
语句覆盖率的计算方式如下:
语句覆盖率 = 至少被执行一次的语句数量/可执行的语句总数
进行白盒测试的程序段的流程图如图2.6.1所示, 开始此段程序的条件是日期为1, 即在设计测试用例时所有的日期都必须为1时程序运行时才能运行选择的这段程序。
语句覆盖的测试用例如表2.6.1所示, 表中经过的路径为图2.6.1中所示的路径。
图2.6.1 逻辑覆盖的流程图
表2.6.1 语句覆盖的测试用例设计
ID
输入
预期输出
经过路径
语句覆盖
年份
月份
日期
年-月-日
LC-001
1989
5
1
1989-4-30
A
16.67℅
LC-002
1980
3
1
1980-2-29
BCD
16.67℅
LC-003
3
1
-2-28
BCE
16.67℅
LC-004
1800
1
1
Reach the min date.
BFGH
16.67℅
LC-005
1801
1
1
1800-12-31
BFGI
25℅
LC-006
1988
6
1
1988-5-31
BFJ
16.67℅
2.6.2判定覆盖
判定覆盖又称分支覆盖, 其含义是: 设计测试用例时应保证程序中每个判定节点的取真和去假分支至少执行一次。由于判定节点并非只有二值情况, 对于多分支的情况, 判定覆盖的含义为: 测试用例的设计应保证程序中每个判定节点取得每种可能的结果至少一个。从流程图来看, 判定覆盖等同于边覆盖。
判定覆盖率的计算公式如下:
判定覆盖率 = 判定结果被评价的次数 / 判定结果的总数
判定覆盖的测试用例设计
ID
输入
预期输出
经过路径
判定覆盖
年份
月份
日期
年-月-日
LC-007
1990
12
1
1990-11-30
A
20℅
LC-008
1898
3
1
1898-2-28
BCE
60℅
LC-009
3
1
-2-29
BCD
60℅
LC-010
1
1
-12-31
BFGI
80℅
LC-011
1800
1
1
Reach the min date.
BFGH
80℅
LC-012
11
1
-10-31
BFJ
60℅
2.6.3条件组合覆盖
条件组合覆盖的含义是: 测试用例的设计应满足每个判定节点中所有简单判定条件的各种的组合应至少执行一次。
条件组合覆盖率的计算方法如下:
条件组合覆盖率 = 条件操作数值至少被评价一次的数量 / 条件操作数值的所有组合总数
条件组合覆盖的测试用例设计表2.6.3, 其相应测试用例的简单判定条件的判定如简单判定条件表。
表: 2.6.3 条件组合覆盖的测试用例
ID
输入
预期输出
条件组合覆盖率
年份
月份
日期
年-月-日
LC-013
5
1
-4-30
12.5℅
LC-014
7
1
-6-30
25℅
LC-015
2033
10
1
2033-9-30
37.5℅
LC-016
12
1
-11-30
50℅
LC-017
1866
3
1
1866-2-28
62.5℅
LC-018
1804
3
1
1804-2-29
62.5℅
LC-019
1800
1
1
1800-4-30
87.5℅
LC-020
1999
1
1
1999-4-30
87.5℅
简单判定条件判定表
ID
简单判定条件
Month
==5
Month
==7
Month
==10
Month
== 12
Month
==3
Month
==1
Year
==1800
isLeapYear
(year)
LC-013
T
LC-014
F
T
LC-015
F
F
T
LC-016
F
F
F
T
LC-017
F
F
F
F
T
F
LC-018
F
F
F
F
T
T
LC-019
F
F
F
F
F
T
T
LC-020
F
F
F
F
F
T
F
2.7 黑盒回归测试用例的设计
验证软件缺陷的修正
验证人: 曹洪
验证版本: Ver1.0SP1
1、 使用发生软件缺陷的测试用例( 1989-8-1)
输出结果: preday is: 1989-7-31.
判定: OK
输入日期1989-8-1。
点击[计算]按钮, 得到结果。
2、 做回归测试--检证因修错并未破坏原来正确的部分
发生Ver1-Bug0003错误的原因是再设计8月1日的日期时逻辑处理错误, 再选择回归测试的测试用例是主要是针对日期为1 , 月份为7或不为7、 年份任意的日期进行测试, 测试用例设计如下表:
回归测试测试用例表
ID
输入日期
操作步骤
预计输出
实际输出
备注
HG-001
1989-8-1
输入年月日, 点击”计算”按钮
1989-7-31
1989-7-31
经过
HG-002
1999-8-1
同上
1999-7-31
1999-7-31
经过
HG-003
2050-8-1
同上
2050-7-31
2050-7-31
经过
HG-004
1800-8-1
同上
1800-7-31
1800-7-31
经过
HG-005
1801-1-1
同上
1800-12-31
1800-12-31
经过
HG-006
1804-2-1
同上
1804-1-31
1804-1-31
经过
HG-007
1804-3-1
同上
1804-2-29
1804-2-29
经过
HG-008
1806-3-1
同上
1806-2-28
1806-2-28
经过
HG-009
1888-4-1
同上
1888-3-31
1888-3-31
经过
HG-010
1900-5-1
同上
1900-4-30
1900-4-30
经过
HG-011
1945-6-1
同上
1945-5-31
1945-5-31
经过
HG-012
1956-7-1
同上
1956-6-30
1956-6-30
经过
HG-013
1999-9-1
同上
1999-8-31
1999-8-31
经过
HG-014
-10-1
同上
-9-30
-9-30
经过
HG-015
2032-11-1
同上
2032-10-31
2032-10-31
经过
HG-016
2036-12-1
同上
2036-11-30
2036-11-30
经过
展开阅读全文