标签:opened src int 组合 ram table ted 没有 height
掌握基于覆盖理论与基本路径的基本白盒测试方法和实践
运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。
根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的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 |
F |
T |
B-C |
3 |
F |
F |
F |
F |
B-c |
编号 |
m==1 |
m==3 |
m==5 |
m==7 |
m==8 |
m==10 |
覆盖路径 |
4 |
T |
F |
F |
F |
F |
F |
C-D |
5 |
F |
T |
F |
F |
F |
F |
C-D |
6 |
F |
F |
T |
F |
F |
F |
C-D |
7 |
F |
F |
F |
T |
F |
F |
C-D |
8 |
F |
F |
F |
F |
T |
F |
C-D |
9 |
F |
F |
F |
F |
F |
T |
C-D |
10 |
F |
F |
F |
F |
F |
F |
C-G |
编号 |
d==31 |
覆盖路径 |
11 |
T |
D-E |
12 |
F |
D-F |
编号 |
m==2 |
覆盖路径 |
13 |
T |
G-H |
14 |
F |
G-K |
编号 |
d==29 |
覆盖路径 |
15 |
T |
H-I |
16 |
F |
D-F |
编号 |
m==12 |
覆盖路径 |
17 |
T |
K-L |
18 |
F |
K-O |
编号 |
d==31 |
覆盖路径 |
19 |
T |
L-M |
20 |
F |
L-N |
编号 |
d==31 |
覆盖路径 |
21 |
T |
D-E |
22 |
F |
D-F |
编号 |
m==1 |
m==3 |
m==5 |
m==7 |
m==8 |
m==10 |
覆盖路径 |
23 |
T |
F |
F |
F |
F |
F |
c-d |
24 |
F |
T |
F |
F |
F |
F |
c-d |
25 |
F |
F |
T |
F |
F |
F |
c-d |
26 |
F |
F |
F |
T |
F |
F |
c-d |
27 |
F |
F |
F |
F |
T |
F |
c-d |
28 |
F |
F |
F |
F |
F |
T |
c-d |
29 |
F |
F |
F |
F |
F |
F |
c-g |
编号 |
d==31 |
覆盖路径 |
30 |
T |
d-e |
31 |
F |
d-f |
编号 |
m==2 |
覆盖路径 |
32 |
T |
g-h |
33 |
F |
g-k |
编号 |
d==29 |
覆盖路径 |
34 |
T |
h-i |
35 |
F |
d-f |
编号 |
m==12 |
覆盖路径 |
36 |
T |
k-l |
37 |
F |
k-o |
编号 |
d==31 |
覆盖路径 |
38 |
T |
l-m |
39 |
F |
l-n |
编号 |
d==31 |
覆盖路径 |
40 |
T |
d-e |
41 |
F |
d-f |
测试用例:
用例ID |
输入值 |
执行路径 |
覆盖条件 |
预期输出 |
||
A |
B |
X |
X |
|||
1 |
2000 |
1 |
31 |
A-B-C-D-E-Z |
1,4,11 |
2000年2月1日 |
2 |
2004 |
3 |
3 |
A-B-C-D-F-Z |
2,5,12 |
2004年3月4日 |
3 |
2008 |
5 |
31 |
A-B-C-D-E-Z |
2,6,11 |
2008年6月1日 |
4 |
2000 |
7 |
4 |
A-B-C-D-F-Z |
1,7,12 |
2000年7月5日 |
5 |
2004 |
8 |
31 |
A-B-C-D-E-Z |
2,8,11 |
2004年9月1日 |
6 |
2008 |
10 |
5 |
A-B-C-D-F-Z |
2,9,12 |
2008年10月6日 |
7 |
2000 |
2 |
29 |
A-B-C-G-H-I-Z |
1,10,13,15 |
2000年2月1日 |
8 |
2000 |
2 |
20 |
A-B-C-G-H-J-Z |
1,10,13,16 |
2000年2月21日 |
9 |
2004 |
12 |
31 |
A-B-C-G-K-L-M-Z |
2,10,14,17,19 |
2005年1月1日 |
10 |
2008 |
12 |
5 |
A-B-C-G-K-L-N-Z |
2,10,14,17,20 |
2008年12月6日 |
11 |
2000 |
4 |
30 |
A-B-C-G-K-O-P-Z |
1,10,14,18,21 |
2000年5月1日 |
12 |
2004 |
6 |
7 |
A-B-C-G-K-O-Q-Z |
2,10,14,18,22 |
2004年6月8日 |
13 |
2001 |
1 |
31 |
A-B-c-d-e-Z |
3,23,30 |
2001年2月1日 |
14 |
2002 |
3 |
3 |
A-B-c-d-f-Z |
3,24,31 |
2002年3月4日 |
15 |
2003 |
5 |
31 |
A-B-c-d-e-Z |
3,25,30 |
2003年6月1日 |
16 |
2005 |
7 |
5 |
A-B-c-d-f-Z |
3,26,31 |
2005年7月6日 |
17 |
2006 |
8 |
31 |
A-B-c-d-e-Z |
3,27,30 |
2006年9月1日 |
18 |
2007 |
10 |
5 |
A-B-c-d-f-Z |
3,28,31 |
2007年10月6日 |
19 |
2009 |
2 |
28 |
A-B-c-g-h-i-Z |
3,29,32,34 |
2009年3月1日 |
20 |
2013 |
2 |
20 |
A-B-c-g-h-j-Z |
3,29,32,35 |
2013年2月21日 |
21 |
2015 |
12 |
31 |
A-B-c-g-k-l-m-Z |
3,29,33,36,38 |
2016年1月1日 |
22 |
2017 |
12 |
5 |
A-B-c-g-k-l-n-Z |
3,29,33,36,39 |
2017年12月6日 |
23 |
2014 |
4 |
30 |
A-B-c-g-k-o-p-Z |
3,29,33,37,41 |
2014年5月1日 |
24 |
2018 |
6 |
7 |
A-B-c-g-k-o-q-Z |
3,29,33,37,41 |
2018年6月8日 |
3)相应Junit测试脚本、执行结果
1 import static org.junit.Assert.*; 2 3 import org.junit.After; 4 import org.junit.Before; 5 import org.junit.Test; 6 7 public class NextDayTest { 8 @Before 9 public void setUp() throws Exception { 10 11 } 12 13 @Test 14 public void testNextdate1() { 15 assertEquals("2000年2月1日", NextDay.nextdate(2000, 1, 31)); 16 } 17 @Test 18 public void testNextdate2() { 19 assertEquals("2000年3月30日", NextDay.nextdate(2000, 3, 29)); 20 } 21 @Test 22 public void testNextdate3() { 23 assertEquals("2004年3月1日", NextDay.nextdate(2004, 2, 29)); 24 } 25 @Test 26 public void testNextdate4() { 27 assertEquals("2004年2月19日", NextDay.nextdate(2004, 2, 18)); 28 } 29 @Test 30 public void testNextdate5() { 31 assertEquals("2009年1月1日", NextDay.nextdate(2008, 12, 31)); 32 } 33 @Test 34 public void testNextdate6() { 35 assertEquals("2008年12月20日", NextDay.nextdate(2008, 12, 19)); 36 } 37 @Test 38 public void testNextdate7() { 39 assertEquals("2012年5月1日", NextDay.nextdate(2012, 4, 30)); 40 } 41 @Test 42 public void testNextdate8() { 43 assertEquals("2012年4月19日", NextDay.nextdate(2012, 4, 18)); 44 } 45 @Test 46 public void testNextdate9() { 47 assertEquals("2001年2月1日", NextDay.nextdate(2001, 1, 31)); 48 } 49 @Test 50 public void testNextdate10() { 51 assertEquals("2001年3月21日", NextDay.nextdate(2001, 3, 20)); 52 } 53 @Test 54 public void testNextdate11() { 55 assertEquals("2002年3月1日", NextDay.nextdate(2002, 2, 28)); 56 } 57 @Test 58 public void testNextdate12() { 59 assertEquals("2002年2月19日", NextDay.nextdate(2002, 2, 18)); 60 } 61 @Test 62 public void testNextdate13() { 63 assertEquals("2004年1月1日", NextDay.nextdate(2003, 12, 31)); 64 } 65 @Test 66 public void testNextdate14() { 67 assertEquals("2003年12月2日", NextDay.nextdate(2003, 12, 1)); 68 } 69 @Test 70 public void testNextdate15() { 71 assertEquals("2005年5月1日", NextDay.nextdate(2005, 4, 30)); 72 } 73 @Test 74 public void testNextdate16() { 75 assertEquals("2005年4月29日", NextDay.nextdate(2005, 4, 28)); 76 } 77 78 @After 79 public void testMain() throws Exception{ 80 //fail("Not yet implemented"); 81 } 82 83 }
这里使用了单个执行测试用例,执行的是语句覆盖、判定覆盖与路径覆盖的测试用例,执行结果为全部通过。
4)给出测试参数化和打包测试的脚本,并生成执行结果
1 import static org.junit.Assert.*; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 import java.util.Collection; 6 7 8 import org.junit.Test; 9 import org.junit.runner.RunWith; 10 import org.junit.runners.Parameterized; 11 import org.junit.runners.Parameterized.Parameters; 12 13 @RunWith(Parameterized.class) 14 public class NextDay2Test { 15 NextDay nextDay = new NextDay(); 16 int param1; 17 int param2; 18 int param3; 19 String result; 20 21 @Parameters 22 public static Collection data(){ 23 return Arrays.asList(new Object[][]{ 24 {2000,1,31,"2000年2月1日"}, 25 {2004,3,3,"2004年3月4日"}, 26 {2008,5,31,"2008年6月1日"}, 27 {2000,7,4,"2000年7月5日"}, 28 {2004,8,31,"2004年9月1日"}, 29 {2008,10,5,"2008年10月6日"}, 30 {2000,2,29,"2000年3月1日"}, 31 {2000,2,20,"2000年2月21日"}, 32 {2004,12,31,"2005年1月1日"}, 33 {2008,12,5,"2008年12月6日"}, 34 {2000,4,30,"2000年5月1日"}, 35 {2004,6,7,"2004年6月8日"}, 36 {2001,1,31,"2001年2月1日"}, 37 {2002,3,3,"2002年3月4日"}, 38 {2003,5,31,"2003年6月1日"}, 39 {2005,7,5,"2005年7月6日"}, 40 {2006,8,31,"2006年9月1日"}, 41 {2007,10,5,"2007年10月6日"}, 42 {2009,2,20,"2009年2月21日"}, 43 {2013,2,20,"2013年2月21日"}, 44 {2015,12,31,"2016年1月1日"}, 45 {2017,12,5,"2017年12月6日"}, 46 {2014,4,30,"2014年5月1日"}, 47 {2018,6,7,"2018年6月8日"}, 48 }); 49 } 50 51 public NextDay2Test(int param1,int param2,int param3,String result){ 52 this.param1 = param1; 53 this.param2 = param2; 54 this.param3 = param3; 55 this.result = result; 56 57 } 58 59 @Test 60 public void testNextDay(){ 61 String rs = NextDay.nextdate(param1, param2, param3); 62 assertEquals(rs,result); 63 64 } 65 }
这里使用了测试参数化执行测试用例,测试了条件判定的用例,执行结果为全部通过。
1 import org.junit.runner.RunWith; 2 import org.junit.runners.Suite; 3 @RunWith(Suite.class) 4 @Suite.SuiteClasses( 5 { 6 NextDayTest.class, 7 NextDay2Test.class, 8 }) 9 10 11 public class AllTest { 12 13 }
这里使用了打包测试脚本对所有用例进行测试,测试结果为全部通过:
四、测试小结:
在本次测试中,最深刻的体会是代码的规范很重要,在测试的时候遇到了一些问题,源程序中对输入的年、月、日的格式判定在main函数中,但是对日期的输出判断在NextDate方法中,在做NextDate方法的测试时,也就不能对输入日期的格式进行判断,这样会导致设计的测试用例不完整,出现漏测的情况,源程序中,大量的条件判断使得测试的复杂度很高,建议使用java中的函数calndar获取时间的操作,也就能避免大量的判断,这样测试人员在设计测试用例的时候会方便很多,也能降低代码的冗余度。
本次实验基于上一次Junit单元测试的基础上进行,但对每一条用例使用一种方法进行测试,这样能很快地找出测试用例地错误,以及错在哪里,第二点是对测试参数化和打包测试的脚本,这两种方法能够高效地进行测试,同时对测试参数化也避免了大量地测试代码地冗余,打包测试地脚本能够同时执行多个不同类的测试用例,测试更加高效。
通过画程序图与其对应的DD路径图,能够很清楚地写出所有覆盖语句,对编写测试用例有一个很清楚的导向作用,比起一开始的盲目,进步了很多。通过本次的实验,对白盒测试的收获很多。
本次实验中没有发现源程序NextDate方法中的错误,测试用例均能通过。
标签:opened src int 组合 ram table ted 没有 height
原文地址:http://www.cnblogs.com/lingzhiliu/p/6706959.html