标签:import 没有 test table before img 类型 print cas
掌握基于覆盖理论与基本路径的基本白盒测试方法和实践
运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。
根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。
所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。
包括的内容有:
1) 被测原代码
import java.util.Scanner; public class Date { public static void main(String[] args){ System.out.print("请输入日期"); Scanner input = new Scanner(System.in); int year = input.nextInt(); int month = input.nextInt(); int day = input.nextInt(); GetDate(year,month,day); input.close(); } public static void GetDate(int year, int month, int day){ if (!(year >= 1912 && year <= 2050)){ //判断年份 System.out.println("年份超出范围!"); return; } if (month > 12 || month < 1){//判断月份 System.out.println("月份超出范围!"); return; } if (day > 31 || day < 1){//判断日期 System.out.println("日期超出范围!"); return; } if (month == 4 && day == 31 ){ System.out.println("日期超出范围!"); return; } if (month == 6 && day == 31){//判断日期 System.out.println("日期超出范围!"); return; } if (month == 9 && day == 31){//判断日期 System.out.println("日期超出范围!"); return; } if (month == 11 && day == 31){//判断日期 System.out.println("日期超出范围!"); return; } switch (month){//计算第二天日期 case 1: case 3: case 5: case 7: case 8: case 10: if (day == 31){ month++; day = 1; } else day++; break; case 2: if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){//计算闰年的日期 if (day > 29){ System.out.println("日期超出范围!"); return; } if (day == 29){ month = 3; day = 1; } else day++; } else{ if (day > 28){ System.out.println("日期超出范围!"); return; } if (day == 28){ month = 3; day = 1; } else day++; } break; case 4: case 6: case 9: case 11: if (day == 30){ month++; day = 1; } else day++; break; case 12: if (day == 31){ year++; month = 1; day = 1; } else day++; break; } System.out.println(year+"年"+month+"月"+day+"日"); } }
程序图 DD路径图
2)依据覆盖技术,测试用例列表:
(1)语句覆盖:ABb,ABCc,ABCDd,ABCDEe,ABCDEFf,ABCDEFGg,ABCDEFGHh,ABCDEFGHIJKa,ABCDEFGHIJLa,ABCDEFGHINOo,ABCDEFGHINOPQa,
ABCDEFGHINOPRa,ABCDEFGHIWXa,ABCDEFGHIWYa,ABCDEFGHIZZ1a,ABCDEFGHIZZ2a,ABCDEFGHINSs,ABCDEFGHINSTUa,ABCDEFGHINSTVa
测试用例:
用例ID | 输入 | 执行路径 | 预期输出 | ||
year | month | day | |||
1 | 1890 | 1 | 1 | ABb | 年份超出范围 |
2 | 2001 | 0 | 3 | ABCc | 月份超出范围 |
3 | 1987 | 3 | 0 | ABCDd | 日期超出范围 |
4 | 1988 | 4 | 31 | ABCDEe | 日期超出范围 |
5 | 1998 | 6 | 31 | ABCDEFf | 日期超出范围 |
6 | 1997 | 9 | 31 | ABCDEFGg | 日期超出范围 |
7 | 2014 | 11 | 31 | ABCDEFGHh | 日期超出范围 |
8 | 1967 | 3 | 31 | ABCDEFGHIJKa | 1967年4月1日 |
9 | 1987 | 5 | 2 | ABCDEFGHIJLa | 1987年5月3日 |
10 | 2000 | 2 | 30 | ABCDEFGHINOo | 日期超出范围 |
11 | 1996 | 2 | 29 | ABCDEFGHINOPQa | 1996年3月1日 |
12 | 2004 | 2 | 1 | ABCDEFGHINOPRa | 2004年2 月2日 |
13 | 2005 | 4 | 30 | ABCDEFGHIWXa | 2005年5月1日 |
14 | 2006 | 6 | 3 | ABCDEFGHIWYa | 2006年6月4日 |
15 | 2007 | 12 | 31 | ABCDEFGHIZZ1a | 2008年1月1日 |
16 | 2008 | 12 | 5 | ABCDEFGHIZZ2a | 2008年12月6日 |
17 | 2001 | 2 | 29 | ABCDEFGHINSs | 日期超出范围 |
18 | 2002 | 2 | 28 | ABCDEFGHINSTUa | 2002年3月1日 |
19 | 2003 | 2 | 4 | ABCDEFGHINSTVa | 2003年2月5日 |
(2)分支覆盖:ABb,ABCc,ABCDd,ABCDEe,ABCDEFf,ABCDEFGg,ABCDEFGHh,ABCDEFGHIJKa,ABCDEFGHIJLa,ABCDEFGHINOo,ABCDEFGHINOPQa,
ABCDEFGHINOPRa,ABCDEFGHIWXa,ABCDEFGHIWYa,ABCDEFGHIZZ1a,ABCDEFGHIZZ2a,ABCDEFGHINSs,ABCDEFGHINSTUa,ABCDEFGHINSTVa
测试用例:
用例ID | 输入 | 执行路径 | 预期输出 | ||
year | month | day | |||
1 | 1890 | 1 | 1 | ABb | 年份超出范围 |
2 | 2001 | 0 | 3 | ABCc | 月份超出范围 |
3 | 1987 | 3 | 0 | ABCDd | 日期超出范围 |
4 | 1988 | 4 | 31 | ABCDEe | 日期超出范围 |
5 | 1998 | 6 | 31 | ABCDEFf | 日期超出范围 |
6 | 1997 | 9 | 31 | ABCDEFGg | 日期超出范围 |
7 | 2014 | 11 | 31 | ABCDEFGHh | 日期超出范围 |
8 | 1967 | 3 | 31 | ABCDEFGHIJKa | 1967年4月1日 |
9 | 1987 | 5 | 2 | ABCDEFGHIJLa | 1987年5月3日 |
10 | 2000 | 2 | 30 | ABCDEFGHINOo | 日期超出范围 |
11 | 1996 | 2 | 29 | ABCDEFGHINOPQa | 1996年3月1日 |
12 | 2004 | 2 | 1 | ABCDEFGHINOPRa | 2004年2 月2日 |
13 | 2005 | 4 | 30 | ABCDEFGHIWXa | 2005年5月1日 |
14 | 2006 | 6 | 3 | ABCDEFGHIWYa | 2006年6月4日 |
15 | 2007 | 12 | 31 | ABCDEFGHIZZ1a | 2008年1月1日 |
16 | 2008 | 12 | 5 | ABCDEFGHIZZ2a | 2008年12月6日 |
17 | 2001 | 2 | 29 | ABCDEFGHINSs | 日期超出范围 |
18 | 2002 | 2 | 28 | ABCDEFGHINSTUa | 2002年3月1日 |
19 | 2003 | 2 | 4 | ABCDEFGHINSTVa | 2003年2月5日 |
(3)路径覆盖:ABb,ABCc,ABCDd,ABCDEe,ABCDEFf,ABCDEFGg,ABCDEFGHh,ABCDEFGHIJKa,ABCDEFGHIJLa,ABCDEFGHINOo,ABCDEFGHINOPQa,
ABCDEFGHINOPRa,ABCDEFGHIWXa,ABCDEFGHIWYa,ABCDEFGHIZZ1a,ABCDEFGHIZZ2a,ABCDEFGHINSs,ABCDEFGHINSTUa,ABCDEFGHINSTVa
测试用例:
用例ID | 输入 | 执行路径 | 预期输出 | ||
year | month | day | |||
1 | 1890 | 1 | 1 | ABb | 年份超出范围 |
2 | 2001 | 0 | 3 | ABCc | 月份超出范围 |
3 | 1987 | 3 | 0 | ABCDd | 日期超出范围 |
4 | 1988 | 4 | 31 | ABCDEe | 日期超出范围 |
5 | 1998 | 6 | 31 | ABCDEFf | 日期超出范围 |
6 | 1997 | 9 | 31 | ABCDEFGg | 日期超出范围 |
7 | 2014 | 11 | 31 | ABCDEFGHh | 日期超出范围 |
8 | 1967 | 3 | 31 | ABCDEFGHIJKa | 1967年4月1日 |
9 | 1987 | 5 | 2 | ABCDEFGHIJLa | 1987年5月3日 |
10 | 2000 | 2 | 30 | ABCDEFGHINOo | 日期超出范围 |
11 | 1996 | 2 | 29 | ABCDEFGHINOPQa | 1996年3月1日 |
12 | 2004 | 2 | 1 | ABCDEFGHINOPRa | 2004年2 月2日 |
13 | 2005 | 4 | 30 | ABCDEFGHIWXa | 2005年5月1日 |
14 | 2006 | 6 | 3 | ABCDEFGHIWYa | 2006年6月4日 |
15 | 2007 | 12 | 31 | ABCDEFGHIZZ1a | 2008年1月1日 |
16 | 2008 | 12 | 5 | ABCDEFGHIZZ2a | 2008年12月6日 |
17 | 2001 | 2 | 29 | ABCDEFGHINSs | 日期超出范围 |
18 | 2002 | 2 | 28 | ABCDEFGHINSTUa | 2002年3月1日 |
19 | 2003 | 2 | 4 | ABCDEFGHINSTVa | 2003年2月5日 |
(4)条件覆盖:各个条件取真或假的可能至少执行一次
编号 | year<1912 or year>2050 | 覆盖路径 |
1 | F | B-C |
2 | T | B-b |
编号 | month<1 or month>12 | 覆盖路径 |
3 | F | C-D |
4 | T | C-c |
编号 | day<1 or day>31 | 覆盖路径 |
5 | F | D-E |
6 | T | D-d |
编号 | month==4 | day==31 | month==4 and day==31 | 覆盖路径 |
7 | F | F | F | E-F |
8 | F | T | F | E-F |
9 | T | F | F | E-F |
10 | T | T | T | E-e |
编号 |
month==6 | day==31 | month==6 and day==31 | 覆盖路径 |
11 | F | F | F | F-G |
12 | F | T | F | F-G |
13 | T | F | F | F-G |
14 | T | T | T | F-f |
编号 | month==9 | day==31 | month==9 and day==31 | 覆盖路径 |
15 | F | F | F | G-H |
16 | F | T | F | G-H |
17 | T | F | F | G-H |
18 | T | T | T | G-g |
编号 | month==11 | day==31 | month==11 and day==31 | 覆盖路径 |
19 | F | F | F | H-I |
20 | F | T | F | H-I |
21 | T | F | F | H-I |
22 | T | T | T | H-h |
编号 | day==31 | 覆盖路径 |
23 | F | J-K |
24 | T | J-L |
编号 | (year%4==0 and year%100!=0) or year%400==0 | 覆盖路径 |
25 | F | N-S |
26 | T | N-O |
编号 | day>29 | 覆盖路径 |
27 | F | O-P |
28 | T | O-o |
编号 | day==29 | 覆盖路径 |
29 | F | P-R |
30 | T | P-Q |
编号 | day>28 | 覆盖路径 |
31 | F | S-T |
32 | T | S-s |
编号 | day==28 | 覆盖路径 |
33 | F | T-V |
34 | T | T-U |
编号 | day==30 | 覆盖路径 |
35 | F | W-Y |
36 | T | W-X |
编号 | day==31 | 覆盖路径 |
37 | F | Z-Z2 |
38 | T | Z-Z1 |
测试用例:
用例ID | 输入 | 执行路径 | 覆盖条件 | 预期输出 | ||
year | month | day | ||||
1 | 1890 | 1 | 1 | ABb | 2 | 年份超出范围 |
2 | 2001 | 0 | 3 | ABCc | 1,4 | 月份超出范围 |
3 | 1987 | 3 | 0 | ABCDd | 1,3,6 | 日期超出范围 |
4 | 1988 | 4 | 31 | ABCDEe | 1,3,5,10 | 日期超出范围 |
5 | 1998 | 6 | 31 | ABCDEFf | 1,3,5,8,14 | 日期超出范围 |
6 | 1997 | 9 | 31 | ABCDEFGg | 1,3,5,8,12,18 | 日期超出范围 |
7 | 2014 | 11 | 31 | ABCDEFGHh | 1,3,5,8,12,16,22 | 日期超出范围 |
8 | 1967 | 3 | 31 | ABCDEFGHIJKa | 1,3,5,8,12,16,20,24 | 1967年4月1日 |
9 | 1987 | 5 | 2 | ABCDEFGHIJLa | 1,3,5,7,11,15,19,23 | 1987年5月3日 |
10 | 2000 | 2 | 30 | ABCDEFGHINOo | 1,3,5,7,11,15,19,26,28 | 日期超出范围 |
11 | 1996 | 2 | 29 | ABCDEFGHINOPQa | 1,3,5,7,11,15,19,26,27,30 | 1996年3月1日 |
12 | 2004 | 2 | 1 | ABCDEFGHINOPRa | 1,3,5,7,11,15,19,26,27,29 | 2004年2 月2日 |
13 | 2005 | 4 | 30 | ABCDEFGHIWXa | 1,3,5,9,11,15,19,36 | 2005年5月1日 |
14 | 2006 | 6 | 3 | ABCDEFGHIWYa | 1,3,5,7,13,15,19,35 | 2006年6月4日 |
15 | 2007 | 12 | 31 | ABCDEFGHIZZ1a | 1,3,5,8,12,16,20,38 | 2008年1月1日 |
16 | 2008 | 12 | 5 | ABCDEFGHIZZ2a | 1,3,5,7,11,15,19,37 | 2008年12月6日 |
17 | 2001 | 2 | 29 | ABCDEFGHINSs | 1,3,5,7,11,15,19,25,32 | 日期超出范围 |
18 | 2002 | 2 | 28 | ABCDEFGHINSTUa | 1,3,5,7,11,15,19,25,31,34 | 2002年3月1日 |
19 | 2003 | 2 | 4 | ABCDEFGHINSTVa | 1,3,5,7,11,15,19,25,31,33 | 2003年2月5日 |
3)相应Junit测试脚本、执行结果
import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; public class DateTest { @Before public void setUp() throws Exception { } @Test public void testGetDate1() { assertEquals("年份超出范围",Date.GetDate(1890, 1, 1)); } @Test public void testGetDate2() { assertEquals("月份超出范围",Date.GetDate(2001, 0, 3)); } @Test public void testGetDate3() { assertEquals("日期超出范围",Date.GetDate(1987, 3, 0)); } @Test public void testGetDate4() { assertEquals("日期超出范围",Date.GetDate(1988, 4, 31)); } @Test public void testGetDate5() { assertEquals("日期超出范围",Date.GetDate(1998, 6, 31)); } @Test public void testGetDate6() { assertEquals("日期超出范围",Date.GetDate(1997, 9, 31)); } @Test public void testGetDate7() { assertEquals("日期超出范围",Date.GetDate(2014, 11, 31)); } @Test public void testGetDate8() { assertEquals("1967年4月1日",Date.GetDate(1967, 3, 31)); } @Test public void testGetDate9() { assertEquals("1987年5月3日",Date.GetDate(1987, 5, 2)); } @Test public void testGetDate10() { assertEquals("日期超出范围",Date.GetDate(2000, 2, 30)); } @Test public void testGetDate11() { assertEquals("1996年3月1日",Date.GetDate(1996, 2, 29)); } @Test public void testGetDate12() { assertEquals("2004年2月2日",Date.GetDate(2004, 2, 1)); } @Test public void testGetDate13() { assertEquals("2005年5月1日",Date.GetDate(2005, 4, 30)); } @Test public void testGetDate14() { assertEquals("2006年6月4日",Date.GetDate(2006, 6, 3)); } @Test public void testGetDate15() { assertEquals("2008年1月1日",Date.GetDate(2007, 12, 31)); } @Test public void testGetDate16() { assertEquals("2008年12月6日",Date.GetDate(2008, 12, 5)); } @Test public void testGetDate17() { assertEquals("日期超出范围",Date.GetDate(2001, 2, 29)); } @Test public void testGetDate18() { assertEquals("2002年3月1日",Date.GetDate(2002, 2, 28)); } @Test public void testGetDate19() { assertEquals("2003年2月5日",Date.GetDate(2003, 2, 4)); } }
标签:import 没有 test table before img 类型 print cas
原文地址:http://www.cnblogs.com/ff44/p/6707027.html