实验二+045+杨铭河

一、实验目的

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

二、实验要求

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

三、实验内容

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

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

包括的内容有:

1) 被测原代码

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

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

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

四、实验步骤

1)被测源代码:http://www.cnblogs.com/trottuer/p/6628391.html

2)依据覆盖技术的测试用例:

流程图:       

 

DD路径图:

DD-路径(只压缩链路经)

程序图节点 DD路径
1 A
2 B
3 C
4 D
5 E
6 F
7、8 G
9 H
10 I
11、12、13 J
14 K
15 L
16 M

 (I)语句覆盖

A-B-C

A-B-D-E-F

A-B-D-E-F-G-H-I

A-B-D-E-F-G-H-J-K-M

A-B-D-E-F-G-H-J-K-L

测试用例

用例ID 输入值 执行路径 预期输出
a b c
1 1919     A-B-C 年份超出范围
2 2017 13   A-B-D-E-F 月份超出范围
3 2049 4 32 A-B-D-E-F-G-H-I 日期超出范围
4 12.5     A-B-D-E-F-G-H-J-K-M input error!
5 1920 1 1 A-B-D-E-F-G-H-J-K-L 1920年1月2日

 

 

 

 

 

 

 

(II)分支覆盖(判断覆盖)与路径覆盖 均同上

 

(III)条件覆盖

用例ID
result >= 1920 && result <= 2050
result >= 1 && result <= 12
!(result >= 1 && result <= end)
try-catch
覆盖路径
 1  F     T  A-B-C
 2  T  F   T  A-B-D-E-F
3 T T F F A-B-D-E-F-G-H-I
4 T T T F A-B-D-E-F-G-H-J-K-M
5 T T T T A-B-D-E-F-G-H-J-K-L

 

  

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

 

package firstWork;

import java.util.Scanner;

import junit.framework.TestCase;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class TestTest1 extends TestCase{

    public String[] input = { "输入年 :", "输入月 :", "输入日 :" };
    @Before
    public void setUp() throws Exception {
    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void testInput1() {
        Scanner sc = new Scanner("1919");
        assertEquals("年份超出范围", firstWork.Test.input(input[0], sc, 0));
    }
    
    @Test
    public void testInput1_1() {
        Scanner sc = new Scanner("1920");
        assertEquals(1920, firstWork.Test.input(input[0], sc, 0));
    }
    
    @Test
    public void testInput2() {
        Scanner sc = new Scanner("13");
        assertEquals("月份超出范围", firstWork.Test.input(input[1], sc, 1));
    }
    
    @Test
    public void testInput2_1() {
        Scanner sc = new Scanner("6");
        assertEquals(6, firstWork.Test.input(input[1], sc, 1));
    }

    @Test
    public void testInput3() {
        Scanner sc = new Scanner("32");
        assertEquals("日期超出范围", firstWork.Test.input(input[2], sc, 2));
    }
    
    @Test
    public void testInput3_1() {
        Scanner sc = new Scanner("29");
        assertEquals(29, firstWork.Test.input(input[2], sc, 2));
    }
    
    @Test
    public void testInput4() {
        Scanner sc = new Scanner("12.5");
        assertEquals("input error!", firstWork.Test.input(input[0], sc, 0));
    }
    
    @Test
    public void testInput5() {
        Scanner sc = new Scanner("2051");
        assertEquals(2051, firstWork.Test.input(input[0], sc, 0));
    }
    
    
    @Test
    public void testEndDay(){
        assertEquals(2,firstWork.Test.endDay(1920,1));
    }

}

 

执行结果:

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

 测试参数化:

package firstWork;

import static org.junit.Assert.*;

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

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

@RunWith(Parameterized.class)
public class ParameterizedTest {

    public static String[] input = { "输入年 :", "输入月 :", "输入日 :" };
    private String str;
    private Scanner sc;
    private int index;
    private Object object;
     @Parameters
        public static Collection data(){
            return Arrays.asList(
                new Object[][]{
                    {input[0], new Scanner("1919"), 0, "年份超出范围"},
                    {input[0], new Scanner("1920"), 0, 1920},
                    {input[1], new Scanner("13"), 1, "月份超出范围"},
                    {input[1], new Scanner("6"), 1, 6},
                    {input[2], new Scanner("32"), 2, "日期超出范围"},
                    {input[2], new Scanner("29"), 2, 29},
                    {input[2], new Scanner("12.5"), 2, "input error!"},
                }
            );
        }

    public ParameterizedTest(String str, Scanner sc, int index, Object object) {
        this.str = str;
        this.sc = sc;
        this.index = index;
        this.object = object;
    }

    @Test
    public void testInputn() {
        assertEquals(object, firstWork.Test.input(str, sc, index));
    }

}

 

结果

 

打包测试:

package firstWork;

import static org.junit.Assert.*;

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

@RunWith(Suite.class)
@Suite.SuiteClasses({TestTest1.class})
public class AllTest {


}

结果:

4、测试小结:

  •      测试总结与心得体会
  • 答:
  • 1、程序代码错误输出时是采用print输出,无法直接采用assertEquals()进行结果测试。

posted on 2017-04-13 22:13  铭河  阅读(271)  评论(0编辑  收藏  举报