基于规格说明的测试技术软件动态测试.docx
《基于规格说明的测试技术软件动态测试.docx》由会员分享,可在线阅读,更多相关《基于规格说明的测试技术软件动态测试.docx(27页珍藏版)》请在冰点文库上搜索。
基于规格说明的测试技术软件动态测试
辽宁工程技术大学上机实验报告
课程名称
软件测试与评估
实验题目
基于规格说明的测试技术
实验
目的
1.了解软件动态测试的相关知识。
2.能根据案例做出相应的图表。
3.掌握软件动态测试的基本方法。
4.针对案例,能够运用动态测试技术中的具体方法进行测试用例的设计。
实验
准备
1.计算机一台,有c与c++程序设计学习与实验系统的软件。
2.了解至少一门程序设计语言,并能熟练应用。
能够编写并运行有关实验的相关代码。
3.了解等价类划分与边界值分析的方法并能应用方法分析程序。
4.了解因果图和决策表的方法并能应用方法分析程序。
实验
进度
本次共有1个练习,完成1个。
实验
内容
1.根据NextDate函数问题进行编程,有三个变量mouth(月份),day(日期),year(年)。
函数的输出为输入日期后一天的日期。
要求输入变量month,day和year均为整数值。
并且满足下列条件:
1≤month≤12,1≤day≤31,1912≤year≤2050。
(此函数的主要特点是输入变量之间的逻辑关系比较复杂。
复杂性的来源有两个:
一个是输入域的复杂性,另一个是指闰年的规则。
)
2.对NextDate函数进行分析。
3.选用基于规格说明的测试技术中适合的方法为NextDate函数问题设计测试用例。
实验
分析
一.实验步骤
1.打开c与c++程序设计学习与实验系统平台,编译有关NextDate函数问题的相关程序。
2.对程序进行等价类测试。
3.对程序进行边界值分析。
4.对程序进行决策表测试。
5.进行用例设计。
选择上述设计中的一种方法进行测试用例,包括等价类、边界值、等价类边界值结合法、因果图和决策表法。
给出预定输入和输出,以及实际输出结果。
6.总结归纳。
二.程序分析
1.程序代码
#include
usingnamespacestd;
voidNextDate(intyear,intmonth,intday);
voidmain()
{
intyear=0,month=0,day=0;
NextDate(year,month,day);}
voidNextDate(intyear,intmonth,intday)
{
cout<<"请输入年份:
"<cin>>year;
while(!
(year>=1912&&year<=2050))
{
cout<<"年份超过界限,请重新输入"<cin>>year;
}
cout<<"请输入月份:
"<cin>>month;
while(month>12||month<1)
{
cout<<"月份输入有误,请重新输入"<cin>>month;
}
cout<<"请输入日期:
"<cin>>day;
while(day>31||day<1)
{cout<<"日期输入有误,请重新输入"<cin>>day;}
while(month==4&&day==31||month==6&&day==31||month==9&&day==31||month==11&&day==31)
{cout<<"小月没有31号"<cin>>day;
}if((year%4==0&&year%100!
=0)||(year%400==0))//检查闰年;
{inti=0;
i=day-29;
while(month==2&&i>0)
{cout<<"本月是闰月,请在1-29之间从新输入日期"<cin>>day;
}
if(month==2&&day==29)
{month=3;
day=1;
}
elseday++;
}
elseday++;
switch(month)
{
case1:
case3:
case5:
case7:
case8:
case10:
if(day==32)
{month++;
day=1;
cout<<"明天是:
"<}
break;
case2:
if(day==29)
{month=3;
day=1;
cout<<"明天是:
"<}
break;
case4:
case6:
case9:
case11:
if(day==31)
{month++;
day=1;
cout<<"明天是:
"<break;
case12:
if(day==32)
{year++;
month=1;
day=1;
cout<<"明天是:
"<}
break;
}
cout<<"明天是:
"<}
2.分析
NextDate函数是输入日期,年,月份,函数根据输入的数据,输出输入日期后一天的日期。
具体为如果输入日期不是当月最后一天,则把day变量的值加1;如果输入日期是1~11月份中某月的最后一天,则把day变量的值复位为1,month变量的值加1;如果输入日期是12月的最后一天,则day变量和month变量的值都复位为1,year变量的值加1。
关于day的变量值:
如果是1,3,5,7,8,10,12月份,day变量值为31;如果是4,6,9,11月份,day变量值为30;如果是闰年的2月,day变量值为29;如果是非闰年的2月,day变量值为28。
三.等价类测试分析
1.划分简单等价类
(1)有效等价类:
M1={month:
1≤month≤12}
D1={day:
1≤day≤31}
Y1={year:
1912≤month≤2050}
(2)无效等价类
M2={month:
month<1}
M3={month:
month>12}
D2={day:
day<1}
D3={day:
day>31}
Y2={year:
year<1912}
Y3={year:
month>2050}
(3)测试用例
根据等价类得到等价类测试用例,如表1
表1普通等价类测试用例
测试
用例
输入
期望
输出
month
day
year
1
5
5
2000
2000年5月6日
2
0
5
2000
month不在1~12中
3
13
5
2000
month不在1~12中
4
5
0
2000
day不在1~31中
5
5
32
2000
day不在1~31中
6
5
5
1911
year不在1912~2050中
7
5
5
2051
year不在1912~2050中
2.划分改进等价类
在简单等价类划分测试NextDate函数中,没有考虑2月份的天数问题,也没有考虑闰年的问题,月份只包含了30天和31天两种情况。
在改进等价类划分测试NextDate函数中,要考虑2月份天数的问题及闰年问题。
(1)有效等价类
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不是闰年}
(2)无效等价类
M5={month:
month<1}
M6={month:
month>12}
D6={day:
day<1}
D7={day:
day>31}
Y3={year:
year<1912}
Y4={year:
month>2050}
(3)测试用例
根据等价类得到等价类测试用例,如表2。
表2改进等价类测试用例
测试
用例
输入
期望
输出
month
day
year
1
4
30
2009
2009年4月31日
2
7
31
2009
2009年8月1日
3
2
27
2009
2009年2月28日
4
2
28
2009
2009年3月1日
5
2
29
2000
2000年3月1日
6
12
31
2009
2010年1月1日
7
9
31
2009
不可能的输入日期
8
2
29
2009
不可能的输入日期
9
2
30
2009
不可能的输入日期
10
15
8
2009
month不在1~12中
11
6
37
2007
day不在1~31中
12
6
6
2100
year不在1912~2050中
四.边界值测试分析
1.变量month、day、year的取值范围:
M1={month:
1≤month≤12}
D1={day:
1≤day≤31}
Y1={year:
1912≤year≤2050}
2.测试用例
利用输入变量的最小值、略大于最小值、正常值、略小于最大值和最大值来设计测试用例。
如表3。
表3边界值测试用例
测试
用例
输入
期望
输出
month
day
year
1
-1
3
2000
month不在1~12中
2
0
3
2000
month不在1~12中
3
1
15
2000
2000年2月16日
4
2
15
2000
2000年2月16日
5
11
15
2000
2000年11月16日
6
12
15
2000
2000年12月16日
7
13
15
2000
month不在1~12中
8
6
-1
2000
day不在1~31中
9
6
0
2000
day不在1~31中
10
6
1
2000
2000年6月2日
11
6
2
2000
2000年6月3日
12
6
30
2000
2000年7月1日
13
6
31
2000
不可能的输入日期
14
6
32
2000
day不在1~31中
15
6
15
1911
year不在1912~2050中
16
6
15
1912
1912年6月16日
17
6
15
1913
1913年6月16日
18
6
15
2049
2049年6月16日
19
6
15
2050
2050年6月16日
20
6
15
2051
year不在1912~2050中
五.决策表测试分析
决策表中的条件就是规格说明书中的输入条件,动作就是输出结果,而规则就是贯穿条件项和动作项的一列,一条规则要对应设计一个测试用例。
1.动作桩
a1:
不可能;
a2:
day加1;
a3:
day复位;
a4:
month加1;
a5:
month复位;
a6:
year加1
2.条件桩
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不是闰年}
3.画出决策表,如表4。
表4决策表
规则
选项
1
2
3
4
5
6
7
8
9
10
11
条件:
C1:
month在
M1
M1
M1
M1
M1
M2
M2
M2
M2
M2
M3
C2:
day在
D1
D2
D3
D4
D5
D1
D2
D3
D4
D5
D1
C3:
year在
-
-
-
-
-
-
-
-
-
-
-
动作:
A1:
不可能
√
A2:
day加1
√
√
√
√
√
√
√
√
A3:
day复位
√
√
A4:
month加1
√
√
A5:
month复位
A6:
year加1
规则
选项
12
13
14
15
16
17
18
19
20
21
22
条件:
C1:
month在
M3
M3
M3
M3
M4
M4
M4
M4
M4
M4
M4
C2:
day在
D2
D3
D4
D5
D1
D2
D2
D3
D3
D4
D5
C3:
year在
-
-
-
-
-
Y1
Y2
Y1
Y2
-
-
动作:
A1:
不可能
√
√
√
A2:
day加1
√
√
√
√
√
A3:
day复位
√
√
√
A4:
month加1
√
√
A5:
month复位
√
A6:
year加1
√
决策表共有22条规则:
第1~5条规则解决有30天的月份;
第6~10条规则解决有31天的月份(除12月份以外);
第11~15条规则解决12月份;
第16~22条规则解决2月份和闰年的问题。
不可能规则也在决策表中列出,比如第5条规则中在有30天的月份中也考虑了31日。
通过以上的决策表得出简化的决策表,如表5。
表5简化决策表
规则
选项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
条件:
C1:
month在
M1
M1
M1
M2
M2
M3
M3
M4
M4
M4
M4
M4
M4
C2:
day在
D1
D2
D3
D4
D5
D1
D2
D3
D4
D5
D1
D2
D3
D4
D5
D1
D2
D2
D3
D3
D4
D5
C3:
year在
-
-
-
-
-
-
-
-
Y1
Y2
Y1
Y2
-
动作:
A1:
不可能
√
√
√
A2:
day加1
√
√
√
√
√
A3:
day复位
√
√
√
√
√
A4:
month加1
√
√
√
√
A5:
month复位
√
A6:
year加1
√
4.根据简化的决策表,设计如表所示的测试用例。
如表6。
表6决策表测试用例
测试用例
month
day
year
预期输出
1~3
6
15
2007
2007年6月16日
4
6
30
2007
2007年7月1日
5
6
31
2007
不可能的输入日期
6~9
1
15
2007
2007年1月16日
10
1
31
2007
2007年2月1日
11~14
12
15
2007
2007年12月16日
15
12
31
2007
2008年1月1日
16
2
15
2007
2007年2月16日
17
2
28
2000
2000年2月29日
18
2
28
2007
2007年3月1日
19
2
29
2000
2000年3月1日
20
2
29
2007
不可能的输入日期
22~22
2
30
2007
不可能的输入日期
六.测试用例截图
使用普通等价类划分法进行用例测试,参见表1。
1.测试用例1,如图1。
图1测试用例1
2.测试用例2,如图2。
图2测试用例2
3.测试用例3,如图3。
图3测试用例3
4.测试用例4,如图4。
图4测试用例4
5.测试用例5,如图5。
图5测试用例5
6.测试用例6,如图6。
图6测试用例6
7.测试用例7,如图7。
图7测试用例7
心得
体会
本次实验的目的是主要是了解软件动态测试。
包括对等价类测试,边界值测试和决策表测试。
在做实验之前,我已经了解了这三种测试的基础要点和重点。
做实验的时候相对轻松了很多。
等价类测试要掌握三个步骤,先要形成等价类表,每一等价类规定一个唯一的编号。
然后设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这一步骤,直到所有有效等价类均被测试用例所覆盖。
最后设计一个新测试用例,使其只覆盖一个无效等价类,重复这一步骤直到所有无效等价类均被覆盖。
最主要的是等价类表,只有将等价类表总结出来,才能进行下面的工作,才能把测试用例做的全面,不遗漏。
边界值测试要掌握两个要点,一是每次保留程序中一个变量,让其余的变量取正常值,被保留的变量依次取输入变量的最小值、正常值、略小于最大值和最大值作为有效边界值;依次取略小于最小值和略大于最大值作为无效边界值。
第二是对程序中的每个变量重复第一步。
只要找出正确的取值范围,做出相应的测试用例,就能很好的完成测试。
在这一方面完成的较好。
决策表测试主要是找到条件桩和动作桩,决策表中的条件就是规格说明书中的输入条件,动作就是输出结果,而规则就是贯穿条件项和动作项的一列,一条规则要对应设计一个测试用例。
根据这些画出决策表。
决策表虽然复杂,但测试的比较全面。
而且还要学会简化决策表。
这样可以使问题简化,使程序更加容易理解。
通过这次实验,使我对这门学科有了更深入的了解。
对动态测试更加熟悉。
可以更快的完成边界值测试,等价类测试和决策表测试。
这次的实验内容很多。
但基本都是课上讲过的内容。
虽然麻烦点,但理解起来很容易。
做完这个实验,我对边界值测试,决策表测试和等价类测试有了更深一步的了解。
在以后的学习中,我会更加仔细认真。
在做实验的时候发现不懂的地方。
要及时解决,才能实验发挥到最大的作用。
要学会总结归纳,简化内容,例如决策表的简化。
使实验更加简洁顺利。
相信在以后的实验中,我能更快更高效的完成实验。