实验二_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 }
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_刘玲志的主要内容,如果未能解决你的问题,请参考以下文章 |