实验二+093+王坤煌

一、实验目的

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

二、实验要求

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

三、实验内容

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

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

包括的内容有:

1) 被测原代码

package com.test;
import java.util.Scanner;
public class TestPractice {
    /*闰年判断
     * 返回值为true:该年为闰年
     * 返回值为false:该年为平年
    */
    public static boolean isLeapYear(int y)
    {
        if((y % 4 == 0 && y % 100 != 0)||y % 400 == 0)
            return true;
        else
            return false;
    }

    //下一天判断,返回值为下一天的日期,格式是xxxx年x月x日
    public static String NextDate(int y, int m, int d)
    {
        //判断年份是否超出范围
        if(1912 <= y && y <= 2050)
        {
            //判断月份是否超出范围
            if(1 <= m && m <= 12)
            {
                //大月判断,每个月只有31天
                if(m == 1||m == 3||m == 5||m == 7||m == 8||m ==10||m == 12)
                {
                    if(1 <= d && d < 31)
                        return y+"年"+m+"月"+(d+1)+"日";
                    else if(d == 31)
                    {
                        if(m == 12)
                            return (y+1)+"年1月1日";
                        else
                            return y+"年"+(m+1)+"月1日";
                    }
                    else
                        return "日期超出范围";
                }
                //小月判断,每个月只有30天
                else if(m == 4||m == 6||m == 9||m == 11)
                {
                    if(1 <= d && d < 30)
                        return y+"年"+m+"月"+(d+1)+"日";
                    if(d == 30)
                        return y+"年"+(m+1)+"月1日";
                    else
                        return "日期超出范围";
                }
                /*二月份在平年和闰年天数不同
                 * 所以需要分开统计
                 * */
                else
                {
                    if(isLeapYear(y))
                    {
                        if(1 <= d && d < 29)
                            return y+"年"+m+"月"+(d+1)+"日";
                        if(d == 29)
                            return y+"年"+(m+1)+"月1日";
                        else
                            return "日期超出范围";
                    }
                    else
                    {
                        if(1 <= d && d < 28)
                            return y+"年"+m+"月"+(d+1)+"日";
                        if(d == 28)
                            return y+"年"+(m+1)+"月1日";
                        else
                            return "日期超出范围";
                    }
                }

            }
            else
                return "月份超出范围";
        }
        else
        {
            return "年份超出范围";
        }    

    }

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(true)
        {
            System.out.print("请输入日期:");
            int y = scan.nextInt();
            if(y == -1) break;
            int m = scan.nextInt();
            int d = scan.nextInt();
            System.out.println(NextDate(y,m,d));
        }
    }

}

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

DD路径图:

①语句覆盖:


用例ID


输入值


执行路径


预期输出


y


m


d


1


2017


5


12


A-B-C-D-E-F-+3


2017年5月13日


2


2017


12


31


A-B-C-D-E-G-H-I-+3


2018年1月1日


3


2017


5


31


A-B-C-D-E-G-H-J-+3


2017年6月1日


4


2017


5


32


A-B-C-D-E-G-K-+3


日期超出范围


5


2017


4


12


A-B-C-D-L-M-+3


2017年4月13日


6


2017


4


30


A-B-C-D-L-N-O-+3


2017年5月1日


7


2017


4


31


A-B-C-D-L-N-P-+3


日期超出时间


8


2016


2


12


A-B-C-D-L-Q-R-+3


2016年2月13日


9


2016


2


29


A-B-C-D-L-Q-S-T-+3


2016年3月1日


10


2016


2


30


A-B-C-D-L-Q-S-U-+3


日期超出范围


11


2017


2


27


A-B-C-D-L-Q-V-W-+3


2017年2月28日


12


2017


2


28


A-B-C-D-L-Q-V-X-Y-+3


2017年3月1日


13


2017


2


29


A-B-C-D-L-Q-V-X-Z-+3


日期超出范围


14


2017


13


12


A-B-C-+1-+3


月份超出范围


15


2051


4


12


A-B-+2-+3


年份超出范围

②分支覆盖(判断覆盖):


用例ID


输入值


执行路径


预期输出


y


m


d


1


2017


5


12


A-B-C-D-E-F-+3


2017年5月13日


2


2017


12


31


A-B-C-D-E-G-H-I-+3


2018年1月1日


3


2017


5


31


A-B-C-D-E-G-H-J-+3


2017年6月1日


4


2017


5


32


A-B-C-D-E-G-K-+3


日期超出范围


5


2017


4


12


A-B-C-D-L-M-+3


2017年4月13日


6


2017


4


30


A-B-C-D-L-N-O-+3


2017年5月1日


7


2017


4


31


A-B-C-D-L-N-P-+3


日期超出时间


8


2016


2


12


A-B-C-D-L-Q-R-+3


2016年2月13日


9


2016


2


29


A-B-C-D-L-Q-S-T-+3


2016年3月1日


10


2016


2


30


A-B-C-D-L-Q-S-U-+3


日期超出范围


11


2017


2


27


A-B-C-D-L-Q-V-W-+3


2017年2月28日


12


2017


2


28


A-B-C-D-L-Q-V-X-Y-+3


2017年3月1日


13


2017


2


29


A-B-C-D-L-Q-V-X-Z-+3


日期超出范围


14


2017


13


12


A-B-C-+1-+3


月份超出范围


15


2051


4


12


A-B-+2-+3


年份超出范围

③路径覆盖:


用例ID


输入值


执行路径


预期输出


y


m


d


1


2017


5


12


A-B-C-D-E-F-+3


2017年5月13日


2


2017


12


31


A-B-C-D-E-G-H-I-+3


2018年1月1日


3


2017


5


31


A-B-C-D-E-G-H-J-+3


2017年6月1日


4


2017


5


32


A-B-C-D-E-G-K-+3


日期超出范围


5


2017


4


12


A-B-C-D-L-M-+3


2017年4月13日


6


2017


4


30


A-B-C-D-L-N-O-+3


2017年5月1日


7


2017


4


31


A-B-C-D-L-N-P-+3


日期超出时间


8


2016


2


12


A-B-C-D-L-Q-R-+3


2016年2月13日


9


2016


2


29


A-B-C-D-L-Q-S-T-+3


2016年3月1日


10


2016


2


30


A-B-C-D-L-Q-S-U-+3


日期超出范围


11


2017


2


27


A-B-C-D-L-Q-V-W-+3


2017年2月28日


12


2017


2


28


A-B-C-D-L-Q-V-X-Y-+3


2017年3月1日


13


2017


2


29


A-B-C-D-L-Q-V-X-Z-+3


日期超出范围


14


2017


13


12


A-B-C-+1-+3


月份超出范围


15


2051


4


12


A-B-+2-+3


年份超出范围

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

package henkepa;

import static org.junit.Assert.assertEquals;

import java.util.Arrays;
import java.util.Collection;

import junit.framework.Assert;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

//为这个类指定一个ParameterizedRunner
@RunWith(Parameterized.class)
public class checkTest {
private int param1;//存放参数
private int param2;
private int param3;
private String dat;//存放日期

//测试数据,一个是参数,一个是期望结果
@Parameters
public static Collection data(){
return Arrays.asList(new Object[][]{

{2017,2,28,"2017年3月1日"},
{2016,2,28,"2016年2月29日"},
{2016,3,31,"2016年4月1日"},
{2016,12,31,"2017年1月1日"},
{2013,4,30,"2013年5月1日"},

});
}

//构造参数,对变量初始化,加入参数获得测试数据
public checkTest(int param,int param02,int param03,String dat){
this.param1=param;
this.param2=param02;
this.param3=param03;
this.dat=dat;
}

@Test
public void NextDate(){

String d=TestPractice.NextDate(param1,param2,param3);
assertEquals(dat, d);

}
}

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

package henkepa;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({TestPracticeTest.class,})

public class Test {

}

4、测试小结:

测试找到的缺陷清单:未找到缺陷

测试总结与心得体会:通过此次实验对白盒测试有了更深的理解;感觉在做的时候语句覆盖、判定覆盖和路径覆盖做起来都是一样的...

时间: 2024-08-10 19:09:23

实验二+093+王坤煌的相关文章

实验四+093+王坤煌

一.实验目的 1) 学习QTP工具的使用 2)了解黑盒自动化测试 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)对QTP的飞机订票系统的任一界面或控件实现自动化测试.(测试的具体自选) (3)写出该程序的缺陷. 三.实验内容 1.对QTP的样例小程序飞机订票系统,实现自动化测试.(学号被3整除,测3a;余1,测3b:余2,测4a) 2.要求: 1)登录功能测试 2)测试用例 3) Dialog("Login").WinEdit("Agent Name:"

实验三+093+王坤煌

一.实验目的 掌握黑盒测试用例设计方法 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)运用等价类.边界值.决策表.状态图法等进行测试用例设计. (3)对手机上任意一款音乐软件进行黑盒测试实践.(作业若雷同,后上传者判定0分) 三.实验内容 1)被测项目界面. 2)测试用例设计表 等价类: 测试用例: 决策表: 3)思维导图 4)场景法: 登录功能: 基本流:输入正确帐号密码 备选流1:帐号为空 备选流2:密码为空 备选流3:密码错误 备选流4:QQ授权登录 备选流5:微信授权登录 5

第5次作业+093+王坤煌

被测链接:http://www.cnblogs.com/lyz007/p/6803889.html 1)被测项目界面. 2)测试用例设计表 等价类: 测试用例: 决策表: 3)测试结论: 测试功能全都通过 4)给开发同学的建议: 似乎没什么可以建议的

第4次作业类测试代码+093+王坤煌

1.类图: 2.界面和相应功能: 新增weekDay()方法: public static String weekDay(int m,int d,int y){ if(m == 1 || m == 2){ y--; m+=12; y--; } int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7; String rtweek = null; switch(week){ case 1: rtweek="星期一";break; case 2: r

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.实现密码学中常见算法的固化. 实验仪器: 名称 型号 数量 嵌