博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验二+108+曾宏宇
阅读量:5945 次
发布时间:2019-06-19

本文共 5028 字,大约阅读时间需要 16 分钟。

一、实验目的

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

二、实验要求

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

三、实验内容

根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的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.经过这几次的实验,感觉到了软件测试工作的不易,开发人员应该经可能写出的代码结构清晰,使用统一的代码风格,使得测试人员能够方便阅读并理解代码,提高测试效率。

转载于:https://www.cnblogs.com/zenghongyu/p/6708355.html

你可能感兴趣的文章
java 视频播放 多人及时弹幕技术 代码生成器 websocket springmvc mybatis SSM
查看>>
Activiti6.0,spring5,SSM,工作流引擎,OA
查看>>
使用Tooltip会出现一个问题,如果行上出现复选框
查看>>
禁止浏览器缓存js
查看>>
【Redis】安装PHP的redis驱动(二)
查看>>
什么是序列化,为什么要序列化
查看>>
Java保留小数点后有效数字
查看>>
C++中一些类和数据结构的大小的总结
查看>>
mysql开启binlog
查看>>
ctrl + z fg bg
查看>>
工作流引擎Oozie(一):workflow
查看>>
struct框架
查看>>
Deep Learning(深度学习)相关网站
查看>>
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
oracle进行字符串拆分并组成数组
查看>>
100多个基础常用JS函数和语法集合大全
查看>>
Java8 lambda表达式10个示例
查看>>
innerHTML outerHTML innerText
查看>>