软件测试 决策表

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件测试

实验报告

题目: 决策表法的使用

学号:

姓名:

教师:

东南大学成贤学院电子与计算机工程学院2017年9 月30 日

实验题目

1、实验内容

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

2、实验目的与要求

分别输入测试用例,判断期望输出与实际输出是否相等

3、实验环境

操作系统WIN10

测试工具VS2010

测试语言c++语言

4、设计思路分析(包括需求分析、整体设计思路、概要设计)

需求分析:

此函数的主要特点是输入变量之间的逻辑关系比较复杂。复杂性的来源有两个:一个是输入域的复杂性,另一个是指闰年的规则。例如变量year和变量month取不同的值,对应的变量day会有不同的取值范围,day值的范围可能是1~30或1~31,也可能是1~28或1~29。

整体设计思路:

NextDate函数中包含了定义域各个变量之间的依赖问题。等价类划分法和边界值分析法只能“独立地”选取各个输入值,不能体现出多个变量的依赖关系。决策表法则是根据变量间的逻辑依赖关系设计测试输入数据,排除不可能的数据组合,很好地解决了定义域的依赖问题。

5、详细设计

NextDate函数求解给定某个日期的下一个日期的可能操作(动作桩)如下:

变量day加1操作;

变量day复位操作;

变量month加1操作;

变量month复位操作;

变量year加1操作。

根据上述动作桩发现NextDate函数的求解关键是日和月的问题,通常可以在下面等价类(条件桩)的基础上建立决策表:

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不是闰年}

决策表共有22条规则:

第1~5条规则解决有30天的月份;

第6~10条规则解决有31天的月份(除12月份以外);

第11~15条规则解决12月份;

第16~22条规则解决2月份和闰年的问题。

不可能规则也在决策表中列出,比如第5条规则中在有30天的月份中也考虑了31日。

表1 输入变量间存在大量逻辑关系的NextDate函数决策表

表2 简化的NextDate函数决策表:

6、实验结果与分析

表3 NextDate函数的测试用例组

测试用例Month Day Year预期输出实际输出Test case 1-351520152015年5月16

Test case 453020152015年5月31

Test case 553120152015年6月1

Test case 6-941520152015年4月16

Test case 1043120152015年5月1

Test case11-14121520152015年12月16

Test case 15123120152016年1月1

Test case 1621520152015年2月16

Test case 1722820162016年2月29

Test case 1822820152015年3月1

Test case 1922920162016年3月1

Test case 202292015不可能!

Testcase 21-222302015不可能!

7、实验体会与建议

程序的实际输出结果与预期结果不符合,但基本满足实验问题需求,基于决策表的测试对于某些应用程序(例如NextDate函数)很有效,但是对另外一些简单的应用程序就不值得使用决策表了。

附录代码

#include ""

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)

{

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;

}

case 29:

{

if(j==2&&((i%4==0&&i%100!=0)||i%400==0))

{

k=1;

j++;

}

else if(j!=2)

{k++;}

相关文档
最新文档