软件测试决策表
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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不是闰年}
变量day加1操作;
变量day复位操作;
变量month加1操作;
变量month复位操作;
变量year加1操作。
根据上述动作桩发现NextDate函数的求解关键是日和月的问题,通常可以在下面等价类(条件桩)的基础上建立决策表:
M1={month:month有30天}
M2={month:month有31天,12月除外}
√
√
√
√
A3: day复位
√
√
√
A4: month加1
√
√
A5: month复位
√
A6:year加1
√
表2简化的NextDate函数决策表:
选项
规则
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
√
A6:year加1
√
6、实验结果与分析
表3 NextDate函数的测试用例组
测试用例
Month
Day
Year
预期输出
实际输出
Test case 1-3
5
15
2015
2015年5月16日
Test case 4
5
30
2015
2015年5月31日
Test case 5
5
31
2015
2015年6月1日
Test case 6-9
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复位
2016
2016年2月29日
Test case 18
2
28
2015
2015年3月1日
Test case 19
2
29
2016
2016年3月1日
Test case 20
2
29
2015
不可能!
Testcase 21-22
2
30
2015
不可能!
7、实验体会与建议
程序的实际输出结果与预期结果不符合,但基本满足实验问题需求,基于决策表的测试对于某些应用程序(例如NextDate函数)很有效,但是对另外一些简单的应用程序就不值得使用决策表了。
√
√
A5: month复位
规则
选项
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
√
(1)1≤month≤12
(2)1≤day≤31
(3)1912≤year≤2050
2、实验目的与要求
分别输入测试用例,判断期望输出与实际输出是否相等
3、实验环境
操作系统WIN10
测试工具VS2010
测试语言c++语言
4、设计思路分析(包括需求分析、整体设计思路、概要设计)
需求分析:
此函数的主要特点是输入变量之间的逻辑关系比较复杂。复杂性的来源有两个:一个是输入域的复杂性,另一个是指闰年的规则。例如变量year和变量month取不同的值,对应的变量day会有不同的取值范围,day值的范围可能是1~30或1~31,也可能是1~28或1~29。
软件测试
实验报告
题目:决策表法的使用
学号:
姓名:
教师:
东南大学成贤学院电子与计算机工程学院
2017年9月30日
方案30%
设计30%
文字表述20%
分析与总结20%
总分
实验题目
1、实验内容
NextDate函数包含三个变量:month(月份)、day(日期)和year(年),函数的输出为输入日期前一天的日期。例如,输入为2007年9月9日,则函数的输出为2007年9月10日。要求输入变量month、day和year均为整数值,并且满足下列条件:
规则
选项
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
cin>>year>>month>>day;
NextDate(year,month,day);
if(NextDate(year,month,day)==false)
{cout<<"不可能!"<<endl;}
}
system("pause");
return 0;
}
附录代码
#include "stdafx.h"
bool NextDate(int i,int j,int k)
{
if(i>=1960&&i<=2050&&j>=1&&j<=12&&k>=1&&k<=31)
{
if(k>=1&&k<=27)
{k++;}
else
{
switch(k)
{
case 31:
{
if(j==1||j==3||j==5||j==7||j==8||j==10)
4
15
2015
2015年4月16日
Test case 10
4
31
2015
2015年5月1日
Test case11-14
12
15
2015
2015年12月16日
Test case 15
12
31
2015
2016年1月1日
Test case 16
2
15
2015
2015年2月16日
Test case 17
2
28
}
case 29:
{
if(j==2&&((i%4==0&&i%100!=0)||i%400==0))
{
k=1;
j++;
}
else if(j!=2)
{k++;}
else
{return false;}
break;
}
case 28:
{
if(j==2&&((i%4==0&&i%100!=0)||i%400==0))
决策表共有22条规则:
第1~5条规则解决有30天的月份;
第6~10条规则解决有31天的月份(除12月份以外);
第11~15条规则解决12月份;
第16~22条规则解决2月份和闰年的问题。
不可能规则也在决策表中列出,比如第5条规则中在有30天的月份中也考虑了31日。
表1输入变量间存在大量逻辑关系的NextDate函数决策表
{
k=1;
j++;
}
else if(j==12)
{
k=1;
j=1;
i++;
}
else
{return false;}
break;
}
case 30:
{
if(j==4||j==6||j==9||j==11)
{
k=1;
j++;
}
else if(j==2)
{return false;}
else
{k++;}
break;
整体设计思路:
NextDate函数中包含了定义域各个变量之间的依赖问题。等价类划分法和边界值分析法只能“独立地”选取各个输入值,不能体现出多个变量的依赖关系。决策表法则是根据变量间的逻辑依赖关系设计测试输入数据,排除不可能的数据组合,很好地解决了定义域的依赖问题。
5、详细设计
NextDate函数求解给定某个日期的下一个日期的可能操作(动作桩)如下:
{
k++;
}
else if(j!=2)
{k++;}
else
{
k=1;
j++;
}
break;
}
}
}
}
else
{
return false;
}
cout<<i<<"/"<<j<<"/"<<k<<endl;
}
int main()
{
int day,month,year;
while(1)
{
cout<<"请输入年、月、日:"<<endl;
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不是闰年}
变量day加1操作;
变量day复位操作;
变量month加1操作;
变量month复位操作;
变量year加1操作。
根据上述动作桩发现NextDate函数的求解关键是日和月的问题,通常可以在下面等价类(条件桩)的基础上建立决策表:
M1={month:month有30天}
M2={month:month有31天,12月除外}
√
√
√
√
A3: day复位
√
√
√
A4: month加1
√
√
A5: month复位
√
A6:year加1
√
表2简化的NextDate函数决策表:
选项
规则
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
√
A6:year加1
√
6、实验结果与分析
表3 NextDate函数的测试用例组
测试用例
Month
Day
Year
预期输出
实际输出
Test case 1-3
5
15
2015
2015年5月16日
Test case 4
5
30
2015
2015年5月31日
Test case 5
5
31
2015
2015年6月1日
Test case 6-9
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复位
2016
2016年2月29日
Test case 18
2
28
2015
2015年3月1日
Test case 19
2
29
2016
2016年3月1日
Test case 20
2
29
2015
不可能!
Testcase 21-22
2
30
2015
不可能!
7、实验体会与建议
程序的实际输出结果与预期结果不符合,但基本满足实验问题需求,基于决策表的测试对于某些应用程序(例如NextDate函数)很有效,但是对另外一些简单的应用程序就不值得使用决策表了。
√
√
A5: month复位
规则
选项
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
√
(1)1≤month≤12
(2)1≤day≤31
(3)1912≤year≤2050
2、实验目的与要求
分别输入测试用例,判断期望输出与实际输出是否相等
3、实验环境
操作系统WIN10
测试工具VS2010
测试语言c++语言
4、设计思路分析(包括需求分析、整体设计思路、概要设计)
需求分析:
此函数的主要特点是输入变量之间的逻辑关系比较复杂。复杂性的来源有两个:一个是输入域的复杂性,另一个是指闰年的规则。例如变量year和变量month取不同的值,对应的变量day会有不同的取值范围,day值的范围可能是1~30或1~31,也可能是1~28或1~29。
软件测试
实验报告
题目:决策表法的使用
学号:
姓名:
教师:
东南大学成贤学院电子与计算机工程学院
2017年9月30日
方案30%
设计30%
文字表述20%
分析与总结20%
总分
实验题目
1、实验内容
NextDate函数包含三个变量:month(月份)、day(日期)和year(年),函数的输出为输入日期前一天的日期。例如,输入为2007年9月9日,则函数的输出为2007年9月10日。要求输入变量month、day和year均为整数值,并且满足下列条件:
规则
选项
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
cin>>year>>month>>day;
NextDate(year,month,day);
if(NextDate(year,month,day)==false)
{cout<<"不可能!"<<endl;}
}
system("pause");
return 0;
}
附录代码
#include "stdafx.h"
bool NextDate(int i,int j,int k)
{
if(i>=1960&&i<=2050&&j>=1&&j<=12&&k>=1&&k<=31)
{
if(k>=1&&k<=27)
{k++;}
else
{
switch(k)
{
case 31:
{
if(j==1||j==3||j==5||j==7||j==8||j==10)
4
15
2015
2015年4月16日
Test case 10
4
31
2015
2015年5月1日
Test case11-14
12
15
2015
2015年12月16日
Test case 15
12
31
2015
2016年1月1日
Test case 16
2
15
2015
2015年2月16日
Test case 17
2
28
}
case 29:
{
if(j==2&&((i%4==0&&i%100!=0)||i%400==0))
{
k=1;
j++;
}
else if(j!=2)
{k++;}
else
{return false;}
break;
}
case 28:
{
if(j==2&&((i%4==0&&i%100!=0)||i%400==0))
决策表共有22条规则:
第1~5条规则解决有30天的月份;
第6~10条规则解决有31天的月份(除12月份以外);
第11~15条规则解决12月份;
第16~22条规则解决2月份和闰年的问题。
不可能规则也在决策表中列出,比如第5条规则中在有30天的月份中也考虑了31日。
表1输入变量间存在大量逻辑关系的NextDate函数决策表
{
k=1;
j++;
}
else if(j==12)
{
k=1;
j=1;
i++;
}
else
{return false;}
break;
}
case 30:
{
if(j==4||j==6||j==9||j==11)
{
k=1;
j++;
}
else if(j==2)
{return false;}
else
{k++;}
break;
整体设计思路:
NextDate函数中包含了定义域各个变量之间的依赖问题。等价类划分法和边界值分析法只能“独立地”选取各个输入值,不能体现出多个变量的依赖关系。决策表法则是根据变量间的逻辑依赖关系设计测试输入数据,排除不可能的数据组合,很好地解决了定义域的依赖问题。
5、详细设计
NextDate函数求解给定某个日期的下一个日期的可能操作(动作桩)如下:
{
k++;
}
else if(j!=2)
{k++;}
else
{
k=1;
j++;
}
break;
}
}
}
}
else
{
return false;
}
cout<<i<<"/"<<j<<"/"<<k<<endl;
}
int main()
{
int day,month,year;
while(1)
{
cout<<"请输入年、月、日:"<<endl;