实验二+067+冯艳芳

一、实验目的

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

二、实验要求

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

三、实验内容

根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的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的使用,虽然被测代码有问题,但是还是按步骤一步步完成了脚本语句。并且在课堂上老师所讲的断言语句不能排列一起使用这个知识点印象深刻。
时间: 2024-10-10 19:56:10

实验二+067+冯艳芳的相关文章

实验三+067+冯艳芳

一.实验目的 掌握黑盒测试用例设计方法 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)运用等价类.边界值.决策表.状态图法等进行测试用例设计. (3)对手机上任意一款音乐软件进行黑盒测试实践.(作业若雷同,后上传者判定0分) 三.实验内容 1.对被测程序运用不同的测试技巧进行测试用例设计,并执行测试,撰写测试小结. 要求写出测试用例表.执行情况和测试小结. 等价类表: 输入条件 有效等价类 编号 无效等价类 编号 年 1912~2050 1 非整数 7 小于1912 8 大于2050

实验二+101+谢艳敏

一.实验目的 掌握基于覆盖理论与基本路径的基本白盒测试方法和实践 二.实验要求 运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结. 三.实验内容 根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本. 所有的覆盖的技术:语句覆盖.判定覆盖.条件覆盖.判定/条件覆盖.组合覆盖.路径覆盖,基本路径测试方法. 包括的内容有: 1) 被测源代码: 1 public class GetData { 2 3 public s

MySQL数据库实验二:单表查询

实验二   单表查询 一.实验目的 理解SELECT语句的操作和基本使用方法. 二.实验环境 是MS SQL SERVER 2005的中文客户端. 三.实验示例 1.查询全体学生的姓名.学号.所在系. SELECT Sname,S#,Sdept FROM S: 2.查询全体学生的详细记录. SELECT  * FROM S: 3.查全体学生的姓名及其出生年份. SELECT Sname,2011-Sage    /*假定当年的年份为2011年*/ FROM S: 4.查询选修了课程的学生学号.

20145221高其&amp;20145326蔡馨熠《信息安全系统设计基础》实验二 固件设计

20145221高其&20145326蔡馨熠<信息安全系统设计基础>实验二 固件设计 实验目的与要求 了解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 linux 环境下串行程序设计的基本方法. 掌握终端的主要属性及设置方法,熟悉终端I /O 函数的使用.学习使用多线程来完成串口的收发处理. 熟悉linux开发环境,学会基于S3C2410的linux开发环境的配置和使用.使用linux的armv4l-unknown-linux-gcc编译,使用基于NFS方式的

实验二 作业调度模拟程序

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

实验二

实验二.pcb进程 专业 网络工程   姓名 方俊晖 学号 201406114309 一.        实验目的 通过本实验可以加深对有关进程控制块.进程队列的概念的进一步理解. 二.        实验内容和要求 1.进程PCB的结构体定义 2.定义结构体 3.输入进程序列 4.排序(按到位时间) 5.输出进程运行的结果 三.        实验方法.步骤及结果测试 #include<stdio.h>typedef struct PCB{int time;int member;int he

信息安全系统设计基础实验二:固件设计

北京电子科技学院(BESTI) 实验报告 课程:信息安全系统设计基础 班级:1353 姓名:芦畅 傅冬菁 学号:20135308 20135311 成绩: 指导教师:娄家鹏 实验日期:2015.11.10 实验密级: 预习程度: 实验时间:15:30~18:00 仪器组次: 必修/选修: 实验序号:1 实验名称:实验一:Linux开发环境的配置和使用 实验目的与要求: 1.掌握程序的烧写方法; 2.能够实现Bootloader; 3.实现密码学中常见算法的固化. 实验仪器: 名称 型号 数量 嵌

实验二 实验报告

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

1111实验二 作业调度模拟实验

实验二.作业调度模拟实验 物联网工程 张怡 201306104149 一.实验目的  (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.实验内容和要求 1.至少用三种调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2) 短作业优先 (SJF) 调度算法,优先调度要求运行时间最短的作业. 3) 响应比高者优先(HRRN)调度算法,为每个作业设置一个优先权(响应比),调度之前先计算各作业的优先权,优先数高