实验二+108+曾宏宇

一、实验目的

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

二、实验要求

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

三、实验内容

根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的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

实验二+108+曾宏宇的相关文章

实验四+108+曾宏宇

一.实验目的 1) 学习QTP工具的使用 2)了解黑盒自动化测试 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)对QTP的飞机订票系统的任一界面或控件实现自动化测试.(测试的具体自选) (3)写出该程序的缺陷. 三.实验内容 1.对QTP的样例小程序飞机订票系统(3a),实现自动化测试. 2.(1)登录功能测试 (2)测试用例 序号 输入 预期结果 用户名 密码 1 空 空 登录失败 2 空 mercury 登录失败 3 user 空 登录失败 4 use mercu 登录失败 5

实验三+108+曾宏宇

一.对被测程序运用不同的测试技巧进行测试用例设计,并执行测试,撰写测试小结.要求写出测试用例表.执行情况和测试小结. 被测项目源码链接:http://www.cnblogs.com/lkx1995/p/6804122.html 1)被测项目界面 正确输入: 存在未输入 输入不合法: 2)测试用例设计表 等价类 输入条件 有效等价类 无效等价类 销售量是否输入 1.headphone!=null 2.shell!=null 3.protector!=null 4.headphone=null 5.

第四次作业类测试代码+108+曾宏宇

1.类图 2.代码 常量定义: private final static int HP_PRICE=80; private final static int SHELL_PRICE=10; private final static int PROTECTOR_PRICE=8; 方法: commission(int headphone,int shell,int protector) public static double commission(int headphone,int shell,i

【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十三:DS1302模块

实验二十三:DS1302模块 DS1302这只硬件虽然曾在<建模篇>介绍过,所以重复的内容请怒笔者懒惰唠叨了,笔者尽可以一笑带过,废话少说让我们进入正题吧.DS1302是执行事实时钟(Real Time Clock)的硬件,采用SPI传输. 表示23.1 访问(地址)字节. [7] [6] [5] [4] [3] [2] [1] [0] 1 A5 A4 A3 A2 A1 A0 R/W DS1302作为从机任由主机蹂躏 ... 啊,是任由主机访问才对.对此,访问便有方向之分.如表23.1所示,访

实验二十四:SD卡模块

  驱动SD卡是件容易让人抓狂的事情,驱动SD卡好比SDRAM执行页读写,SD卡虽然不及SDRAM的麻烦要求(时序参数),但是驱动过程却有猥琐操作.除此此外,描述语言只要稍微比较一下C语言,描述语言一定会泪流满面,因为嵌套循环,嵌套判断,或者嵌套函数等都是它的痛.. 史莱姆模块是多模块建模的通病,意指结构能力非常脆弱的模块,暴力的嵌套行为往往会击垮模块的美丽身躯,好让脆弱结构更加脆弱还有惨不忍睹,最终搞垮模块的表达能力.描述语言预想驾驭SD卡,关键的地方就是如何提升模块的结构能力.简单而言,描述

操作系统(实验二、作业调度模拟程序实验)

实验二.作业调度模拟程序实验 专业 商业软件工程   姓名 丘惠敏 学号 201406114203 一.        实验目的   (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.        实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 三.        实验方法.步骤及结果测试   1.   

1111《操作系统教程》实验二 作业调度模拟程序

实验二 作业调度模拟程序 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2) 短作业优先 (SJF

【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二:按键模块① - 消抖

实验二:按键模块① - 消抖 按键消抖实验可谓是经典中的经典,按键消抖实验虽曾在<建模篇>出现过,而且还惹来一堆麻烦.事实上,笔者这是在刁难各位同学,好让对方的惯性思维短路一下,但是惨遭口水攻击 ... 面对它,笔者宛如被甩的男人,对它又爱又恨.不管怎么样,如今 I'll be back,笔者再也不会重复一样的悲剧. 按键消抖说傻不傻说难不难.所谓傻,它因为原理不仅简单(就是延迟几下下而已),而且顺序语言(C语言)也有无数不尽的例子.所谓难,那是因为人们很难从单片机的思维跳出来 ... 此外,

【操作系统】实验二 作业调度模拟程序

实验二作业调度模拟程序 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)        采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2)