软件测试---NextDate函数---测试用例详解
计算机三级考试软件测试技术编程题

计算机三级考试软件测试技术编程题计算机三级考试软件测试技术编程题计算机三级考试软件测试技术编程题1、NextDate函数问题说明:输入一个日期,求从输入日期算起的第三天日期。
例如,输入为2023年8月8日,那么该程序的输出为2023年8月 10日。
NextDate函数包含三个整数变量month、day和year,并且满足以下条件:1≤month≤12、1≤day≤31和2000≤year≤2100。
分析^p 各种输入情况,列出为输入变量month、day、year划分的有效等价类:编程实现:〔1〕对每一个有效等价类,至少设计一个测试用例。
输入格式:输入〔yyyymmdd〕:输出格式:输出〔yyyy-mm-dd〕:覆盖等价类〔ID类型〕:闰年〔Y/N〕:例如:输入〔yyyymmdd〕20230105↙〔回车〕输出〔yyyy-mm-dd〕:2023-01-07覆盖等价类〔ID类型〕:1,8,11闰年〔Y/N〕:N〔2〕对每一个无效的month、day和year,分别输入一个无效等价类。
例如:输入〔yyyymmdd〕20231305↙〔回车〕输出〔yyyy-mm-dd〕:无效月份覆盖等价类〔ID类型〕:闰年〔Y/N〕:2、阅读下面的.一段程序:void Test1(int N,intI)1 {2int x=0;3int y=0;4while(N--》0)5{6if(I==0)7 x=y+2;8 else9 if(I==1)10 y=y+10;11 else12 x=y+20;13}//while14 }//Test1根据所给定的程序,确定该程序的独立途径如下:途径1:4→14途径2:4→6→7→14途径3:4→6→9→10→4→14途径4:4→6→9→12→4→14编程实现:对每一个独立途径,设计一个测试用例,并插入一条显示输出语句〔printf/cout〕,显示测试途径标号。
输入格式:输入〔N,I〕:输出格式:输出〔x,y〕:x= y=途径ID:例如:输入〔N,I〕:1,2↙〔回车〕输出〔x,y〕:x=20 y=0途径ID:测试途径4。
软件测试NextDate函数决策表测试法实验报告

一、实验目的:掌握黑盒测试中的决策表测试法,并对被测程序设计测试用例。
二、实验环境操作系统:Windows XP + SP2 /win7三、实验内容1、编写一个NextDate函数。
2、掌握黑盒测试中的决策表测试法的基本步骤。
3、使用决策表法设计测试用例,对编写的函数实施测试,总结分析测试结果。
四、实验步骤1、编写一个NextDate函数。
(C语言、C++)2、根据黑盒测试的决策表测试法设计测试用例。
3、根据测试用例实施测试,并记录测试结果。
五、实验代码#include <iostream>using namespace std;int a,b,c,y,m,d;<<"/n";return 1;}elsereturn a;}<<b<<"."<<c<<"\n"<<"\n";return 0;}}<<"\n";cout << "年份范围是1960-2060"<<"\n";cout<<"年"<<"\n";cin >>y;cout<<"月"<<"\n";cin>>m;cout<<"日"<<"\n";cin>>d;a=y;b=m;c=d;NextDate ( y, m, d);}return 0;}六、测试用例表NxetDate函数求解给定某个日期的下一个日期的动作桩如下:变量day加1操作;变量day复位操作;变量month加1操作;变量month复位操作;变量year加1操作NxetDate函数的求解关键是日和月的问题,所以可以在下面的条件桩的基础上建立决策表M1={month:month有30天};M2={month:month有31天,12月除外};M3={month:month是12月};M4={month:month是2月};D1={day:1=<day<=27};D2={day:day=28};D3={day:day=29};D4={day:day=30};D5={day:day=31};Y1={year:year是闰年};Y2={year:year不是闰年}NxetDate函数决策表NxetDate函数的测试用例组七、测试用例执行结果1、Test Case 1~32、Test Case 43、Test Case 54、Test Case 6~95、Test Case 106、Test Case 11~147、Test Case 158、Test Case 169、Test Case 1710、Test Case 1811、Test Case 1912、Test Case 2013、Test Case 21~22八、实验总结1、通过本次实验,学会编写一个NextDate函数。
实验软件测试用例

实验一案例实践一NextDate的第一次测试我们可以将软件缺陷的正式定义简单地归纳为以下三点:1.存在完全没有实现的功能,即软件做得不够2.基本实现了用户所需的功能,但运行时会出现一些功能或性能上的问题,即软件没有正确地去做3.实现了用户不需要的功能,即软件做得太多让我们根据上述简单规则,用下面的案例来亲自动手测试。
测试步骤:1.NextDate功能简述(1) 有效日期的正确计算功能名称:有效日期的正确计算功能编号:F01(2)无效日期的合理提示功能名称:无效日期的合理提示功能编号:F02(3) 无条件文本清除功能名称:无条件文本清除功能编号:F03(4) 无条件确定功能名称:无条件确定功能编号:F04(5)无条件取消功能名称:无条件取消功能编号:F052.开始测试根据缺陷定义的三个方面,我们需要考察需求规格说明中指明的所有功能是什么,其中每个功能是否是正确完成的,是否存在某些功能超出了需求规格说明指明的功能范围。
让我们依次来测试每个功能吧。
NextDate的第一次测试的测试用例集合如表1.1所示,表中“N/A”表示不需要输入任何数据表1.1 NextDate的第一次测试的测试用例集合从表1.1中我们可以看到,对于需要简述中的每一项功能,表中都有一个测试用例进行对应的测试,且从表中可以清晰地看出每个用例执行的结果。
结果表明,系统实现了每项功能,但针对无效输入和“确定”按钮测试失败,发现有缺陷存在。
3. 测试分析(1)测试的完整性和有效性对于每项功能,只有一个测试用例来对应,这显然是不彻底的。
以有效输入功能为例,有效的日期应该是从 1800年 1 月 1日到2050 年 12月 31日之间的所有日期,而我们目前只选择了其中的一个日期,我们面临的问题是:我们需要全部测试这些有效日期吗?如果不需要全部测试,我们又该如何从中挑选出最能够揭示系统潜在缺陷的日期?仅用少量日期来测试对软件交付造成的风险有多大?对于无效输入,将包含更多情况:第一,满足所有输入的数据类型要求,但不在有效取值范围内。
NextDate函数测试用例

NextDate函数测试用例1.测试程序源代码#include\#includeuingnamepacetd;voidNe某tDate(intyear,intmonth,intday);voidmain(){intyear=0,month=0,day= 0;Ne某tDate(year,month,day);}voidNe某tDate(intyear,intmonth,intday){cout<>year;while(!(year>=1911&&ye ar<=2022)){cout<>year;}cout<>month;while(month>12||month<1){ }cout<>month;cout<>day;while(day>31||day<1){cout<>day;}inti=0;i=day-29;while(month==2&&i>0){cout<>day;}if(month==2&&day==29){month=3;day=1;}eleday++;} eleday++;//月底计算;witch(month){cae1:cae3:cae5:cae7:cae8:cae10:if(day==32){month++; day=1;cout<if(day==31){month++;day=1;cout<cout<break;cout<白盒测试1开始2输入年、月、日43日期是否合法?无效日期5闰年的2月29日或者非闰年的2月28日6明天为3月1日87大月的31号或者小月的30号下个月是否大于129下个月1号1011日期加11月1号12结束DD-路径情况1.由一个节点组成,内度=0情况2.由一个节点组成,外度=0情况3.由一个节点组成,内度>=2或外度>=2情况4.由一个节点组成,内度=1并且外度=1情况5.长度>=1的最大链情况2:节点6、节点9、节点10情况3:节点2、节点3、节点5、节点7、节点8情况4:节点4、节点11白盒测试对每条DD-路径测试用例用例说明输入正确的年、月、日输入错误的年、月、日输入错误的年、月、日输入错误的年、月、日输入闰年2月29日输入非闰年2月28日输入大月31日输入小月30日输入12月31日输入数据预期结果实际结果2022年6月15日2022年6月16日2022年6月16日2501年6月15日日期输入有误输入有误,重新输入2022年6月33日日期输入有误输入有误,重新输入2022年13月15日日期输入有误输入有误,重新输入2000年2月29日2000年3月1日2000年3月1日2001年2月28日2001年3月1日2001年3月31日2001年4月1日2001年4月30日2001年5月1日2004年12月31日2005年1月1日2001年3月1日2001年4月1日2001年5月1日2005年1月1日。
软件测试NextDate函数测试用例详解

15
2007
2007年12月16日
Test Case 15
12
31
2007
2008年1月1日
Test Case 16
2
15
2007
2007年2月16日
Test Case 17
2
28
2000
2000年2月29日
Test Case 18
2
28
2007
2007年3月1日
Test Case 19
2
29
动作:
A1: 不可能
√
√
√
A2: day加1
√
√
√
√
√
A3: day复位
√
√
√
A4: month加1
√
√
A5: month复位
√
A6:year加1
√
决策表法
表5-8 简化的NextDate函数决策表
选项 规则
1, 2, 3
4
5
6, 7, 8, 9
10
11, 12, 13, 14
15
等价类划分法——以输入域划分等价类
等价类划分法——以输入域划分等价类
改进等价类划分测试NextDate函数如表5-5所示。 表5-5 改进等价类划分法测试用例
测试用例
输入
期望输出
month
day
year
Test Case 1
6
30
2007
2007年7月1日
Test Case 2
8
31
2007
2007年9月1日
弱强健等价类测试 弱强健等价类测试中的有效测试用例使用每个有效等价类中的一个值。弱强健等价类测试中的无效测试用例那么只包含一个无效值,其他都是有效值,即含有单缺陷假设。如表5-3所示。
NextDate函数测试用例

int i=0; i=day-29; while(month==2&&i>0) {
cout<<"本月是闰月,请在 1-29 之间从新输入日期"<<endl; cin>>day; } if(month==2&&day==29) { month=3; day=1;
} else day++; } else day++; //月底计算; switch(month) { case 1: case 3: case 5: case 7: case 8: case 10:
预期结果 2011 年 6 月 16 日 日期输入有误 日期输入有误 日期输入有误 2000 年 3 月 1 日 2001 年 3 月 1 日 2001 年 4 月 1 日 2001 年 5 月 1 日 2005 年 1 月 1 日
实际结果 2011 年 6 月 16 日
输入有误,重新输入 输入有误,重新输入 输入有误,重新输入
if(day==31) {
month++; day=1; cout<<"明天是:"<<year<<'/'<<month<<'/'<<day<<endl; } break; case 12: if(day==32) { year++; month=1; day=1; cout<<"明天是:"<<year<<'/'<<month<<'/'<<day<<endl; } break; } cout<<"明天是:"<<year<<'/'<<month<<'/'<<day<<endl; }
使用等价类划分法为NextDate函数设计测试用例

1、使用等价类划分法为NextDate函数设计测试用例:NextDate函数包含三个输入变量month、day和year(要求month、day和year 均为整数值,并且满足:1≤month≤12; 1≤day≤31;1912≤year≤2050),函数的输出为输入日期后一天的日期。
(1)列出输入域等价类表(包括有效和无效等价类)。
(2)根据(1)中的等价类,设计能覆盖所有等价类的测试用例,要求包括输入数据和预期输出,并指出各个测试用例所覆盖的等价类编号。
2、某城市电话号码由三部分组成,分别是:地区码——空白或者三位数字;前缀——非‘0’或‘1’开头的三位数字;后缀——4位数字。
假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码。
(1)列出输入域等价类表(包括有效和无效等价类)。
(2)根据(1)中的等价类表,设计能覆盖所有等价类的测试用例,要求包括输入数据和预期输出,并指出各个测试用例覆盖的等价类编号。
3、使用基本路径测试方法测试以下程序段:V oid sort(int irecordnum,int itype)1{2Int x = 0;3Int y = 0;4While( irecordnum -- >0 )5{6If( itype == 0)7Break;8Else9If(itype == 1)10x = x+10;11Else12y = y+20;13}14}说明:写在程序段某些行开头数字(1~14)是对每条语句的编号。
(1)画出程序的控制流程图(用题中给出的语句编号表示)。
(2)计算上述程序段的环形复杂度。
(3)导出基本路径集,列出程序的独立路径(用题中给出的语句编号表示)。
请根据(3)中的独立路径,设计测试用例的输入数据和预期输出。
4、使用基本路径测试方法测试以下程序段:Int IsGood( int grade ){① If (grade <= 100){② If( grade >= 80 ){③ If(year >= 90 )④ Result = 2; //优秀Else⑤ Result = 1; //良好}Else if(grade >= 0)⑥ Result = 0; //合格Else⑦ Result = -1; //分数为负数}Else⑦ Result = -1; //分数大于100⑧ Return Result;}说明:写在程序段某些行开头数字(①~⑧)是对应语句的编号。
第六章 软件测试等价类测试

{<a, c>: b+c D6 = {<a,b,c>:a≥b+c } {<a, c>: a+C D7 = {<a,b,c>:b≥a+C } {<a, c>: a+b D8 = {<a,b,c>:c≥a+b }
计算机软件测试
NextDate函数的等价类测试用例 NextDate函数的等价类测试用例
确定等价类: 确定等价类:
有效等价类: 有效等价类: M1 = {月份:1≤月份 月份: 月份 月份≤12} 月份 D1 = {日期:1≤日期 日期: 日期 日期≤31} 日期 Y1 = {年:1812≤年≤2012} 年 年 无效等价类: 无效等价类: M2 = {月份:月份 月份: 月份 月份<1} M3 = {月份:月份 月份: 月份 月份>12} D2 = {日期.:日期 日期. 日期<1} 日期 D3 = {日期:日期 日期: 日期 日期>31} Y2 = {年:年<1812} 年 Y3 = {年:年>2012} 年
计算机软件测试强健壮等价类测试用例计算机软件测试1请以nextdate函数的36个强一般等价类测试用例为基础按所讨论的那样修改日期类然后找出其他9个测试用例2如果使用强类型语言编译器请讨论怎样才能执行健壮等价类测试用例3请针对包含了直角的扩展三角形问题来修改弱一般等价类集合4请对比单多缺陷假设与边界值测试和等价类测试计算机软件测试5对电话账单来说春季和秋季的标准时间与夏时制时间的转换会带来有意思的问题
g f e a b c d
计算机软件测试
弱一般等价类测试
• •
弱一般等价类测试是基于单缺陷假设的; 弱一般等价类测试是基于单缺陷假设的; 弱一般等价类测试通过使用一个测试用例中的每个等价 区间)的一个变量实现。 类(区间)的一个变量实现。
软件测试:NextDate函数,函数返回输入日期后面的那个日期

软件测试:NextDate函数,函数返回输⼊⽇期后⾯的那个⽇期package Yr;import java.util.Scanner;public class MyDate {public static String getTomorrowday(String Today){ String Tow = "";String year = "", month = "", day = "";int y = 0, m = 0, d = 0;year = Today.substring(0, 4);month = Today.substring(4, 6);day = Today.substring(6, 8);y = Integer.parseInt(year);m = Integer.parseInt(month);d = Integer.parseInt(day);if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10) {if (d<31){d =d+1; }else if(d==31){d=1;m=m+1;}}if (m == 4 || m == 6 || m == 9|| m == 11) {if(d<30){d=d+1;}else if(d==30)d=1;m=m+1;}if(m==12){if(d<31){d=d+1;m=1;if (y==2012){System.out.print("2012 is over!");}else y=y+1;}}if(m==2){if (d<28){d=d+1;}else if(d==28){if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) // 如果是闰年{d=29;}else if ((y % 4 != 0 && y % 100 == 0) || (y % 400 != 0)){d=1;m=3;} else if(d==29){d=1;m=3;}else if(d!=29){ System.out.print("⼆⽉不存在29号");}}}year = String.valueOf(y); if (m < 10) month = "0" + String.valueOf(m); else month = String.valueOf(m);if (d < 10) day = "0" + String.valueOf(d);else day = String.valueOf(d); Tow = year + month + day;return Tow; }public static void main(String args[]){ //String tomorrowday = "20090505";Scanner s=new Scanner(System.in);System.out.print("按格式(20090905)请输⼊今天的⽇期:");String tomorrowday=s.next();System.out.println("今天是" + tomorrowday);tomorrowday = getTomorrowday(tomorrowday);System.out.println("明天是" + tomorrowday); } }。
next-date-系统测试报告

NextDate软件项目系统测试报告2016/04/04目录1.引言 (2)2.测试参考文档 (2)3.测试设计简介 (2)3.1测试用例设计 (2)3.1.1黑盒测试用例 (2)3.1.2白盒测试用例 (2)3.2测试环境与配置 (2)3.3测试方法 (3)4.测试情况 (3)4.1测试执行情况 (3)4.1.1缺陷汇总和分析 (5)4.1.2缺陷汇总和分析 (6)4.2测试覆盖 (8)4.3缺陷的统计 (8)4.3.1缺陷汇总和分析 (8)4.3.2具体的测试缺陷 (8)5.测试结论和建议 (8)5.1结论 (8)1.引言本测试报告为COMMISION计算系统的测试报告,目的在于总结测试阶段的测试以及分析测试结果,检验系统是否符合需求,预期读者为项目布置者。
主要通过软件测试技术测试系统是否可行,大致包括以下几个方面:1.提交组件数量信息的时候,是否能够将信息存入以备日后查用2.输入信息有误时候,能否提示错误3.当信息修改后看修改后的信息能不能被系统接受并保存到数据库4.查询信息时候,能不能准确查找信息5.业务逻辑是否正确,且能产生无误的输出报告2.测试参考文档暂无3.测试设计简介3.1 测试用例设计3.1.1黑盒测试用例黑盒测试中主要采用如下几种测试用例的设计方法设计测试用例,基本可以满足系统测试需要:(1)边界值测试用例(2)特殊值测试用例(3)等价类测试用例(4)消极测试用例3.1.2白盒测试用例白盒测试中主要采用如下几种测试用例的设计方法设计测试用例,基本可以满足系统测试需要,并覆盖程序所有路径:(1)基本路径测试(2)自下而上测试3.2测试环境与配置测试环境:客户端:web浏览器(chrome 49.0.2623.110 m)操作系统:windows73.3测试方法本次测试采用白盒测试方法,对系统后台业务逻辑和数据库操作部分进行单元测试;采用黑盒测试方法对系统整体功能进行测试。
其中单元测试工具是jasmine。
软件测试-测试用例的经典例子

软件测试-测试用例的经典例子一、等价类划分问:某程序规定:"输入三个整数 a、 b、 c分别作为三边的边长构成三角形。
通过程序判定所构成的三角形的类型,当此三角形为一般三角形、等腰三角形及等边三角形时,分别作计算… "。
用等价类划分方法为该程序进行测试用例设计。
(三角形问题的复杂之处在于输入与输出之间的关系比较复杂。
)解:分析题目中给出和隐含的对输入条件的要求:(1)整数(2)三个数(3)非零数(4)正数(5)两边之和大于第三边(6)等腰(7)等边如果 a、 b 、 c满足条件( 1 ) ~ ( 4 ),则输出下列四种情况之一:1)如果不满足条件(5),则程序输出为 " 非三角形 " 。
2)如果三条边相等即满足条件(7),则程序输出为 " 等边三角形" 。
3)如果只有两条边相等、即满足条件(6),则程序输出为 " 等腰三角形 " 。
4)如果三条边都不相等,则程序输出为 " 一般三角形 " 。
列出等价类表并编号覆盖有效等价类的测试用例:a b c覆盖等价类号码3 4 5(1)--(7)4 4 5(1)--(7),(8)4 5 5(1)--(7),(9)5 4 5(1)--(7),(10)4 4 4(1)--(7),(11)覆盖无效等价类的测试用例:二、边界值分析法NextDate函数的边界值分析测试用例在NextDate函数中,隐含规定了变量mouth和变量day的取值范围为1≤mouth≤12和1≤day≤31,并设定变量year的取值范围为1912≤year≤2050 。
三、错误推测法测试一个对线性表(比如数组)进行排序的程序,可推测列出以下几项需要特别测试的情况:I.输入的线性表为空表;II.表中只含有一个元素;III.输入表中所有元素已排好序;IV.输入表已按逆序排好;V.输入表中部分或全部元素相同。
习题解答1_v2.0

4
(
13
123
23 233 拒绝(无效) 15
4
45
(2)上述方法设计出的测试用例已经相当完善,无须补充。 8、有一个处理单价为 5 角钱的饮料的自动售货机,相应规格说明如下:
若投入 5 角钱或 1 元钱的硬币,按下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就 送出来。(每次只投入一个硬币,只押下一种饮料的按钮)
15
a.首先为等价类表中的每一 个等价类分别规定一个唯一 的编号。 b.设计一个新的测试用例,使 它能够尽量覆盖尚未覆盖的 有效等价类。重复这个步骤, 直到所有的有效等价类均被 测试用例所覆盖。
@
c.设计一个新的测试用例, 使它仅覆盖一个尚未覆盖的 无效等价类。重复这一步骤, 直到所有的无效等价类均被 测试用例所覆盖。
2060
9
2030 14 5 无法推算
10
[
2 30 无法推算
2000
2、找零钱最佳组合(P47) 假设商店货品价格(R) 都不大于 100 元(且为整数),若顾客付款(P)在 100 元内,现有
一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。 假定此商 店的货币面值只包括:50 元(N50)、10 元(N10)、 5 元(N5)、1 元(N1) 四种。
“……对于功率大于 50 马力的机器或者维修记录不全的或已经运行 10 年以上的 机器应予以优先的维修处理……”。
这里假定“维修记录不全”和“优先维修处理”有严格的定义。 请建立该需求的决策表,并绘制出化简(合并规则)后的决策表。
解答: 根据题目意思,得到本题有三个条件: C1:功率大于 50 马力 C2:维修记录不全 C3:已经运行 10 年以上
nextdatev1测试用例

只输入月、日
提示请键入一个整数后,不做任何操作
提示请键入一个整数,明天的日期显示为:Tomorrow is:0-0-1(为前一个执行的有效数据的月、日)
否
输入有效数据2011-10-11点击确定按钮
执行计算功能,显示Tomorrow is:2011-10-12
系统退出了
否
否
只输入年时(2011年)
提示请键入一个整数后,不做任何操作
提示请键入一个整数,明天的日期显示为:Tomorrow is:2011-0-1(为前一个执行的有效数据的月、日)
否
只输入年、月时(2011年10月)
提示请键入一个整数后,不做任何操作
提示请键入一个整数,明天的日期显示为:Tomorrow is:2011-10-1
否
1800.1.32
提示请填入一个在1和31之间的整数,明天的日期清空
提示请填入一个在1和31之间的整数,明天的日期显示为:Tomorrow is:1800-2-1
否
2050.12.0
提示请填入一个在1和31之间的整数,明天的日期清空
提示请填入一个在1和12之间的整数,明天的日期显示为:Tomorrow is:21月04日预期结果是输出Tomorrow is :2012-1-5
边界数据1800.1.1—2050.12.31
1800.1.1预期结果是输出Tomorrow is :1800-1-2
1925.6.15预期结果是输出Tomorrow is :1925-6-16
2050.12.31预期结果提示Reach the last date
否
2011.2.29
提示Can not have Feb 29th in the yeat 2011
NextData函数

NextData函数一、问题描述程序有三个输入变量month、day、year(month、day和year均为整数值,并且满足:1≤month≤12、1≤day≤31、1900≤year ≤2050。
),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上下一天的日期。
例如,输入为2005年11月29日,则该程序的输出为2005年11月30日。
请用黑盒测试方法设计测试用例。
二、程序界面计算下一天的程序代码见附录。
三、设计测试用例1. 用边界值测试方法设计测试用例用健壮性测试法设计测试用例,按照下列步骤进行:(1)分析各变量的取值健壮性测试时,各变量分别取:略小于最小值、最小值、略高于最小值、正常值、略低于最大值、最大值和略大于最大值。
month:-1,1,2,6,11,12,13;day:-1,1,2,15,30,31,32year:1899,1900,1901,1975,2049,2050,2051;(2)测试用例数有n个变量的程序,其边界值分析会产生6n+1个测试用例。
这里有3个变量,因此会产生19个测试用例。
(3)设计测试用例,见表1-1。
NextDate函数的复杂性来源于两个方面:一是输入域的复杂性(即输入变量之间逻辑关系的复杂性),二是确定闰年的规则。
但是在进行健壮性测试时,没有考虑输入变量之间的逻辑关系,也没有考虑和闰年相关的问题,因此在设计测试用例时存在遗漏问题,比如和判断闰年相关的日期:2008.2.29、1999.2.28等。
表1-1NextDate函数测试用例2. 用基于判定表的方法设计测试用例(1)分析各种输入情况,列出为输入变量month、day、year划分的有效等价类。
month变量的有效等价类:M1 = { month = 4,6,9,11 }M2 = { month = 1,3,5,7,8,10 }M3 = { month = 12 }M4 = { month = 2 }day变量的有效等价类:D1={日期:1≤日期≤27}D2={日期:日期=28}D3={日期:日期=29}D4={日期:日期=30}D5={日期:日期=31}year变量的有效等价类:Y1 = { year是闰年}Y2 = { year不是闰年}(2)分析程序规格说明,结合以上等价类划分的情况给出问题规定的可能采取的操作(即列出所有的动作桩)。
NEXTDATE的决策表示例(软件测试技术实验报告)

NextDate函数测试用例选择NextDate函数,是因为它可以说明输入定义域中的依赖性问题,这使得这个例子成为基于决策表测试的一个完美例子,因为决策表可以突出这种依赖关系。
从前面对等价类测试的分析我们知道,等价类分析假设所有的变量都是独立的。
如果变量确实是独立的,则使用类的笛卡尔积是有意义的。
如果变量之间在输入定义域中存在逻辑依赖关系,则这些依赖关系在笛卡尔积中就会丢失(说抑制可能更确切)。
决策表格式通过使用“不可能动作”概念表示条件的不可能组合,使我们能够强调这种依赖关系。
下面将对NextDate函数的决策表描述做三次尝试。
第一次尝试标识合适的条件和动作,假设首先从分析等价类集合开始。
M1 = {月份:每月有30天};M2 = {月份:每月有31天};M3 = {月份:此月是2月}D1 = {日期:1≤日期≤28};D2 = {日期:日期=29};D3 = {日期=30};D4 = {日期=31}Y1 = {年:年是闰年};Y2 = {年:年不是闰年}如果我们希望突出不可能的组合,则可以建立具有以下条件和动作的有限项决策表。
(请注意,年变量对应的等价类收缩为下表的一个条件。
)这个决策表会有256条规则,其中很多是不可能的。
如果要显示为什么这些规则是不可能的,可将动作修改为:a1:月份中的天数太多;a2:不能出现在非闰年中;a3:计算NextDate。
第二次尝试如果我们将注意力集中到NextDate函数的闰年问题上,则可以修改已有的等价类集合。
为了说明另一种决策表表示方法,这一次采用扩展项决策表开发,并更仔细地研究动作桩。
在构建扩展项决策表时,必须保证等价类构成输入定义域的真划分。
如果规则项之间存在“重叠”,则会存在冗余情况,使得多个规则都能够满足。
这里,Y2是一组1812~2012之间的年份,并除以4,2000除外。
M1 = {月份:每月有30天};M2 = {月份:每月有31天};M3 = {月份:此月是2月}D1 = {日期:1≤日期≤28};D2 = {日期:日期=29};D3 = {日期=30};D4 = {日期=31}Y1 = {年:年=2000};Y2 = {年:年是闰年};Y3 = {年:年是平年}从某种意义上说,我们采用的是“灰盒”技术,因为更仔细地研究了NextDate函数。
软件测试-NextDate函数

2
15 9 9
30
9 35 9
Page 11
2007
2007 2007 2100
不可能的输入日期
变量month无效 变量day无效 变量year无效 制作者:
边界值分析法
边界值分析法设计测试用例
在NextDate函数中,规定了变量month、day、year的相应 取值范围。在上面等价类法设计测试用例中已经提过,具 体如下: M1={month:1≤month≤12} D1={day:1≤day≤31} Y1={year:1912≤year≤2050}
决策表共有22条规则: 第1~5条规则解决有30天的月份; 第6~10条规则解决有31天的月份(除12月份以外); 第11~15条规则解决12月份; 第16~22条规则解决2月份和闰年的问题。 不可能规则也在决策表中列出,比如第5条规则中在有30天的 月份中也考虑了31日。
制作者:
Page 16
决策表法
NextDate函数的用例设计方法
主讲:黄老师
授课班级:软件设计班
制作者:
NextDate函数的用例设计方法
黑盒测试
等价类划分法
边界值分析法
因果图法 决策表法
制作者:
Page 2
等价类划分法——以输入域划分等价类
NextDate 函数包含三个变量:month(月份)、day(日期) 和 year(年),函数的输出为输入日期后一天的日期。 例如, 输入为 2007年9月 9日,则函数的输出为 2007年9月10日 。 要求输入变量 month 、 day 和 year 均为整数值,并且满足 下列条件: (1)1≤month≤12 (2)1≤day≤31 (3)1912≤year≤2050 此函数的主要特点是输入变量之间的逻辑关系比较复杂。复杂 性的来源有两个:一个是输入域的复杂性,另一个是指闰年 的规则。例如变量year和变量month取不同的值,对应的变 量day会有不同的取值范围,day值的范围可能是1~30或1~ 31,也可能是1~28或1~29。
软件测试-nextDate问题

软件测试-nextDate问题NextDate 函数包含三个变量:month 、 day 和 year ,函数的输出为输⼊⽇期后⼀天的⽇期。
例如,输⼊为 2006年3⽉ 7⽇,则函数的输出为 2006年3⽉8⽇。
要求输⼊变量 month 、 day 和 year 均为整数值,并且满⾜下列条件:①1≤month≤12②1≤day≤31③1920≤year≤20501)有效等价类为:M1={⽉份:1≤⽉份≤12}D1={⽇期:1≤⽇期≤31}Y1={年:1812≤年≤2012}2)若条件① ~ ③中任何⼀个条件失效,则 NextDate 函数都会产⽣⼀个输出,指明相应的变量超出取值范围,⽐如 "month 的值不在 1-12 范围当中 " 。
显然还存在着⼤量的 year 、 month 、 day 的⽆效组合, NextDate 函数将这些组合作统⼀的输出: " ⽆效输⼊⽇期 " 。
其⽆效等价类为:M2={⽉份:⽉份<1}M3={⽉份:⽉份>12}D2={⽇期:⽇期<1}D3={⽇期:⽇期>31}Y2={年:年<1812}Y3={年:年>2012}弱⼀般等价类测试⽤例⽉份⽇期年预期输出6 15 1912 1912年6⽉16⽇强⼀般等价类测试⽤例同弱⼀般等价类测试⽤例注:弱--有单缺陷假设;健壮--考虑了⽆效值(⼀)弱健壮等价类测试⽤例ID ⽉份⽇期年预期输出WR1 6 15 1912 1912年6⽉16⽇WR2 -1 15 1912 ⽉份不在1~12中WR3 13 15 1912 ⽉份不在1~12中WR4 6 -1 1912 ⽇期不在1~31中WR5 6 32 1912 ⽇期不在1~31中WR6 6 15 1811 年份不在1812~2012中WR7 6 15 2013 年份不在1812~2012中(⼆)强健壮等价类测试强健性等价类测试⽤例可以包含多个⽆效值,即含有多个缺陷假设。
Nextday测试用例

Nextday测试⽤例
流程图
程序流程图
程序控制流图
计算其环形复杂度
E=15,N=11,V(G)=E-N+2=14-11+2=5 P=4,v(G)=P+1=4+1=5基本路径法的测试⽤例
(1) 1,2-3-4-12
(2)1,2-3—5-6-12
(3)1,2-3-5-7-8-10-12
(4)1,2-3-5-7-8-9-12
(5)1,2-3-5-7-11-12
语句覆盖
判定覆盖
条件覆盖
判定/条件覆盖
组合条件覆盖
1.⽇期合适?是标记T1,不是标记F1
2.闰年的2⽉29⽇或者⾮闰年的2⽉29⽇?是标记T2,不是标记F2
3.⼤⽉的31⽇或者⼩⽉的30⽇?是标记T3,不是标记F3
4.下个⽉是否⼤于12⽉?是标记T4,不是标记F4
条件间的可能组合关系
路径法的测试⽤例
1、语句覆盖
2、判定覆盖
也可以让测试⽤例测试路径P2和P3。
相应的两组输⼊数据如下:
3、条件覆盖
对于M:x>3取真时T1,取假时F1;
z<10取真时T2,取假时F2;
对于N:x=4取真时T3,取假时F3;
y>5取真时T4,取假时F4。
条件:x>3,z<10,x=4,y>5
条件:x<=3,z>=10,x!=4,y<=5
5、组合覆盖
1) X>3,Z<10 2)X>3,Z>=10
3)X<=3,Z<10 4)X<=3,Z>=10
5)X=4,Y>5 6)X=4,Y<=5
7)X≠4,Y>5 8)X≠4,Y<=5
6。
实验一 Nextdata实验黑盒测试

辽宁工程技术大学上机实验报告实验分析续效等价类。
(2)根据所列出的等价类表,设计能覆盖所有等价类的测试用例,以及输入和预期的输出。
划分的等价类表如表1-1所示。
表1-1 Nextdata函数程序的等价类表输入条件有效等类编号无效等价类编号年份1912~2050 1 年份<1912 11年份>2050 12 月份1、3、5、7、8、10 2 月份<1 134、6、9、11 32 4 月份>12 1412 5日期1~27 6 日期<1 1528 729 8日期>31 1630 931 10表1-2 Nextdata函数程序的等价类测试用例表测试用例年份月份日期预期结果1 19123 27 明天是1912年3月28日2 1899 4 28 年份超过界限,请重新运行3 2051 2 29 年份超过界限,请重新运行4 1912 4 28 明天是1912年4月28日5 1912 2 29 明天是1912年3月1日6 1912 12 30 明天是1912年12月31日7 1912 12 31 明天是1913年1月1日8 1912 -1 31 月份超过界限,请重新运行9 1912 13 30 月份超过界限,请重新运行10 1912 4 -1 日期超过界限,请重新运行11 1912 2 32 日期超过界限,请重新运行等价类测试测试用例运行结果截图:测试用例1图1-1测试用例2图1-2实验分析续测试用例3图1-3 测试用例4图1-4 测试用例5图1-5 测试用例6图1-6 测试用例7图1-7 测试用例8图1-8 测试用例9图1-9实验分析续测试用例10图1-10测试用例11图1-11NextDate函数程序的边界值测试2.边界值测试在Nextdata函数中,规定了变量“年份”、“月份”和“日期”,其相应的取值范围:1912<=年份<=2050,1912<=月份<=2050,1912<=日期<=2050。
软件测试 第2版慕课版习题答案 第三章 习题及答案

第三章黑盒测试方法课后习题及答案1.黑盒测试中,测试人员和程序员应该相互独立。
解释其合理性。
答:黑盒测试是一种常见且常用的软件测试方法,它将被测软件看成是一个无法打开的黑盒,主要根据功能需求设计测试用例来完成软件的测试。
将测试人员与程序员相互独立可以以避免作者的偏见,并且通常更有效地发现缺陷和失败。
2.若测试机器学习程序,请设计出一些蜕变关系。
答:蜕变关系(Metamorphic Relation, MR)表示一组与模型算法中多对输入和输出相关的属性,3.如何识别等价类?运用示例给出解释。
答:识别等价类的六大原则:(1)如果一个输入条件规定了输入值的范围,那么可以得到3个等价类:一个有效等价类和两个无效等价类。
示例:规定输入值的范围是1〜99,如图所示,那么可以得到3个等价类:一个合法等价类{1,…,99};两个非法等价类{χ I x<l}和{x ∣x>99}oI 99无效等价类-* -一~ A —无效等价类图:输入值范围(2)如果输入条件规定了一个输入值集合,并且集合中的每个元素处理起来都不同,那么为集合中的每个元素生成一个有效等价类,为集合之外的所有元素生成一个无效等价类。
示例:如果从具有N个元素的集合中选择输入,那么得到N+1个等价类。
为每个元素生成一个有效等价类{Ml}{MN};生成一个包含集合之外所有元素的无效等价类{x∣x团{M1,...,MN}}.(3)如果处理每个有效输入的方式都不相同,那么为每个有效输入生成一个有效等价类。
示例:如果在一个菜单中选择菜单项作为输入,那么应该为每个菜单项定义—•个等价类。
(4)如果输入条件规定了有效输入的数量(假定为N),那么为正确的输入数量定义一个有效等价类,同时定义两个无效等价类。
(5)如果输入条件规定了必须满足的情形,那么生成两个等价类:一个为有效等价类;另一个为无效等价类。
示例:输入的第一个字符必须是一个数字,那么得到两个等价类一一个为有效等价类{s∣s的第一个字符是数字};另一个为无效等价类{s∣s的第一个字符不是数字}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
变量day、year无效 变量month有效
变量month、day、year无效
制作者:
等价类划分法——以输入域划分等价类
(2)改进等价类划分测试NextDate函数
在简单等价类划分测试NextDate函数中,没有考虑2月份的天数问题,也没有考虑 闰年的问题,月份只包含了30天和31天两种情况。在改进等价类划分测试NextDate 函数中,要考虑2月份天数的问题。 关于每个月份的天数问题,可以详细划分为以下等价类: M1={month:month有30天} M2={month:month有31天, 除去12月} M3={month:month是2月} M4={month:month是12月} D1={day:1≤day≤27} D2={day:day=28} D3={day:day=29} D4={day:day=30} D5={day:day=31} Y1={year:year是闰年} Y2={year:year不是闰年}
制作者: 制作者:
Page 4
等价类划分法——以输入域划分等价类
显然还存在着大量的 year 、 month 、 day 的无效组 合, NextDate 函数将这些组合统一输出为:“无效 输入日期”。其无效等价类为: M2={month:month<1} M3={month:month>12}
制作者:
制作者:
Page 12
边界值分析法
输入 测试用例 month Test Case 1 Test Case 2 Test Case 3 Test Case 4 Test Case 5 Test Case 6 Test Case 7 Test Case 8 Test Case 9 Test Case 10 Test Case 11 Test Case 12 Test Case 13 Test Case 14 Test Case 15 Test Case 16 Test Case 17 Test Case 18 -1 0 1 2 11 12 13 6 6 6 6 6 6 6 6 6 6 6 6 6 day 15 15 15 15 15 15 15 -1 0 1 2 30 31 32 15 15 15 15 15 15 Page 13 year 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 1911 1912 1913 2049 2050 2051 month不在1~12中 month不在1~12中 2000年1月16日 2000年2月16日 2000年11月16日 2000年12月16日 month不在1~12中 day不在1~31中 day不在1~31中 2000年6月2日 2000年6月3日 2000年7月1日 不可能的输入日期 day不在1~31中 year不在1912~2050中 1912年6月16日 1913年6月16日 2049年6月16日 2050年6月16日 year不在1912~2050中 期望输出
制作者:
等价类划分法——以输入域划分等价类
测试用例 Test Case 1 Test Case 2 输入
month
9 0
day
9 9
year
2007 2007
期望输出 2007年9月10日 month不在1~12中
Test Case 3
Test Case 4 Test Case 5
13
9 9
9
0 32
返回
制作者:
Test Case 20
Test Case 19
制作者:
决策表法
NextDate函数的决策表测试用例设计:
NextDate函数中包含了定义域各个变量之间的依赖问题。等价类划分法和 边界值分析法只能“独立地”选取各个输入值,不能体现出多个变量的 依赖关系。决策表法则是根据变量间的逻辑依赖关系设计测试输入数据, 排除不可能的数据组合,很好地解决了定义域的依赖问题。 NextDate函数求解给定某个日期的下一个日期的可能操作(动作桩)如下: 变量day加1操作; 变量day复位操作; 变量month加1操作; 变量month复位操作; 变量year加1操作。
制作者:
制作者:
Page 8
等价类划分法——以输入域划分等价类
表5-4 NextDate函数的强健壮等价类测试用例
输入 测试用例 month Test Case 1 Test Case 2 Test Case 3 Test Case 4 Test Case 5 Test Case 6 Test Case 7
返回
Test Case 5
Test Case 6 Test Case 7 Test Case 8
2
12 9 2
29
31 31 29
2004
2007 2007 2007
2000年3月1日(2004是闰年)
2008年1月1日 不可能的输入日期 不可能的输入日期
Test Case 9
Test Case 10 Test Case 11 Test Case 12 制作者:
2
15 9 9
30
9 35 9
Page 11
2007
2007 2007 2100
不可能的输入日期
变量month无效 变量day无效 变量year无效 制作者:
边界值分析法
边界值分析法设计测试用例
在NextDate函数中,规定了变量month、day、year的相应 取值范围。在上面等价类法设计测试用例中已经提过,具 体如下: M1={month:1≤month≤12} D1={day:1≤day≤31} Y1={year:1912≤year≤2050}
决策表共有22条规则: 第1~5条规则解决有30天的月份; 第6~10条规则解决有31天的月份(除12月份以外); 第11~15条规则解决12月份; 第16~22条规则解决2月份和闰年的问题。 不可能规则也在决策表中列出,比如第5条规则中在有30天的 月份中也考虑了31日。
制作者:
等价类划分法——以输入域划分等价类
强健壮等价类测试
强健壮等价类测试考虑了更多的无效值情况。强健壮 等价类测试中的无效测试用例可以包含多个无效值, 即含有多个缺陷假设。因为NextDate函数有三个变量, 所以对应的强健壮等价类测试用例可以包含一个无效 值,两个无效值或三个无效值。如表5-4所示。
制作者:
Page 16
决策表法
规则 选项 条件: C1: month在 C2: day在 C3: year在 动作: A1: 不可能 A2: day加1 A3: day复位 A4: month加1 A5: month复位 A6:year加1 √ √ √ √ √ √ √ √ √ √ √ √ √ M1 D1 - M1 D2 - M1 D3 - M1 D4 - M1 D5 - M2 D1 - M2 D2 - M2 D3 - M2 D4 - M2 D5 - M3 D1 - 1 2 3 4 5 6 7 8 9 10 11
2007
2007 2007
month不在1~12中
day不在1~31中 day不在1~31中
Test Case 6
Test Case 7
9
9
9
9
1911
2051
year不在1912~2050中
year不在1912~2050中
表5-3 NextDate函数的弱健壮等价类测试用例
制作者:
Page 7
制作者:
制作者:
期望输出 day 9 -1 9 -1 9 -1 -1
Page 9
year 2007 2007 1900 2007 1900 1900 1900 month不在1~12中 day不在1~31中 year不在1912~2050中
-1 9 9 -1 -1 9 -1
变量month、day无效 变量year有效
制作者: 制作者:
Page 10
等价类划分法——以输入域划分等价类
改进等价类划分测试NextDate函数如表5-5所示。
表5-5 改进等价类划分法测试用例
输入 测试用例 month Test Case 1 Test Case 2 Test Case 3 Test Case 4 6 8 2 2 day 30 31 27 28 year 2007 2007 2007 2007 2007年7月1日 2007年9月1日 2007年2月28日 2007年3月1日 期望输出制作者:Fra bibliotek制作者:
Page 17
决策表法
D2={day:day<1}
D3={day:day>31} Y2={year:year<1912} Y3={year:year>2050}
制作者: 制作者:
Page 5
等价类划分法——以输入域划分等价类
一般等价类测试用例如表5-2所示。
表5-2 NextDate函数的一般等价类测试用例 测试 用例 Test Case 1 输入 month 9 day 9 year 2007 期望输出
制作者: 制作者:
Page 3
等价类划分法——以输入域划分等价类
(1)简单等价类划分测试NextDate函数 有效等价类 M1={month:1≤month≤12}
简单等价类划分测试NextDate函数可以划分以下三种有效等价类:
D1={day:1≤day≤31}
Y1={year:1912≤year≤2050} 无效等价类 若条件 (1)~(3)中任何一个条件无效,那么NextDate 函数 都会产生一个输出,指明相应的变量超出取值范围,例如 month 的值不在 1~12 范围当中。