博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验二+067+冯艳芳
阅读量:5347 次
发布时间:2019-06-15

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

一、实验目的

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

二、实验要求

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

三、实验内容

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

 

 

4、测试小结:

  •      测试找到的缺陷清单:老师第一次提的要求没有完成,返回值是String型,该代码返回值为void,导致返回值不对,assertEquals无法经行断言判断。
  •      对源代码的修改建议:按要求修改好代码,方法的类型重新定义,方法中判断超出范围太过繁琐,建议定义一个新的方法。
  •      测试总结与心得体会:通过本次实验更深一步了解了Junit的使用,虽然被测代码有问题,但是还是按步骤一步步完成了脚本语句。并且在课堂上老师所讲的断言语句不能排列一起使用这个知识点印象深刻。

转载于:https://www.cnblogs.com/ff44/p/6707027.html

你可能感兴趣的文章
CMD批处理延时启动的几个方法
查看>>
转:LoadRunner中web_custom_request 和 web_submit_data的差别
查看>>
HTC G7直刷MIUI开启A2SD+亲测教程
查看>>
shiro的rememberMe不生效
查看>>
const 不兼容的类型限定符问题
查看>>
OpenCV的配置
查看>>
spring Cache + Redis 开发数据字典以及自定义标签
查看>>
成功连上数据库顿感世界美好许多
查看>>
编程注意2
查看>>
《C++ Primer Plus》第12章 类和动态内存分配 学习笔记
查看>>
javascript中sort()排序方法总结
查看>>
实现聊天界面的代码
查看>>
自己生成一个NDK的浅析
查看>>
Excel数据导入到数据库
查看>>
jQuery最佳实践
查看>>
SELinux FAQ
查看>>
Java中synchronized同步的理解
查看>>
python 数值计算库
查看>>
java 服务重启 js 中被注释代码仍然执行
查看>>
我并不是不闻不问![C#]
查看>>