实验二+052+张博勋

一、实验目的

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

二、实验要求

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

三、实验内容

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

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

包括的内容有:

1) 被测原代码

package main;
import java.util.*;
public class Demo {
    public static String triangle(int a,int b,int c){
        String result;
     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 || a==c||b==c){
                    if(a==b &&b==c&&a==c)
                    result = "等边三角形";
                    else
                    result = "等腰三角形";                      
                }else if(a*a+b*b==c*c || b*b+c*c==a*a || a*a+c*c==b*b){
                    result = "直角三角形";
                }else{
                    result = "一般三角形";
                }  
            }else{
                result = "不构成三角形";
            }
        }else{
            result = "边的值不在范围内!";
        }
     return result;
    }
    public static void main(String[] args) {
    System.out.println("设计三角形问题的程序");
    Scanner sc=new Scanner(System.in);
    while(true)
    {
        try{
            System.out.println("请输入三角形的三条边:");
            int a=sc.nextInt();
            int b=sc.nextInt();
            int c=sc.nextInt();
            System.out.println(triangle(a,b,c));
        }catch(Exception e){
           e.printStackTrace();
        }
  
    }
 }
  
}

  

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、测试小结:

  •      测试找到的缺陷清单
  •      对源代码的修改建议:
  •      测试总结与心得体会:

    (1)条件覆盖中会随着一个判断语句中条件的增多呈指数上升,很难手工全测试完。(2)各种覆盖方式容易重合,造成测试冗余。

原文地址:https://www.cnblogs.com/zbxun/p/6708340.html