首页 > 其他 > 详细

实验二+020+梁睿阳

时间:2017-04-12 01:48:57      阅读:356      评论:0      收藏:0      [点我收藏+]

被测代码地址:http://www.cnblogs.com/linpanhuang/p/6611626.html

一、实验目的

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

二、实验要求

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

三、实验内容

根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。

所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。

包括的内容有:

1) 被测原代码

package test01;
import java.util.Scanner;

public class aaa {
    static int m[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//静态数组存储月份的天数
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int y=0 ,m=0,d=0;
        System.out.println("请输入年  月 日(用空格隔开),-1退出:");
        @SuppressWarnings("resource")
        Scanner scan = new Scanner(System.in);
        while(true){
        y=scan.nextInt();
        if(y == -1)System.exit(0);//-1退出程序
        m=scan.nextInt();
        d=scan.nextInt();
        System.out.println(nextDate(y,m,d));
        }
    }
    public static String nextDate(int year,int month,int day)//nextDate方法
    {
        String newDate = null;//用来接收日期
        checkLeapYear(year);//如果是闰年则将m[2]置为29
        switch(checkInput(year,month,day))//判断输入的的合法性属于哪种类型,如果输入合法再进行相关操作
        {        
            case 1: return newDate = "月份超出范围"; 
            case 2: return newDate = "日期超出范围"; 
            case 3: return newDate = "年份超出范围"; 
            default:    
                if(month==12 && day==31)//判断是否为最后一个月的最后一天,如果 是则年份加1,为1月1日
                {
                    year++;
                    month = 1;
                    day = 1;
                }
                else if(day < m[month]) day++;//如果日期的天数小于本月天数执行day++;否则表示为当月的最后一天执行month++,day=1;
                else 
                {
                    month++;
                    day =1;
                }
                newDate=year+"年"+month+"月"+day+"日";
                m[2] = 28;//重置二月的天数
                return newDate;            
        }
    }
    public static void checkLeapYear(int year)//如果是闰年则将m[2]置为29
    {
        if(year%4 == 0 && year%100 != 0)
            m[2] = 29;//闰年2月29天
        if(year%400 == 0)
            m[2] = 29;
    }
    public static int checkInput(int year,int month, int day)//判断输入是否合法,并分成不同类别
    {
        if(month<1 || month>12)
            return 1;
        if(day<1 || day>m[month])
            return 2;
        if(year<1992 || year>2050)
            return 3;
        return 0;
    }
}

2)依据覆盖技术,测试用例列表:

覆盖方式 序号 输入数据 期待结果 实际结果结果 通过
语句覆盖、判定/条件覆盖、路径覆盖 1 y=2015 m=12 d=30 2015年12月31日 2015年12月31日
语句覆盖、判定/条件覆盖、路径覆盖 2 y=2016 m=1 d=1 2016年1月2日 2016年1月2日
语句覆盖、判定/条件覆盖、路径覆盖 3 y=2015 m=2 d=31 2016年1月1日 2016年1月1日
语句覆盖、判定/条件覆盖、路径覆盖 4 y=2016 m=2 d=28 2016年2月29日 2016年2月29日
语句覆盖、判定/条件覆盖、路径覆盖 5 y=2016 m=2 d=29 2016年3月1日 2016年3月1日
语句覆盖、判定/条件覆盖、路径覆盖 6 y=2016 m=2 d=32 日期超出范围 日期超出范围
语句覆盖、判定/条件覆盖、路径覆盖 7 -1 程序退出 程序退出
语句覆盖、判定/条件覆盖、路径覆盖、合覆盖 8 y=1912 m=3 d=16 1912年3月17日 年份超出范围 ×
语句覆盖、判定/条件覆盖、路径覆盖、合覆盖 9 y=2018 m=0 d=23 月份超出范围 月份超出范围
合覆盖 10 y=2051 m=3 d=16 年份超出范围 年份超出范围
组合覆盖 11 y=2015 m=4 d=30 2015年5月1日 2015年5月1日
组合覆盖 12 y=2015 m=8 d=31 2015年9月1日 2015年9月1日
组合覆盖 13 y=2018 m=1 d=0 日期超出范围 日期超出范围
组合覆盖 14 y=2018 m=1 d=-1 日期超出范围 日期超出范围
组合覆盖 15 y=2015 m=13 d=32 月份超出范围 月份超出范围

3)相应Junit测试脚本、执行结果

package test01;
import static org.junit.Assert.*;

import org.junit.Test;

public class unit_est {
	@Test
	public void test1() {
		assertEquals("2015年12月31日",aaa.nextDate(2015, 12, 30));
	}
	@Test
	public void test2() {
		assertEquals("2016年1月2日",aaa.nextDate(2016, 1, 1));	
	}
	@Test
	public void test3() {
		assertEquals("2017年1月1日",aaa.nextDate(2016, 12, 31));	
	}
	@Test
	public void test4() {
		assertEquals("2016年2月29日",aaa.nextDate(2016, 2, 28));	
	}
	@Test
	public void test5() {
		assertEquals("2016年3月1日",aaa.nextDate(2016, 2, 29));	
	}
	@Test
	public void test6() {
		assertEquals("日期超出范围",aaa.nextDate(2016, 2, 32));	
	}
	@Test
	public void test8() {
		assertEquals("1912年3月17日",aaa.nextDate(1912, 3, 16));
	}
	@Test
	public void test9() {
		assertEquals("月份超出范围",aaa.nextDate(2018, 0, 23));
	}
	@Test
	public void test10() {
		assertEquals("年份超出范围",aaa.nextDate(2051, 3, 16));
	}
	@Test
	public void test11() {
		assertEquals("2015年5月1日",aaa.nextDate(2015, 4, 30));
	}
	@Test
	public void test12() {
		assertEquals("2015年9月1日",aaa.nextDate(2015, 8, 31));
	}
	@Test
	public void test13() {
		assertEquals("日期超出范围",aaa.nextDate(2018, 1, 0));
	}
	@Test
	public void test14() {
		assertEquals("日期超出范围",aaa.nextDate(2018, 1, -1));
	}
	@Test
	public void test15() {
		assertEquals("月份超出范围",aaa.nextDate(2015, 13, 32));
	}
}

 

4)给出测试参数化和打包测试的脚本,并生成执行结果

技术分享

4、测试小结:

  •      缺陷清单:样例8未通过
  •      对源代码的修改建议:结构很适合测试,可以用少量样例覆盖大量的代码和组合情况,但是有些不应该的笔误应该注意。这次的错误就是因为将来if(year<1912 || year>2050)错写为1992导致的错误。
  •      被测程序过于简单,暂时没有办法使用到更进阶一些的测试功能,断言语句就已经可以完全满足需求。通过本次试验已经进一步书系列Junit的基本使用,以及一些需要注意的地方,例如断言语句不要写在一起这样会导致如果出错不知道错在哪句上。

实验二+020+梁睿阳

原文:http://www.cnblogs.com/mrlry/p/6697100.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!