软件测试——决策表法

       实现PreDate,前一日函数PreDate是NextDate的逆函数,即给定一个月份、日期、年,会返回前一天的日期。年的取值范围在1812到2017年。日的取值在1日到31日月的取值在1到12月之间。

一、代码如下:

package experiment2;

import java.util.Scanner;

public class PreDate {
       
	   public static void main(String args[]){
		   
		     
		      System.out.println("请输入日期:");
		      Scanner sc = new Scanner(System.in); 
		      int year = sc.nextInt();
		      int month = sc.nextInt();
		      int day = sc.nextInt();
		      
		      if(year<1812||year>2017||month<1||month>31||day<1||day>31){
		    	  System.out.println("不可能");
		      }
		      else{
		    	  if(day==1)
			      {
			    	  if(month==1)
			    	  {
			    		  year=year-1;
			    		  month=12;
			    		  day=31;
			    	  }
			    	  else if(month==2||month==4||month==6||month==8||month==9||month==11){
			    		  month=month-1;
				    	  day=31;
			    	  }
			    	  else if(month==5||month==7||month==10||month==12){ 
			    		  month=month-1;
				    	  day=30;
			    	  }
			    	  else{
			    		  if(year%4==0&&year%100!=0||year%400==0){
				    		  month=month-1;
					    	  day=29;
				    	  }
				    	  else{
				    		  month=month-1;
				    		  day=28;
				    	  }
			    	  }
			    	  System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
			      }
			      else{
			    	  if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day<=31) {
			    		  day=day-1;
			    		  System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
			    	  }
			    	  else if((month==4||month==6||month==9||month==11)&&day<=30) {
			    		  day=day-1;
			    		  System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
			    	  }
			    	  else if(month==2) {
			    		  if((year%4==0&&year%100!=0||year%400==0)&&day<=29) {
			    			  day=day-1;
			    			  System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
			    		  }
			    		  else if(day<=28) {
			    			  day=day-1;
			    			  System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
			    		  }
			    		  else {
			    			  System.out.println("不可能");
			    		  }
			    	  }
			    	  else {
			    		  System.out.println("不可能");
			    	  }
			      }
		      }
	   }
}

二、决策表分析过程如下

     1. 定义条件桩、动作桩

    1.1输入

—year

—month

—day

   1.2为获得前一个日期,PreDate函数需执行的操作只有如下5种

—day变量值减1

—day变量值为31

—day变量值为30

—day变量值为28

—day变量值为29

—month变量值减1

—month变量值为12

—year变量值减1

     1.3考虑规则个数

     M1:{month:month为4或6或8或9或11月};

     M2:{month:month为5或7或10或12月 };

     M3:{month:month是1月};

    M4: {month: month是2月};

   M5:{month: month是3月};

   D1:{day: day=1};

   D2:{day:1

   D3:{day:day=29};

   D4:{day:day=30};

   D5:{day:day=31};

   Y1:{year:year是闰年};

   Y2:{year:year不是闰年};

   2.输入条件项动作项

规则

选项

1

2

3

4

5

6

7

8

9

10

11

条件

C1:year在

C2:month在

M1

M1

M1

M1

M1

M2

M2

M2

M2

M2

M3

C3:day在

D1

D2

D3

D4

D5

D1

D2

D3

D4

D5

D1

动作

A1:不可能

 

 

 

 

 

 

 

 

 

 

A2:day减1

 

 

 

 

A3:day变量值为31

 

 

 

 

 

 

 

 

 

A4:day变量值为30

 

 

 

 

 

 

 

 

 

 

A5:day变量值为29

 

 

 

 

 

 

 

 

 

 

 

A6:day变量值为28

 

 

 

 

 

 

 

 

 

 

 

A7:month变量值减1

 

 

 

 

 

 

 

 

 

A8:month变量值为12

 

 

 

 

 

 

 

 

 

 

A9:year变量值减1

 

 

 

 

 

 

 

 

 

 

规则

选项

12

13

14

15

16

17

18

19

20

21

22

条件

C1:year在

Y1

Y2

Y1

C2:month在

M3

M3

M3

M3

M4

M4

M4

M4

M4

M4

M5

C3:day在

D2

D3

D4

D5

D1

D2

D3

D3

D4

D5

D1

动作

A1:不可能

 

 

 

 

 

 

 

 

A2:day减1

 

 

 

 

 

A3:day变量值为31

 

 

 

 

 

 

 

 

 

 

A4:day变量值为30

 

 

 

 

 

 

 

 

 

 

 

A5:day变量值为29

 

 

 

 

 

 

 

 

 

 

A6:day变量值为28

 

 

 

 

 

 

 

 

 

 

 

A7:month变量值减1

 

 

 

 

 

 

 

 

 

 

A8:month变量值为12

 

 

 

 

 

 

 

 

 

 

 

A9:year变量值减1

 

 

 

 

 

 

 

 

 

 

 

规则

选项

23

24

25

26

27

条件

C1:year在

Y2

C2:month在

M5

M5

M5

M5

M5

C3:day在

D1

D2

D3

D4

D5

动作

A1:不可能

 

 

 

 

 

A2:day减1

 

A3:day变量值为31

 

 

 

 

 

A4:day变量值为30

 

 

 

 

 

A5:day变量值为29

 

 

 

 

 

A6:day变量值为28

 

 

 

 

A7:month变量值减1

 

 

 

 

 

A8:month变量值为12

 

 

 

 

 

A9:year变量值减1

 

 

 

 

 

  3. 化简决策表如下

规则

选项

1

2~4

5

6

7~10

11

12~15

16

17

18

19

20~21

22

23

24~27

条件

C1:year在

Y1

Y2

Y1

Y2

C2:month在

M1

M1

M1

M2

M2

M3

M3

M4

M4

M4

M4

M4

M5

M5

M5

C3:day在

D1

D2~D4

D5

D1

D2~D5

D1

D2~D5

D1

D2

D3

D3

D4~D5

D1

D1

D2~D5

动作

A1:不可能

 

 

 

 

 

 

 

 

 

 

 

 

A2:day减1

 

 

 

 

 

 

 

 

 

A3:day变量值为31

 

 

 

 

 

 

 

 

 

 

 

 

A4:day变量值为30

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A5:day变量值为29

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A6:day变量值为28

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A7:month变量值减1

 

 

 

 

 

 

 

 

 

 

 

 

A8:month变量值为12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A9:year变量值减1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  4. 根据化简的决策表设计如下测试用例

测试用例

Year

Month

Day

预期输出

实际输出

Test1

2016

8

1

2016年7月31日

2016年7月31日

Test2~4

2015

11

29

2015年11月28日

2015年11月28日

Test5

2014

6

31

不可能

不可能

Test6

2013

5

1

2013年4月30日

2013年4月30日

Test7~10

2012

7

28

2012年7月27日

2012年7月27日

Test11

2011

1

1

2010年12月31日

2010年12月31日

Test12~15

2010

1

27

2010年1月26日

2010年1月26日

Test16

2009

2

1

2009年1月31日

2019年1月31日

Test17

2008

2

25

2008年2月24日

2008年2月24日

Test18

2008

2

29

2008年2月28日

2008年2月28日

Test19

2007

2

29

不可能

不可能

Test20~21

2006

2

30

不可能

不可能

Test22

2004

3

1

2004年2月29日

2004年2月29日

Test23

2003

3

1

2003年2月28日

2003年2月28日

Test24~27

2002

3

22

2002年3月21日

2002年3月21日

 

 

你可能感兴趣的:(软件测试——决策表法)