华中科技大学文华学院《软件质量与测试》课程设计软件工程专业07级3班姓名:曹洪学号全称:0101时间:2010年11月12日《软件质量与测试》课程设计1、实验目的掌握软件测试用例的设计掌握软件缺陷报告的设计掌握软件缺陷修正报告的设计2、实验过程程序preday的基本功能:输入有效的年、月、日,按[计算]按钮,画面输出显示前1天的年,月,日;能对日期非法输入的合理提示等。
程序代码的编写详见preday文件黑盒软件测试用例的设计2.2.1等价类划分法程序的有效输入日期为1800年1月1日到2050年12月31日之间的有效日期。
其中,有效等价类为1800年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之间的数值。
无效等价类:1800年1月1日之前的日期;2050年12月3日之后的日期;1800年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:日期<1Y3年>205M3月>1D3日>3根据的等价类划分,无效等价类测试可以得到如的测试用例,而较为合理的有效等价类的划分如表3。
三个输入各自具有不同的有效等价类数目,若从每个等价类中选择一个典型值,则年份、月份和日期的取值个数分别为2、中各选两个典Y2和Y1,这时将年份的水平值加以扩展,即对于年份,可在4、4.型值。
这样得到所有输入条件的取值如下:年份:1850、1900、2000、2004月份:1、3、5、11日期:1、29、30、31此时,构成的有效等价类测试用例如表4所示:表2:Preday的无效等价类的测试用例表3:较为合理的有效等价类的划分等价类年份月份日期M1: 5、7、10、12有效等价类 Y1:1800≤年份≤2050, D1:1≤日期≤28且为闰年M2:2、4、6Y2:1800≤年份≤2050,、8、9、D2:2911 且为非闰年M3:1 D3:30M4:3 D4:31:有效等价类测试用例4表输入日期预期输出操作步骤ID实际输出))-(年-月(年--日)月日日月年(-- 1850-1-11849-12-31 ND-007 输入年月日,点击 1849-12-31 “计算”按钮 1850-3-29 ND-008同上1850-3-28. 1850-3-28. 1850-5-301850-5-29 ND-009同上 1850-5-29The month 11 Can notND-0101850-11-31 同上输入日期不合法的合理提示 have 31 days. ND-0111900-1-28同上 1900-1-28 1900-1-29 ND-012 1900-3-29 1900-3-30 同上1900-3-29 ND-0131900-5-301900-5-30 同上 1900-5-31 1900-10-31 1900-10-31 同上 1900-11-1 ND-014.2.2.2边界值法根据preday的有效输入日期可以设置边界值法的测试用例取值如下,年份:1800、1801、2049、2050月份:1、2、11、12日期:1、2、30、31此时,构成的边界值法测试用例如表5所示。
表5:边界值法测试用例2.2.2错误推测法错误推测法是基于测试人员的经验和直觉来推测系统中可能存在的各种缺陷,有针对地设计测试用例的方法。
错误推法的基本思想是列举出系统中所有可能的缺陷和容易发生缺陷的特殊情况,并根据他们选择测试用例。
.程序preday错误推测法测试用例设计如表6所示。
表6:错误推测法测试用例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输入日期2000-0-0后,会跳出“请填入一个在1和12之间的整数”的警告信息,如图5所示,点击确定后能在对话框内显示2000—1-29,如图6所示:图1图2图3图4图62.4软件缺陷报告的设计缺陷报告缺陷名称:显示错误的日期缺陷编号ID: Ver1-Bug0003报告人:曹洪报告时间: 2010-11-3部门:营业部客服B组发现人:曹洪发现时间: 2010-11-1部门:泉海潮公司发现场所:泉海潮公司软件工具实验室501软件系统名: preday 软件版本: preday 版发生阶段:用户使用再现率: 100%严重级:高优先级:高处理决定决定人:曹洪2010-11-3,缺陷报告提交给软件开发部门,限2010-11-5 18:00前修复。
2010-11-4上午,质保部门修错验证测试;2010-11-4 下午,与其他修复软件一起提交给版本发布部门2010-11-5,版本发布部门作为升级版交付给用户。
缺陷现象输入日期是1989-8-1,点击确定按钮后显示的日期是1989-7-30,实际上7月是有31天的,即程序显示的日期不正确,程序运行如图4所示:缺陷再现步骤1、在线数据d:\preday\Bug\Ver1\Ver1-Bug0003\2、输入数据3、点击【计算】按钮2.5软件缺陷修正报告的设计修错报告缺陷名称:显示错误的日期缺陷编号ID: Ver1-Bug0003 报告人:曹洪报告时间: 2010-11-4部门:软件开发部 preday 项目组修错人:宫毕克修错时间: 2010-11-4部门:软件开发部 preday 项目组1.缺陷原因表面原因:将7月的天数错误的设置为30天,实际应是31天。
实质原因:在设置日期为1、月份为8时,选择处理的逻辑错误。
2.缺陷对策重新设置8月1日的逻辑处理。
3.对策函数名的void Preday1( const int& year, const int& month, const int& day, CString& strpreday )修正记号:Ver1-Bug00034.缺陷产生阶段编码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所示,表中通过的路径为图中所示的路径。
E图2.6.1 逻辑覆盖的流程图表2.6.1 语句覆盖的测试用例设计ID 输入预期输出通过路径语句覆盖-月-年份日期月份日年A ℅1989 LC-001 1989-4-305 1℅ BCD 1LC-002 1980 1980-2-29 3℅ 1 LC-003 2002 BCE2002-2-28 3℅1 LC-004 BFGHReach the min date.1800 125 LC-0051 ℅1800-12-311801 BFGI 1℅6 1988 BFJ1 LC-006 1988-5-312.6.2判定覆盖判定覆盖又称分支覆盖,其含义是:设计测试用例时应保证程序中每个判定节点的取真和去假分支至少执行一次。
由于判定节点并非只有二值情况,对于多分支的情况,判定覆盖的含义为:测试用例的设计应保证程序中每个判定节点取得每种可能的结果至少一个。
从流程图来看,判定覆盖等同于边覆盖。
判定覆盖率的计算公式如下:判定覆盖率 = 判定结果被评价的次数 / 判定结果的总数判定覆盖的测试用例设计ID 输入预期输出通过路径判定覆盖-日月日期月份年份年- 1 12 1990-11-30 A1990℅20LC-0071898-2-2811898 3 BCE℅LC-00860 1 20043 2004-2-29BCD℅60LC-009.2006-12-31 BFGI2007 1 1 LC-01080℅ BFGH1800 1 1Reach the min date.℅80LC-011 BFJ11 1 2011-10-312011℅60LC-012.6.条件组合覆盖测试用例的设计应满足每个判定节点中所有简单判条件组合覆盖的含义是:定条件的各种的组合应至少执行一次。
条件组合覆盖率的计算方法如下:条件操作数值条件操作数值至少被评价一次的数量 / 条件组合覆盖率 =的所有组合总数,其相应测试用例的简单判定条件的条件组合覆盖的测试用例设计表2.6.3判定如简单判定条件表。