首页 > 代码库 > 实验二+049+尤帆贤

实验二+049+尤帆贤

一、实验目的

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

二、实验要求

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

三、实验内容

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

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

包括的内容有:

1) 被测原代码:

import java.util.InputMismatchException;
import java.util.Scanner;

public class TestDemo {
    
    public static String Triangle(int side1,int side2,int side3)//判断是否构成三角形及三角形的种类
    {
        int temp;
        if(side1>side2) {temp=side1;side1=side2;side2=temp;}//排个序让小数在前,大数在后(不能保证前两个数的顺序)
        if(side2>side3) {temp=side2;side2=side3;side3=temp;}
    
        String result="三角形";
        if(side1+side2<=side3)
            return "不构成"+result;
        else if(side1==side2 && side2==side3)
            return "等边"+result;
        else if(side1==side2 || side2==side3)
            return "等腰"+result;
        else if(side1*side1+side2*side2==side3*side3)
            return "直角"+result;
        else
            return "普通"+result;
    }
    
    public static boolean Check(int num) //检验输入的数据是否属于[1,100]
    {
        if(num<1 || num>100)
        {
            System.out.println("边的值不在范围内!");
            return false;
        }
        return true;
    }

    public static void main(String[] args) 
    { 
        while(true)
        {
            Scanner scanner=new Scanner(System.in);
            int side1=0,side2=0,side3=0;
            boolean flag=true;  //用于标记输入的数据是否合法
            System.out.println("请输入三角形的三条边");
            try{        //捕获输入异常
                side1=scanner.nextInt();
                side2=scanner.nextInt();
                side3=scanner.nextInt();
            }
            catch(InputMismatchException e)  //显示输入异常
            {
                flag=false;
                System.out.println("请输入整数!");
            }
            if(flag)  //若输入有误则直接退出
                if(Check(side1) && Check(side2) && Check(side3))
                    System.out.println(Triangle(side1,side2,side3));
        }
    }
}

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

技术分享

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

程序图节点

DD-路径

1,2

A

3

B

4

C

5

D

6

E

7

F

8,9

G

10

H

11

I

12,13,14

J

15,16,17

K

18,19,20

L

21

M

 

(I)语句覆盖:

A-B-C-D-E-F-M和A-B-C-D-E-G-M

和A-B-C-D-H-I-M和A-B-C-D-H-J-M

和A-B-C-K-M和A-B-L-M

测试用例:

用例ID

输入值

执行路径

预期输出

a

b

c

result

1

3

3

3

A-B-C-D-E-F-M

等边三角形

2

3

3

4

A-B-C-D-E-G-M

等腰三角形

3

3

4

5

A-B-C-D-H-I-M

直角三角形

4

3

4

6

A-B-C-D-H-J-M

一般三角形

5

1

1

3

A-B-C-K-M

不构成三角形

6

101

99

99

A-B-L-M

边的值不在范围内!

 

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

A-B-C-D-E-F-M和A-B-C-D-E-G-M

和A-B-C-D-H-I-M和A-B-C-D-H-J-M

和A-B-C-K-M和A-B-L-M

测试用例:

 

用例ID

输入值

执行路径

预期输出

a

b

c

result

1

3

3

3

A-B-C-D-E-F-M

等边三角形

2

3

3

4

A-B-C-D-E-G-M

等腰三角形

3

3

4

5

A-B-C-D-H-I-M

直角三角形

4

3

4

6

A-B-C-D-H-J-M

一般三角形

5

1

1

3

A-B-C-K-M

不构成三角形

6

101

99

99

A-B-L-M

边的值不在范围内!

 

(III)路径覆盖:

A-B-C-D-E-F-M和A-B-C-D-E-G-M

和A-B-C-D-H-I-M和A-B-C-D-H-J-M

和A-B-C-K-M和A-B-L-M

测试用例:

用例ID

输入值

执行路径

预期输出

a

b

c

result

1

3

3

3

A-B-C-D-E-F-M

等边三角形

2

3

3

4

A-B-C-D-E-G-M

等腰三角形

3

3

4

5

A-B-C-D-H-I-M

直角三角形

4

3

4

6

A-B-C-D-H-J-M

一般三角形

5

1

1

3

A-B-C-K-M

不构成三角形

6

101

99

99

A-B-L-M

边的值不在范围内!

 

(IV)条件覆盖:各个条件取真或假的可能至少执行一次

 

编号

a>=1

a<=100

b>=1

b<=100

c>=1

c<=100

 

a>=1 &&a<=100&&b>=1&&b<=100&&c>=1&&c<=100

覆盖路径

1

T

F

F

F

F

F

F

B-C

2

T

T

F

F

F

F

F

B-L

3

T

T

T

F

F

F

F

B-L

4

T

T

T

T

F

F

F

B-L

5

T

T

T

T

T

F

F

B-L

6

T

T

T

T

T

T

F

B-L

7

T

T

T

T

T

T

T

B-C

总共2^6总选择

 

编号

a<b+c

b<a+c

c<a+b

a<b+c &&b<a+c&& c<a+b

覆盖路径

1

T

F

F

F

C-K

2

T

T

F

F

C-K

3

T

T

T

T

C-D

4

T

F

T

F

C-K

5

F

F

F

F

C-K

6

F

T

F

F

C-K

7

F

F

T

F

C-K

8

F

T

T

F

C-K

 

 

编号

a==b

a==c

b==c

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

覆盖路径

1

T

F

F

T

D-E

2

T

T

F

T

D-E

3

T

T

T

T

D-E

4

T

F

T

T

D-E

5

F

F

F

F

D-H

6

F

T

F

T

D-E

7

F

F

T

T

D-E

8

F

T

T

T

D-E

 

 

编号

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-F

 

编号

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

H-I

2

T

T

F

T

H-I

3

T

T

T

T

H-I

4

T

F

T

T

H-I

5

F

F

F

F

H-J

6

F

T

F

T

H-I

7

F

F

T

T

H-I

8

F

T

T

T

H-I

 

测试用例:

用例ID

输入值

执行路径

预期输出

a

b

c

result

1

3

3

3

A-B-C-D-E-F-M

等边三角形

2

3

3

4

A-B-C-D-E-G-M

等腰三角形

3

3

4

5

A-B-C-D-H-I-M

直角三角形

4

3

4

6

A-B-C-D-H-J-M

一般三角形

5

1

1

3

A-B-C-K-M

不构成三角形

6

101

99

99

A-B-L-M

边的值不在范围内!

共2^17种

 

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

import static org.junit.Assert.*;

 

import org.junit.BeforeClass;

import org.junit.Test;

 

public class test1Test {

 

    @BeforeClass

    public static void setUpBeforeClass() throws Exception {

    }

 

    @Test

    public final void testTriangle() {

       //fail("Not yet implemented"); // TODO

       assertEquals("等边三角形",test1.triangle(3,3,3));

       assertEquals("等腰三角形",test1.triangle(3,3,4));

       assertEquals("直角三角形",test1.triangle(3,4,5));

       assertEquals("一般三角形",test1.triangle(3,4,6));

       assertEquals("不构成三角形",test1.triangle(1,1,3));

       assertEquals("边的值不在范围内!",test1.triangle(101,99,99)); 

      

    }

 

}

 

 技术分享

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

4、测试小结:

 在本次测试实验中,学会了单元测试框架的使用,对Junit4的开发与使用又有了更深的了解。

实验二+049+尤帆贤