实验二+125

被测代码:

一、实验目的

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

二、实验要求

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

三、实验内容

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

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

包括的内容有:

1) 被测原代码

import java.util.Scanner;
public class homeWork01 {
public static String triangle(int a,int b,int c){
if(a>=1&&a<=100&&b>=1&&b<=100&&c>=1&&c<=100){
if((a<b+c)&&(b<a+c)&&(c<a+b)){
if(a==b&&b==c){
return "等边三角形";
}
if(a==b||a==c||b==c){
return "等腰三角形";
}
if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){
return"直角三角形";
}
return "一般三角形";
}else{
return"不构成三角形";
}
}else{
return "边的值不在范围内";
}

}
public static void main(String []args){
System.out.println("请输入三角形的三条边:");
int s1=0;
int s2=0;
int s3=0;
Scanner scan=new Scanner(System.in);
s1=scan.nextInt();
s2=scan.nextInt();
s3=scan.nextInt();
System.out.println(triangle(s1,s2,s3));

}
}

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

1.语句覆盖

路径:

A-B-D-M

A-B-C-F-M

A-B-C-E-H-M

A-B-C-R-G-J-M

A-B-C-E-G-I-L-M

A-B-C-E-G-I-K-M

测试用例:

编号 输入值 执行路径 预期输出 实际输出
a b c
1 0 3 4 A-B-D-M 边的值不在范围内 边的值不在范围内
2 1 2 1 A-B-C-F-M 不构成三角形 不构成三角形
3 6 6 6 A-B-C-E-H-M 等边三角形 等边三角形
4 3 3 4 A-B-C-R-G-J-M 等腰三角形 等腰三角形
5 3 4 5 A-B-C-E-G-I-L-M 直角三角形 直角三角形
6 5 6 7 A-B-C-E-G-I-K-M 一般三角形 一般三角形

    

2.分支覆盖:

路径:

A-B-D-M

A-B-C-F-M

A-B-C-E-H-M

A-B-C-R-G-J-M

A-B-C-E-G-I-L-M

A-B-C-E-G-I-K-M

测试用例:

编号 输入值 执行路径 预期输出 实际输出
a b c
1 0 3 4 A-B-D-M 边的值不在范围内 边的值不在范围内
2 1 2 1 A-B-C-F-M 不构成三角形 不构成三角形
3 6 6 6 A-B-C-E-H-M 等边三角形 等边三角形
4 3 3 4 A-B-C-R-G-J-M 等腰三角形 等腰三角形
5 3 4 5 A-B-C-E-G-I-L-M 直角三角形 直角三角形
6 5 6 7 A-B-C-E-G-I-K-M 一般三角形 一般三角形

 

3.路径覆盖:

路径:

A-B-D-M

A-B-C-F-M

A-B-C-E-H-M

A-B-C-R-G-J-M

A-B-C-E-G-I-L-M

A-B-C-E-G-I-K-M

测试用例:

编号 输入值 执行路径 预期输出 实际输出
a b c
1 0 3 4 A-B-D-M 边的值不在范围内 边的值不在范围内
2 1 2 1 A-B-C-F-M 不构成三角形 不构成三角形
3 6 6 6 A-B-C-E-H-M 等边三角形 等边三角形
4 3 3 4 A-B-C-R-G-J-M 等腰三角形 等腰三角形
5 3 4 5 A-B-C-E-G-I-L-M 直角三角形 直角三角形
6 5 6 7 A-B-C-E-G-I-K-M 一般三角形 一般三角形

 

 

条件覆盖:

编号 1<=a<=100 1<=b<=100 1<=c<=100

1<=a<=100&&

1<=b<=100&&

1<=c<=100

覆盖路径
1 T T T T B-C
2 F F F F B-D-M
3 T F F F B-D-M
4 F T F F B-D-M
5 F F T F B-D-M
6 T T F F B-D-M
7 T F T F B-D-M
8 T T T F B-D-M

 

 

编号 a<b+c b<a+c c<a+b

a<b+c&&

b<a+c&&

c<a+b

路径

1 T F F F C-F-M
2 F T F F C-F-M
3 F F T F C-F-M
4 T T F F C-F-M
5 T F T F C-F-M
6 F T T F C-F-M
7 T T T T C-E
8 F F F F C-F-M

 

 

编号

a==b

b==c

a==b &&b==c

覆盖路径

1

F

F

F

E-G

2

F

T

F

E-G

3

T

F

F

E-G

4

T

T

T

E-H

 

 

编号 a==b  a==c b==c

a==b || a==c||b==c

路径

1 T F F T G-J-M
2 F T F T G-J-M
3 F F T T G-J-M
4 T T F T G-J-M
5 T F T T G-J-M
6 F T T T G-J-M
7 T T T T G-J-M
8 F F F F G-I

 

 

编号

a*a+b*b==c*c

b*b+c*c==a*a

a*a+c*c==b*b

a*a+b*b==c*c || b*b+c*c==a*a || a*a+c*c==b*b

覆盖路径

1

T

F

F

T

I-L

2

T

T

F

T

I-L

3

T

T

T

T

I-L

4

T

F

T

T

I-L

5

F

F

F

F

I-K

6

F

T

F

T

I-L

7

F

F

T

T

I-L

8

F

T

T

T

I-L

 

 

测试用例:

编号 输入值 执行路径 预期输出 实际输出
a b c
1 0 3 4 A-B-D-M 边的值不在范围内 边的值不在范围内
2 3 0 4 A-B-D-M 边的值不在范围内 边的值不在范围内
3 4 3 0 A-B-D-M 边的值不在范围内 边的值不在范围内
4 1 2 1 A-B-C-F-M 不构成三角形 不构成三角形
5 2 1 1 A-B-C-F-M 不构成三角形 不构成三角形
6 1 1 2 A-B-C-F-M 不构成三角形 不构成三角形
7 6 6 6 A-B-C-E-H-M 等边三角形 等边三角形
8 3 3 4 A-B-C-R-G-J-M 等腰三角形 等腰三角形
9 3 4 3 A-B-C-R-G-J-M 等腰三角形 等腰三角形
10 4 3 3 A-B-C-R-G-J-M 等腰三角形 等腰三角形
11 3 4 5 A-B-C-E-G-I-L-M 直角三角形 直角三角形
12 4 5 3 A-B-C-E-G-I-L-M 直角三角形 直角三角形
13 3 5 4 A-B-C-E-G-I-L-M 直角三角形 直角三角形
14 5 6 7 A-B-C-E-G-I-K-M 一般三角形 一般三角形

 

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

import static org.junit.Assert.*;

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


public class TriangleTest {

    @Before
    public void setUp() throws Exception {
    }

    @Test
    public void NoValue() {
         assertEquals("边的值不在范围内", Triangle.triangle(0, 3, 4));
         assertEquals("边的值不在范围内", Triangle.triangle(3, 0, 4));
         assertEquals("边的值不在范围内", Triangle.triangle(4, 0, 3));
    }
    @Test
    public void NoTriangle() {
         assertEquals("不构成三角形", Triangle.triangle(1, 2, 1));
         assertEquals("不构成三角形", Triangle.triangle(2, 1, 1));
         assertEquals("不构成三角形", Triangle.triangle(1, 1, 2));
    }
    @Test
    public void EqualTriangle() {
         assertEquals("等边三角形", Triangle.triangle(6, 6, 6));
         assertEquals("等边三角形", Triangle.triangle(5, 5, 5));
         assertEquals("等边三角形", Triangle.triangle(4, 4, 4));
    }
    @Test
    public void IsoscelesTriangle() {
         assertEquals("等腰三角形", Triangle.triangle(3, 3, 4));
         assertEquals("等腰三角形", Triangle.triangle(3, 4, 3));
         assertEquals("等腰三角形", Triangle.triangle(4, 3, 3));
    }
    @Test
    public void  RightAngle() {
         assertEquals("直角三角形", Triangle.triangle(3, 5, 4));
         assertEquals("直角三角形", Triangle.triangle(3, 4, 5));
         assertEquals("直角三角形", Triangle.triangle(4, 5, 3));
    }
    @Test
    public void TheTriangle() {
         assertEquals("一般三角形", Triangle.triangle(5, 6, 7));

    }
    
}

 

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

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import java.util.Arrays;
import java.util.Collection;

@RunWith(Parameterized.class)
public class ParameterTest {
    private static Triangle triangle = new Triangle();
    private int a,b,c; 
    private String Result;  
    

    @Before
    public void setUp() throws Exception {
    }
    @Parameters
    public static Collection data(){
        return Arrays.asList(
            new Object[][]{
                    {0,3,4,"边的值不在范围内"},
                    {3,0,4,"边的值不在范围内"},
                    {4,3,0,"边的值不在范围内"},
                    {6,6,6,"等边三角形"},
                    {5,4,3,"直角三角形"},
                    {3,4,5,"直角三角形"},
                    {4,5,3,"直角三角形"},
                    {3,3,4,"等腰三角形"},
                    {3,4,3,"等腰三角形"},
                    {4,3,3,"等腰三角形"},
                    {5,6,7,"一般三角形"},

            }
        );
    }
      //构造函数
    public ParameterTest(int a,int b,int c,String Result) 
    {
        this.a=a;
        this.b=b;
        this.c=c;
        this.Result=Result;
    }
    @Test
    public void test() {
        assertEquals(Result, Triangle.triangle(a, b, c));
    }

}

打包测试:

import static org.junit.Assert.*;

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

@RunWith(Suite.class)
@Suite.SuiteClasses({
    ParameterTest.class
})
public class PakageTest {

    @Before
    public void setUp() throws Exception {
    }

}

4、测试小结:

源代码目前没有缺陷     

测试总结与心得体会:通过这次的学习,我明白了如何使用Junit中的方法来测试程序。发现适当的运行这些工具,可以更轻松,更好的发现程序中的问题。在运用参数化测试的方法中,发现不是很能理解,于是上网查找资料,资料总结了一下步骤。

Junit参数化步骤:

(1)为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized。
(2)为测试类声明几个变量,分别用于存放期望值和测试所用数据。
(3)为测试类声明一个带有参数的公共构造函数,并在其中为第二个环节中声明的几个变量赋值。
(4)为测试类声明一个使用注解 org.junit.runners.Parameterized.Parameters 修饰的,返回值为 java.util.Collection 的公共静态方法,并在此方法中初始化所有需要测试的参数对。
(5)编写测试方法,使用定义的变量作为参数进行测试。

 

posted @ 2017-04-14 15:38  ghostX  阅读(206)  评论(0编辑  收藏  举报