实验二+093+王坤煌

Posted ,。?!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验二+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、测试小结:

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

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

 

以上是关于实验二+093+王坤煌的主要内容,如果未能解决你的问题,请参考以下文章

实验三+093+王坤煌

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

第5次作业+093+王坤煌

实验二

实验报告四

实验一201421440018