一、实验目的
掌握基于覆盖理论与基本路径的基本白盒测试方法和实践
二、实验要求
运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。
三、实验内容
根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。
所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。
1) 被测原代码 http://www.cnblogs.com/LixiaZhang/
下面仅对被测代码的核心函数经行测试:
public String NextDay(){ //判断大月且不是12月31号 if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 ||( month == 12 && day<31)) { if (day < 31) day++; else if (day == 31) { month++; day =1; } } //判断12月31号 else if (month == 12 && day == 31) { year++; month = 1; day = 1; } //判断除了2月的小月 else if (month == 4 || month == 6 || month == 9 || month == 11) { if (day < 30) day++; else if (day == 30) { month++; day = 1; } else{ return "日期错误!"; } } //2月需判断是否闰年 else if (month == 2) { if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){ if (day < 29) day++; else if (day == 29) { month++; day = 1; } else { return "日期错误!"; } } else{ if (day < 28) day++; else if (day == 28) { month++; day = 1; } else{ return "日期错误!"; } } } return "第二天:"+year+"年"+month+"月"+day+"日"; }
DD-路径图
2)依据覆盖技术,测试用例列表:
语句覆盖
A-B-D-X
A-B-E-X
A-C-F-X
A-C-G-H-J-X
用例号 | 输入值 | 执行路径 | 预期结果 | |||
year | month | day | ||||
1 | 2008 | 1 | 25 | A-B-D-X | 第二天:2008年1月26日 | |
2 | 2008 | 3 | 31 | A-B-E-X | 第二天:2008年4月1日 | |
3 | 2008 | 12 | 31 | A-C-F-X | 第二天:2009年1月1日 | |
4 | 2008 | 4 | 28 | A-C-G-H-J-X | 第二天:2008年4月29日 |
判定覆盖
A-C-G-H-K-N-X
A-C-G-H-K-O
A-C-G-I-L-P-X
A-C-G-I-L-Q-U
A-C-G-I-M-S-W
用例号 | 输入值 | 执行路径 | 预期结果 | |||
year | month | day | ||||
1 | 2005 | 6 | 30 | A-C-G-H-K-N-X | 第二天:2005年7月1日 | |
2 | 2005 | 11 | 31 | A-C-G-H-K-O | 日期错误! | |
3 | 1996 | 2 | 28 | A-C-G-I-L-P-X | 第二天:1996年2月29日 | |
4 | 1996 | 2 | 31 | A-C-G-I-L-Q-U | 日期错误! | |
5 | 1995 | 2 | 29 | A-C-G-I-M-S-W | 日期错误! |
组合覆盖和路径覆盖同上
3)相应Junit测试脚本、执行结果
普通测试:
public class ComDateTest { private Date date=new Date(); //语义覆盖 @Test public void testNextDay1() { date.setDay(25); date.setMonth(1); date.setYear(2008); assertEquals("第二天:2008年1月26日", date.NextDay()); } @Test public void testNextDay2() { date.setDay(31); date.setMonth(3); date.setYear(2008); assertEquals("第二天:2008年4月1日", date.NextDay()); } @Test public void testNextDay3() { date.setDay(31); date.setMonth(12); date.setYear(2008); assertEquals("第二天:2009年1月1日", date.NextDay()); } @Test public void testNextDay4() { date.setDay(28); date.setMonth(4); date.setYear(2008); assertEquals("第二天:2008年4月29日", date.NextDay()); } //判定覆盖 @Test public void testNextDay5() { date.setDay(30); date.setMonth(6); date.setYear(2005); assertEquals("第二天:2005年7月1日", date.NextDay()); } @Test public void testNextDay6() { date.setDay(31); date.setMonth(11); date.setYear(2005); assertEquals("日期错误!", date.NextDay()); } @Test public void testNextDay7() { date.setDay(28); date.setMonth(2); date.setYear(1996); assertEquals("第二天:1996年2月29日", date.NextDay()); } @Test public void testNextDay8() { date.setDay(31); date.setMonth(2); date.setYear(1996); assertEquals("日期错误!", date.NextDay()); } @Test public void testNextDay9() { date.setDay(29); date.setMonth(2); date.setYear(1995); assertEquals("日期错误!", date.NextDay()); } }
参数化测试:
public class PacDateTest { private Date date=new Date(); private int day; private int month; private int year; private String result; @Parameters public static Collection data(){ return Arrays.asList(new Object[][]{ {25,1,2008,"第二天:2008年1月26日"}, {31,3,2008,"第二天:2008年4月1日"}, {31,12,2008,"第二天:2009年1月1日"}, {28,4,2008,"第二天:2008年4月29日"}, {30,6,2005,"第二天:2005年7月1日"}, {31,11,2005,"日期错误!"}, {28,2,1996,"第二天:1996年2月29日"}, {31,2,1996,"日期错误!"}, {29,2,1995,"日期错误!"}, }); } public PacDateTest(int day,int month ,int year,String result){ this.day=day; this.month=month; this.year=year; this.result=result; } @Test public void testNextDate(){ date.setDay(day); date.setMonth(month); date.setYear(year); assertEquals(result,date.NextDay()); } }
打包测试:
@RunWith(Suite.class) @Suite.SuiteClasses({ ComDateTest.class, PacDateTest.class }) public class AllDateTest { }
4)给出测试参数化和打包测试的脚本,并生成执行结果
普通测试
参数化测试
打包测试
源代码在输入合法的情况下能够正常运行,并输出正确结果。
四、测试小结:
1.测试结果显示在输入数据类型符合实际的情况下,未出现任何逻辑性错误,能输出正确结果。
2.源代码中存在多处标点符号,见一下标点符号统一使用英文形式,以便测试。
3.通过本次实验,学会了使用Junit框架对java代码测试,相比人工在控制台输入数据测试,Junit测试更加严格,更加方便。
4.经过这几次的实验,感觉到了软件测试工作的不易,开发人员应该经可能写出的代码结构清晰,使用统一的代码风格,使得测试人员能够方便阅读并理解代码,提高测试效率。
时间: 2024-11-07 02:29:03