软件测试等价类法next day(含源程序)
- 格式:doc
- 大小:58.50 KB
- 文档页数:6
实验三黑盒实验2一、实验目的通过本次实验使学生熟悉黑盒测试的等价类、决策表测试方法。
二、实验环境硬件环境:微型计算机。
软件环境:Windows 操作系统,Microsoft Visual Studio 2005等。
三、实验内容题目一:三角形问题输入三个整数a、b、c,分别作为三角形的三条边,通过程序判断这三条边是否能构成三角形?如果能构成三角形,则判断三角形的类型(等边三角形、等腰三角形、一般三角形)。
要求输入三个整数a、b、c,必须满足以下条件:1≤a≤200;1≤b≤200;1≤c≤200。
请用等价类划分法对三角形问题设计测试用例进行测试,并做出测试分析。
题目二:日期问题用决策表测试法测试一下程序:该程序有三个输入变量month、day、year(month 、 day 和year均为整数值,并且满足:1≤month≤12和1≤day≤31以及1800≤year≤2050),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上隔一天的日期。
例如,输入为 2004 年11月29日,则该程序的输出为2004年12月1日。
四、实验步骤1.三角形问题(1)首先分析题目中给出的条件和隐含的输入要求,输入条件如下:(2)根据输入条件的要求划分等价类,列出等价类表并编号。
(3)设计测试用例,覆盖上表中的等价类(4)分析测试结果测试用例很不错,测试用例覆盖了所有的有效等价类,且仅覆盖一个无效等价类。
2. 日期问题(1) 分析各种输入情况,列出为输入变量 month 、 day 、 year 划分的有效等价类。
(2) 分析程序的规格说明,并结合以上等价类划分的情况,给出问题规定的可能采取的操作(即列出所有的动作桩)。
条件桩:R1:月份为{M1,M2,M3,M4}之中的一个R2:日期为{D1,D2,D3,D4,D5,D6}之中的一个R3:年份为{Y1,Y2}之中的一个动作桩:Day+2;Day=2;Day=1;Month+1;Month=1;year+1;日期不存在。
实验二、黑盒测试技术(二)一、实验类型实验类型为验证型,2个学时。
二、实验目的(1)能熟练应用边界值和决策表测试技术进行测试用例设计;(2)对测试用例进行优化设计;三、背景知识(一)边界值测试1.边界值分析边界值分析是考虑边界条件而选取测试用例的一种功能测试方法。
边界值分析关注输入空间的边界,以标识测试用例,因为错误更可能出现在输入变量的极值附近。
边界值分析的基本思想是:使用在最小值、略高于最小值、正常值、略低于最大值和最大值处取输入变量值。
2.健壮性测试健壮性是指在异常情况下,软件还能正常运行的能力。
健壮性考虑的主要部分是预期输出,而不是输入。
健壮性测试是边界值分析的一种简单扩展。
除了变量的5个边界分析取值还要考虑略超过最大值(max)和略小于最小值(min)时的情况。
3.最坏情况测试最坏情况测试将意味着更大工作量,n变量函数的最坏情况测试会产生5的n次方个测试用例,而边界值分析只产生4n+1个测试用例。
(二)基于决策表的测试决策表适合描述不同条件集合下采取行动的若干组合的情况。
使用决策表标识测试用例,则把条件解释为输入,行动解释为输出。
有时条件最终引用输入的等价类,行为引用被测试软件的主要功能处理部分,规则解释为测试用例。
对于有限条目决策表,如果有n个条件,则必须有2条规则。
如果不关心条目实际地说明条件是不相关的,则没有不关心条目的规则统计为1条规则,规则中每出现一个不关心条目,该规则数乘一次2。
四、实验设备主流PC机一套,要求安装windows操作系统、Visual Studio2010或Eclipse开发工具和OFFICE工具五、实验容NextDate函数根据下面给出的规格说明,分别利用决策表方法,给出足够的测试用例并根据用例执行测试。
NextDate函数包含三个变量:Month(月份)、day(日期)和year(年),函数的输出为输入日期后一天的日期。
例如,输入为2007年9月9日,则函数的输出为2007年9月10日。
第一章软件测试基础课后习题答案1.什么是软件测试?软件测试发现一个应用从开始到结束时的错误,测试是一个过程。
(Glenford J.Myers 提出对软件测试的定义)测试是发现错误而执行的一个程序或系统的过程测试以发现故障为目的,是为了发现故障而执行程序过程2.软件测试涉及哪几个关键问题?软件测试的经济性原则谁来测试(who)测试什么(what)什么时候测试(when)怎样进行测试(how)测试的停止标准是什么(which)3.为什么说软件需求说明是软件故障的最大来源?软件需求是描述了系统有哪些功能,功能操作,性能如何等问题,是开发阶段的重要文档,也是后期软件开发的重要依据。
如果软件需求一开始就错了,在后面处理过程则会把错误放大,这样使得修复起来成本就是提升。
4.简述软件测试的复杂性和经济性。
复杂性1.完全测试是不现实的2.软件测试是有风险的3.杀虫剂现象4.缺陷的不确定性经济性软件测试是软件生命期中费用消耗最大的环节。
测试费用除了测试的直接消耗外,还包括其他的相关费用5.分析最近发生的软件质量事故,并简要分析产生的原因。
具体案例具体分子6.启动Windows计算器,输入“6,000-6=”(逗号不能少),观察计算结果,这是软件故障吗?为什么?这是软件故障中的界面缺陷。
由于无法输入逗号,无法进行输入,当做一个界面缺陷,因为不符合需求,原本是小数点变成了逗号。
7.软件测试应遵循哪些重要的原则或方针?1.完全测试程序是不可能的2.软件测试是有风险的3.测试无法找到隐藏的软件故障4.存在的故障数量与发现的故障数量成正比5.杀虫剂现象6.并非所有软件故障都能修复7.一般不要丢弃测试用例8.应避免测试自己编写的程序9.软件测试是一项复杂且具有创造性的和需要高度智慧的挑战性任务8.假定无法完全测试某一程序,那么在决定是否应该停止测试时应考虑哪些问题?在工作中,常用的停止测试标准有五类:测试超过了预定时间,停止测试执行了所有测试用例但没有发现故障,停止测试使用特定的测试用例方法作为判断测试停止的基础正面指出测试完成要求,如发现并修改70个软件故障根据单位是见查出故障数量决定是否停止测试9 . 假如星期一测试软件的某一功能时,每小时能发现一个新的软件故障,那么星期二会以什么频率发现软件故障?第一感觉就是与第一天(星期一)的一样,既然前一天发现的频率以每小时都有新的故障,说明软件的缺陷很高,所以第二天也可能有同样的频率。
.软件测试实验报告题目名称:计算下一天时间测试专业班级:软件三班学号: 041140338 姓名:王超一、实验综述1、实验目的及要求实验目的:掌握等价类测试方法的原理及使用。
实验要求:(1)完成各个程序的编写(2)按要求设计测试用例,并运行测试用例检查程序的正确与否实验内容:对日期操作函数进行等价类测试方法的测试用例设计及测试结果记录与分析。
2、实验仪器、设备或软件1. 个人计算机PC;2. VisualC++/.NET编程环境。
二、实验过程(实验步骤、记录、数据、分析)1.程序有三个变量(月份、日期、和年)的函数,函数返回输入日期后面的那个日期。
变量都具有整数值,且满足以下条件:C1 1<=月份<=12C2 1<=日期<=31确定等价类M1={月份:每月有30天}M2={月份:每月有31天}M3={月份:此月是2月}D1={日期:1<=日期<=28}D2={日期:日期=29}D3={日期:日期=30}D4={日期:日期=31}Y1={年:年是闰年}Y2={年:年是平年}一般等价类测试用例应该有3个(月份类)x 4个(日期类)x 2(年类)= 24个2425262222728302001200120012001.2.282001.3.1Day超出2001.2.272001.2.28Error input 通过分析前两个测试用例表,就会发现这些测试用例是不充分的,而且存在冗余。
测试用例:1.对日期进行测试1)输入-1日,年月正常输入。
2)输入1日,年月正常输入。
3)输入15日,年月正常输入。
4)输入30日,年月正常输入。
5)输入30日,年月正常输入。
6)输入31日,年月正常输入。
7)输入32日,年月正常输入。
2.对月份进行测试1)输入-1月,年正常输入。
2)输入1月,年日正常输入。
3)输入6月,年日正常输入。
4)输入12月,年日正常输入。
5)输入13月,年正常输入。
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)分析程序规格说明,结合以上等价类划分的情况给出问题规定的可能采取的操作(即列出所有的动作桩)。
等价类划分法
输入条件 有效类 无效类
输入年份 1900
输入非int[4]
输入月份 1<=M<=12[5] M<1[6]
M>12[7]
输入非int[8]
输入日期 1<=D<=31[9] D<1[10]
D>31[11]
输入非int[12]
测试用例:
序号 Y,M,D 覆盖等价类 预期输出
1 2015,11,17 1,5,9 2015,11,18
2 1800,5,6 2,5,9
输入不合法
3 2200,5,6 3,5,9
输入不合法
4 R,5,6 4,5,9
输入不合法
5 2015,0,9 6,5,9
输入不合法
6 2015,13,29 1,7,9
输入不合法
7 2015,t,29 1,8,9
输入不合法
8 2015,7,0 1,5,10
输入不合法
9 2015,7,37 1,5,11
输入不合法
10 2015,7,p 1,5,12
输入不合法
边界值分析法
测试用例:
序号 Y,M,D 预期输出
1 1900,6,15 1900,6,15
2 1901,6,15 1901,6,15
3 2100,6,15 2100,6,15
4 2099,6,15 2099,6,15
5 2000,1,15 2000,1,15
6 2000,2,15 2000,2,15
7 2000,11,15 2000,11,15
8 2000,12,15 2000,12,15
9 2000,6,1 2000,6,1
10 2000,6,2 2000,6,2
11 2000,6,30 2000,6,30
12 2000,6,31
输入不合法
错误推测法
测试用例:
序号 Y,M,D 预期输出
1 2000,4,31
输入不合法
2 2000,2,29 2000,2,29
3 2000,2,30
输入不合法
4 2001,2,29
输入不合法
5 2000,6,31
输入不合法
6 2000,9,31
输入不合法
7 2000,11,31
输入不合法
VC6.0:
#include
void main()
{
int year=0,month=1,day=1;
printf("请分别输入年月日,以空格隔开。\n");
scanf("%d%d%d",&year,&month,&day);
if(year<1900||year>2100)
printf("输入不合法!\n");
printf("输入日期为%d年%d月%d日\n",year,month,day);
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
if(day!=31)
printf("下一天为%d年%d月%d日
\n",year,month,++day);
else
printf("下一天为%d年%d月1日\n",year,++month);
break;
case 2:
if((year%4==0&&year%100!=0)||year%400==0)
{
if(day>29)
{
printf("输入不合法!\n");
break;
}
if(day!=29)
printf("下一天为%d年%d月%d日
\n",year,month,++day);
else
printf("下一天为%d年%d月1日
\n",year,++month);
}
else
{
if(day>28)
{
printf("输入不合法!\n");
break;
}
if(day!=28)
printf("下一天为%d年%d月%d日
\n",year,month,++day);
else
printf("下一天为%d年%d月1日
\n",year,++month);
}
break;
case 4:
case 6:
case 9:
case 11:
if(day!=30)
printf("下一天为%d年%d月%d日
\n",year,month,++day);
else
printf("下一天为%d年%d月1日
\n",year,++month);
break;
case 12:
if(day=31)
printf("下一天为%d年1月1日\n",++year);
else
printf("下一天为%d年%d月%d日
\n",year,month,++day);
break;
}
}