軟件測試作業--等價類劃分

------------恢復內容開始------------

等價類劃分法定義:將用戶所有可能輸入的數據,劃分爲若干中情況,把每一種情況找一些具有
代表性的數據作爲測試用例,而這種選擇測試類的方法,就叫做等價類劃分,它是屬於黑盒測試的;

****用等價類劃分法解決下列問題****

NextDate 函數包含三個變量:month 、 day 和 year ,函數的輸出爲輸入日期後一天的日期。 例如,輸入爲 2020年3月7日,則函數的輸出爲 2020年3月8日 。要求輸入變量 month 、 day 和 year 均爲整數值,並且滿足下列條件:  

 ①1≤month≤12 

 ②1≤day≤31 

 ③1920≤year≤2050 

**作答格式:等價類表+測試用例表

*********科普*********

三五七八十臘 三十一天永不差,四六九冬三十整,惟有二月二十八,閏年還要把一日加

--閏年的判斷--(中國的年有平年、閏年之分,基本是4年一閏,其餘都是平年,第一次接觸‘閏’這個概念是學習魯迅先生的短片小說“少年閏土”,但是他叫閏土,是因爲他是閏月出生,五行缺土,閏月是個很複雜的概念;啊~,現在有點兒明白魯迅先生的小說爲何受歡迎了,童年真的不能回憶呀)

普通閏年:能被4整除

世紀閏年:能被400整除

閏年2月29天,平年2月28天

***********************

題目分析:輸入變量:year\month\day

問題關鍵:當year和month取不同值時,對應day的取值範圍也不同:1~28、1~29、1~30、1~31

要考慮2月份的天數問題,閏年問題;月份還包含30天和31天的問題;12月最後一天的第二天是下一年的第一天

 

 1 public static ArrayList NextDate(int nowYear, int nowMonth, int nowDay)
 2     {
 3         ArrayList arr = new ArrayList();
 4         if (nowYear <= 3000 && nowYear >= 1000 && nowMonth <= 12 && nowMonth >= 1 && nowDay >= 1 && nowDay <= getDays(nowYear, nowMonth))
 5         {
 6             int nextYear;
 7             int nextMonth;
 8             int nextDay;
 9             if (nowDay == getDays(nowYear, nowMonth))
10             {
11                 if (nowMonth == 12)
12                 {
13                     nextYear = nowYear + 1;
14                     nextMonth = 1;
15                     nextDay = 1;
16                 }
17                 else
18                 {
19                     nextYear = nowYear;
20                     nextMonth = nowMonth + 1;
21                     nextDay = 1;
22                 }
23             }
24             else
25             {
26                 nextYear = nowYear;
27                 nextMonth = nowMonth;
28                 nextDay = nowDay + 1;
29             }
30             arr.Add(nextYear);
31             arr.Add(nextMonth);
32             arr.Add(nextDay);
33         }
34         else
35         {
36             arr.Add("錯誤年份");
37             arr.Add("錯誤月份");
38             arr.Add("錯誤天數");
39         }
40         return arr;
41     }
42     protected static bool isRun(int year)
43     {
44         if (year % 4 == 0 && year % 400 != 0)
45         {
46             return true;
47         }
48         return false;
49     }
50     protected static int getDays(int year, int month)
51     {
52         int days = 0;
53         switch (month)
54         {
55             case 1:
56             case 3:
57             case 5:
58             case 7:
59             case 8:
60             case 10:
61             case 12: days = 31; break;
62             case 2: days = isRun(year) ? 29 : 28; break;
63             case 4:
64             case 6:
65             case 9:
66             case 11: days = 30; break;
67         }
68         return days;
69     }
NextDate小程序

 

 

************* NextDate 函數的等價類*************

輸入條件

有效等價類

唯一標識

無效等價類

唯一標識

year

1920-2050間的閏年

1

year<1920

12

1920-2050間的平年

2

year>2050

13

month

month=4,6,9,11

3

month<1

14

month=1,3,5,7,8,10

4

month>12

15

month=12

5

 

 

month=2

6

 

 

day

1<=day<=27

7

day<1

16

day=28

8

day>31

17

day=29

9

 

 

day=30

10

 

 

day=31

11

 

 

******************等價類測試用例*****************

覆蓋測試用例編號

輸入

期望輸出

month

day

year

3-10-2

6

30

2007

2007/7/1

4-11-2

8

31

2007

2007/9/1

6-7-2

2

27

2007

2007/2/28

6-8-2

2

28

2007

2007/3/1

6-9-1

2

29

2004

2004/3/1

5-11-2

12

31

2007

2008/1/1

3-11-2

9

31

2007

不可能的輸入日期

            6-9-2

2

29

2007

不可能的輸入日期

6-10-2

2

30

2007

不可能的輸入日期

15-7-2

15

9

2007

變量month無效

3-17-2

9

35

2007

變量day無效

3-7-13

9

9

2060

變量year無效

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章