实验二_078_刘玲志

Posted 刘玲志

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验二_078_刘玲志相关的知识,希望对你有一定的参考价值。

 

一、实验目的

掌握基于覆盖理论与基本路径的基本白盒测试方法和实践

二、实验要求

运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。

三、实验内容

根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。

所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。

包括的内容有:

1) 被测原代码

  1 import java.util.Scanner;
  2 public class NextDay {
  3     static String nextdate(int year, int month, int day) {
  4         // 闰年
  5         if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
  6             if (month == 1 || month == 3 || month == 5 || month == 7
  7                     || month == 8 || month == 10) {
  8                 
  9                 if (day == 31) {
 10                     day = 1;
 11                     month++;
 12                 } else
 13                     day++;
 14 
 15             } else if (month == 2) {
 16                 if (day == 29) {
 17                     day = 1;
 18                     month++;
 19                 } else
 20                     day++;
 21 
 22             } else if (month == 12) {
 23                 if (day == 31) {
 24                     day = 1;
 25                     month = 1;
 26                     year++;
 27                 } else
 28                     day++;
 29             } else if (month == 4 || month == 6 || month == 9 || month == 11) {
 30                 if (day == 30) {
 31                     day = 1;
 32                     month++;
 33                 } else
 34                     day++;
 35             }
 36         } else// 平年
 37         {
 38             if (month == 1 || month == 3 || month == 5 || month == 7
 39                     || month == 8 || month == 10) {
 40 
 41                 if (day == 31) {
 42                     day = 1;
 43                     month++;
 44                 } else
 45                     day++;
 46 
 47             } else if (month == 2) {
 48                 if (day == 28) {
 49                     day = 1;
 50                     month++;
 51                 } else
 52                     day++;
 53 
 54             } else if (month == 12) {
 55                 if (day == 31) {
 56                     day = 1;
 57                     month = 1;
 58                     year++;
 59                 } else
 60                     day++;
 61             } else if (month == 4 || month == 6 || month == 9 || month == 11) {
 62                 if (day == 30) {
 63                     day = 1;
 64                     month++;
 65                 } else
 66                     day++;
 67             }
 68         }
 69         String Year = year + "";
 70         String Month = month + "";
 71         String Day = day + "";
 72 
 73         return Year + "年" + Month + "月" + Day + "日";
 74 
 75     }
 76 
 77     public static void main(String[] args) {
 78 
 79         String tmp = "0";
 80         int month = 0, year = 0, day = 0;
 81         String date = " ";
 82         while (true) {
 83             Scanner sc = new Scanner(System.in);
 84 
 85             System.out.println("请输入日期(以1个空格区分年月日)");
 86             try {
 87                 String str = sc.nextLine();
 88                 String[] st = str.split(" ");
 89                 year = Integer.parseInt(st[0]);
 90                 month = Integer.parseInt(st[1]);
 91                 day = Integer.parseInt(st[2]);
 92             } catch (Exception e) {
 93                 System.out.print("输入有误重新输入");
 94                 continue;
 95             }
 96 
 97             if (year < 1912 || year > 2050) {
 98                 System.out.println("年份超过范围");
 99                 continue;
100             } else if (month > 12 || month < 1) {
101                 System.out.println("月份超过范围");
102                 continue;
103             }
104             // 日期有效判断
105             else if (month == 1 || month == 3 || month == 5 || month == 7
106                     || month == 8 || month == 10) {
107                 if (day > 31 || day < 1) {
108                     System.out.println("日期超过范围");
109                     continue;
110                 }
111 
112             } else if (month == 4 || month == 6 || month == 9 || month == 11) {
113                 if (day > 30 || day < 1) {
114                     System.out.println("日期超过范围");
115                     continue;
116                 }
117             } else if (month == 2) {
118                 if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
119                     if (day < 1 || day > 29) {
120                         System.out.println("日期超过范围");
121                         continue;
122                     }
123                 } else {
124                     if (day < 1 || day > 28) {
125                         System.out.println("日期超过范围");
126                         continue;
127                     }
128                 }
129             }
130             date = nextdate(year, month, day);
131             System.out.println("下一天是 ");
132             System.out.print(date);
133             System.out.println("\\n是否停止 1 Or -1 -1为停止");
134             tmp = sc.nextLine();
135 
136         }
137 
138     }
139 
140 }
View Code

2)依据覆盖技术,测试用例列表: 

                                                

                                                 程序图                                                                                                     DD路径图 

 

 

DD-路径(只压缩链路经)

程序图节点

DD-路径

5

A

7

B

8,9

C

11

D

12,13

E

14,15

F

17

G

18

H

19,20

I

21,22

J

24

K

25

L

26,27,28

M

29,30

N

31,32

O

33,34

P

35,36

Q

38

c

40,41

d

43,44

e

46,47

f

49

g

50

h

51,52

i

53,54

j

56

k

57

l

58,59,60

m

61,62

n

63,64

o

65,66

p

67,68

q

75

Z

(I)语句覆盖(画出路径图后发现语句覆盖、判定覆盖与路径覆盖的测试路径是一样,为了避免重复,这里选取的判定覆盖、路径覆盖的用例是相同的):

A-B-C-D-E-Z

A-B-C-D-F-Z

A-B-C-G-H-I-Z

A-B-C-G-H-J-Z

A-B-C-G-K-L-M-Z

A-B-C-G-K-L-N-Z

A-B-C-G-K-O-P-Z

A-B-C-G-K-O-Q-Z

A-B-c-d-e-Z

A-B-c-d-f-Z

A-B-c-g-h-i-Z

A-B-c-g-h-j-Z

A-B-c-g-k-l-m-Z

A-B-c-g-k-l-n-Z

A-B-c-g-k-o-p-Z

A-B-c-g-k-o-p-Z

 

测试用例:

用例ID

输入值

执行路径

预期输出

year

month

day

X

1

2000

1

31

A-B-C-D-E-Z

2000年2月1日

2

2000

3

29

A-B-C-D-F-Z

2000年3月30日

3

2004

2

29

A-B-C-G-H-I-Z

2004年3月1日

4

2004

2

18

A-B-C-G-H-J-Z

2004年2月19日

5

2008

12

31

A-B-C-G-K-L-M-Z

2009年1月1日

6

2008

12

19

A-B-C-G-K-L-N-Z

2008年12月20日

7

2012

4

30

A-B-C-G-K-O-P-Z

2012年5月1日

8

2012

4

18

A-B-C-G-K-O-Q-Z

2012年4月19日

9

2001

1

31

A-B-c-d-e-Z

2001年2月1日

10

2001

3

20

A-B-c-d-f-Z

2001年3月1日

11

2002

2

28

A-B-c-g-h-i-Z

2002年3月1日

12

2002

2

18

A-B-c-g-h-j-Z

2002年2月18日

13

2003

12

31

A-B-c-g-k-l-m-Z

2004年1月1日

14

2003

12

1

A-B-c-g-k-l-n-Z

2003年12月2日

15

2005

4

30

A-B-c-g-k-o-p-Z

2005年5月1日

16

2005

4

28

A-B-c-g-k-o-p-Z

2005年4月29日

 

(II)分支覆盖(判断覆盖):

A-B-C-D-E-Z

A-B-C-D-F-Z

A-B-C-G-H-I-Z

A-B-C-G-H-J-Z

A-B-C-G-K-L-M-Z

A-B-C-G-K-L-N-Z

A-B-C-G-K-O-P-Z

A-B-C-G-K-O-Q-Z

A-B-c-d-e-Z

A-B-c-d-f-Z

A-B-c-g-h-i-Z

A-B-c-g-h-j-Z

A-B-c-g-k-l-m-Z

A-B-c-g-k-l-n-Z

A-B-c-g-k-o-p-Z

A-B-c-g-k-o-p-Z

 

测试用例:

用例ID

输入值

执行路径

预期输出

year

month

day

X

1

2000

1

31

A-B-C-D-E-Z

2000年2月1日

2

2000

3

29

A-B-C-D-F-Z

2000年3月30日

3

2004

2

29

A-B-C-G-H-I-Z

2004年3月1日

4

2004

2

18

A-B-C-G-H-J-Z

2004年2月19日

5

2008

12

31

A-B-C-G-K-L-M-Z

2009年1月1日

6

2008

12

19

A-B-C-G-K-L-N-Z

2008年12月20日

7

2012

4

30

A-B-C-G-K-O-P-Z

2012年5月1日

8

2012

4

18

A-B-C-G-K-O-Q-Z

2012年4月19日

9

2001

1

31

A-B-c-d-e-Z

2001年2月1日

10

2001

3

20

A-B-c-d-f-Z

2001年3月1日

11

2002

2

28

A-B-c-g-h-i-Z

2002年3月1日

12

2002

2

18

A-B-c-g-h-j-Z

2002年2月18日

13

2003

12

31

A-B-c-g-k-l-m-Z

2004年1月1日

14

2003

12

1

A-B-c-g-k-l-n-Z

2003年12月2日

15

2005

4

30

A-B-c-g-k-o-p-Z

2005年5月1日

16

2005

4

28

A-B-c-g-k-o-p-Z

2005年4月29日

 

(III)路径覆盖:

A-B-C-D-E-Z

A-B-C-D-F-Z

A-B-C-G-H-I-Z

A-B-C-G-H-J-Z

A-B-C-G-K-L-M-Z

A-B-C-G-K-L-N-Z

A-B-C-G-K-O-P-Z

A-B-C-G-K-O-Q-Z

A-B-c-d-e-Z

A-B-c-d-f-Z

A-B-c-g-h-i-Z

A-B-c-g-h-j-Z

A-B-c-g-k-l-m-Z

A-B-c-g-k-l-n-Z

A-B-c-g-k-o-p-Z

A-B-c-g-k-o-p-Z

 

测试用例:

用例ID

输入值

执行路径

预期输出

year

month

day

X

1

2000

1

31

A-B-C-D-E-Z

2000年2月1日

2

2000

3

29

A-B-C-D-F-Z

2000年3月30日

3

2004

2

29

A-B-C-G-H-I-Z

2004年3月1日

4

2004

2

18

A-B-C-G-H-J-Z

2004年2月19日

5

2008

12

31

A-B-C-G-K-L-M-Z

2009年1月1日

6

2008

12

19

A-B-C-G-K-L-N-Z

2008年12月20日

7

2012

4

30

A-B-C-G-K-O-P-Z

2012年5月1日

8

2012

4

18

A-B-C-G-K-O-Q-Z

2012年4月19日

9

2001

1

31

A-B-c-d-e-Z

2001年2月1日

10

2001

3

20

A-B-c-d-f-Z

2001年3月1日

11

2002

2

28

A-B-c-g-h-i-Z

2002年3月1日

12

2002

2

18

A-B-c-g-h-j-Z

2002年2月18日

13

2003

12

31

A-B-c-g-k-l-m-Z

2004年1月1日

14

2003

12

1

A-B-c-g-k-l-n-Z

2003年12月2日

15

2005

4

30

A-B-c-g-k-o-p-Z

2005年5月1日

16

2005

4

28

A-B-c-g-k-o-p-Z

2005年4月29日

 

(IV)条件覆盖:各个条件取真或假的可能至少执行一次

A-B-C-D-E-Z                  A-B-c-d-e-Z

A-B-C-D-F-Z                  A-B-c-d-f-Z

A-B-C-D-E-Z                  A-B-c-d-e-Z

A-B-C-D-F-Z                  A-B-c-d-f-Z

A-B-C-D-E-Z                  A-B-c-d-e-Z

A-B-C-D-F-Z                  A-B-c-d-f-Z

A-B-C-G-H-I-Z                A-B-c-g-h-i-Z

A-B-C-G-H-J-Z                A-B-c-g-h-j-Z

A-B-C-G-K-L-M-Z             A-B-c-g-k-l-m-Z

A-B-C-G-K-L-N-Z             A-B-c-g-k-l-n-Z

A-B-C-G-K-O-P-Z              A-B-c-g-k-o-p-Z

A-B-C-G-K-O-Q-Z              A-B-c-g-k-o-q-Z

编号

y%4==0

y%100!==0

y%400==0

y%4==0&&   y%100!==0

||y%400==0

覆盖路径

1

T

T

T

T

B-C

2

T

T

以上是关于实验二_078_刘玲志的主要内容,如果未能解决你的问题,请参考以下文章

第4次作业类测试代码_078_刘玲志

软件测试_实验二

AtCoder arc078_d Mole and Abandoned Mine

接单日记SMTP发送邮件

实验三_142_王娇

网络对抗技术_实验二_网络嗅探与欺骗

(c)2006-2024 SYSTEM All Rights Reserved IT常识