实验二+161+张丽霞

 

一、实验目的

 

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

 

二、实验要求

 

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

 

三、实验内容

 

(1)被测源代码:

 1     public static String triangle(int a, int b, int c){
 2         String result;
 3         if (a >= 1 && a <= 100 && b >= 1 && b <= 100 && c >= 1 && c <= 100){
 4             if (a<(b + c) && b < (a + c) && c < (a + b)){
 5                 if (a == b && b == c)  {
 6                     result = "等边三角形";
 7                 }
 8                 else if (a == b || a == c || b == c){
 9                     result = "等腰三角形";
10                 }
11                 else if (a * a == (b * b + c * c) || b * b == (a * a + c * c) || c * c ==( a * a + b * b)){
12                     result = "直角三角形";
13                 }
14                 else{
15                     result = "一般三角形";
16                 }
17             }
18             else{
19                 result = "不构成三角形";
20             }
21         }
22         else{
23             result = "边的值不在范围内";
24         }
25         return result;
26     }

 

程序图:

 

DD路径图:

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

程序图节点

DD-路径

2

A

3

B

4

C

5

D

6,7

E

8

F

9,10

G

11

H

12,13

I

14,15,16

J

17

K

18,19,20

L

21

M

22,23,24

N

25

O

26

P

 

(2)测试用例:

I)语句覆盖:

ABNOPABCDEKMOPABCDFGKMOP

ABCDFHIKMOPABCDFHJKMOPABCLMOP

测试用例:

用例ID

输入值

执行路径

预期输出

a

b

c

result

1

101

99

98

A-B-N-O-P

边的值不在范围内

2

6

6

6

A-B-C-D-E-K-M-O-P

等边三角形

3

6

6

8

A-B-C-D-F-G-K-M-O-P

等腰三角形

4

3

4

5

A-B-C-D-F-H-I-K-M-O-P

直角三角形

5

3

5

6

A-B-C-D-F-H-J-K-M-O-P

一般三角形

6

11

2

3

A-B-C-L-M-O-P

不构成三角形

 

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

ABNOPABCDEKMOPABCDFGKMOP

ABCDFHIKMOPABCDFHJKMOPABCLMOP

测试用例:

用例ID

输入值

执行路径

预期输出

a

b

c

result

1

0

2

5

A-B-N-O-P

边的值不在范围内

2

5

5

5

A-B-C-D-E-K-M-O-P

等边三角形

3

4

4

3

A-B-C-D-F-G-K-M-O-P

等腰三角形

4

6

8

10

A-B-C-D-F-H-I-K-M-O-P

直角三角形

5

9

7

6

A-B-C-D-F-H-J-K-M-O-P

一般三角形

6

1

1

2

A-B-C-L-M-O-P

不构成三角形

 

III)路径覆盖:

ABNOPABCDEKMOPABCDFGKMOP

ABCDFHIKMOPABCDFHJKMOPABCLMOP

测试用例:

用例ID

输入值

执行路径

预期输出

a

b

c

result

1

101

101

101

A-B-N-O-P

边的值不在范围内

2

7

7

7

A-B-C-D-E-K-M-O-P

等边三角形

3

8

8

9

A-B-C-D-F-G-K-M-O-P

等腰三角形

4

3

4

5

A-B-C-D-F-H-I-K-M-O-P

直角三角形

5

4

5

6

A-B-C-D-F-H-J-K-M-O-P

一般三角形

6

2

1

3

A-B-C-L-M-O-P

不构成三角形

 

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

F

F

F

F

F

F

F

B-N

2

T

F

F

F

F

F

F

B-N

3

T

T

F

F

F

F

F

B-N

4

T

T

T

F

F

F

F

B-N

5

T

T

T

T

F

F

F

B-N

6

T

T

T

T

T

F

F

B-N

7

T

T

T

T

T

T

F

B-N

8

T

T

T

T

T

T

T

B-C

 

 

编号

a<(b+c)

b<(a+c)

c<(a+b)

a<(b+c) &&b<(a+c)&& c<(a+b)

覆盖路径

1

F

F

F

F

C-L-M

2

T

F

F

F

C-L-M

3

T

T

F

F

C-L-M

4

T

T

T

T

C-D

5

F

F

T

F

C-L-M

6

F

T

T

F

C-L-M

7

T

F

T

F

C-L-M

8

F

T

F

F

C-L-M

 

编号

a==b

b==c

a==b &&b==c

覆盖路径

1

T

T

T

D-E-K

2

T

F

F

D-F

3

F

T

F

D-F

4

F

F

F

D-F

 

 

编号

a==b

a==c

b==c

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

覆盖路径

1

T

F

F

T

F-G-K

2

F

T

F

T

F-G-K

3

F

F

T

T

F-G-K

4

F

F

F

F

F-H

 

编号

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

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

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

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

覆盖路径

1

T

F

F

T

H-I-K

2

F

T

F

T

H-I-K

3

F

F

T

T

H-I-K

4

F

F

F

F

H-J-K

测试用例:

用例ID

输入值

执行路径

预期输出

a

b

c

result

1

101

100

99

A-B-N-O-P

边的值不在范围内

2

9

9

9

A-B-C-D-E-K-M-O-P

等边三角形

3

9

9

10

A-B-C-D-F-G-K-M-O-P

等腰三角形

4

3

4

5

A-B-C-D-F-H-I-K-M-O-P

直角三角形

5

6

4

7

A-B-C-D-F-H-J-K-M-O-P

一般三角形

6

1

21

20

A-B-C-L-M-O-P

不构成三角形

 

(3)相应Junit测试脚本:

 

 1 package softtest;
 2 
 3 import static org.junit.Assert.*;
 4 import org.junit.Before;
 5 import org.junit.Test;
 6 
 7 public class JudgeTriangleTest {
 8 
 9     @Before
10     public void setUp() throws Exception {
11 
12     }
13 
14     @Test
15     public void testJudge() {
16         String[] str1={"2","3","4"};
17         String[] str2={"1","2","3","4"};
18         String[] str3={"1","2","%"};
19         assertTrue("true",JudgeTriangle.Judge(str1));
20         assertFalse("false",JudgeTriangle.Judge(str2));
21         assertFalse("false",JudgeTriangle.Judge(str3));
22         //fail("Not yet implemented");
23     }
24 
25     @Test
26     public void testTriangle() {
27         assertEquals(JudgeTriangle.triangle(92, 101,99),"边的值不在范围内");
28         assertEquals(JudgeTriangle.triangle(0, 1,2),"边的值不在范围内");
29         assertEquals(JudgeTriangle.triangle(99,98,102),"边的值不在范围内");
30         assertEquals(JudgeTriangle.triangle(6, 6, 6),"等边三角形");
31         
32         assertEquals(JudgeTriangle.triangle(3, 3, 5),"等腰三角形");
33         assertEquals(JudgeTriangle.triangle(3, 5, 5),"等腰三角形");
34         assertEquals(JudgeTriangle.triangle(6, 5, 6),"等腰三角形");
35         
36         assertEquals(JudgeTriangle.triangle(3, 4, 5),"直角三角形");
37         assertEquals(JudgeTriangle.triangle(10, 6, 8),"直角三角形");
38         assertEquals(JudgeTriangle.triangle(12, 20, 16),"直角三角形");
39         
40         assertEquals(JudgeTriangle.triangle(2, 4, 5),"一般三角形");
41         assertEquals(JudgeTriangle.triangle(1, 1, 2),"不构成三角形");
42         
43         //fail("Not yet implemented");
44     }
45 }

 

 

 

4测试小结:

 

(1对源代码的修改建议:

 

I)程序是一直处于循环状态,建议增加退出循环的功能,而不是要我关闭程序才退出;

 

II)java中可以采用try catch来判断输入的是否是整数类型和提示异常;

 

III)建议给输入的三条边排序,这样会减少很多判断条件。

 

(2)测试找到的缺陷清单:无。

 

(3)总结与心得体会:

 

I)当判断条件越来越多时,条件覆盖就很难完全测完;

 

II)在画完流程图,观察后发现满足语句覆盖的测试用例就可以满足路径覆盖、判定覆盖、组合覆盖等。所以在测试过程中,有可能会出现多种覆盖方式的测试路径一样。

 

III)在写程序时,一直只想着程序可以编译成功,正确运行就可以了,而很多小细节都不会去考虑到。有时候判断条件有很多时,自己运行正常了就觉得程序写好,而在测试时,如在做条覆盖时,测试人员要对每一个判断条件进行真与假的执行一遍设计测试用例,就要考虑很多的情况。

 

posted @ 2017-04-14 15:01  wowowowww  阅读(232)  评论(0编辑  收藏  举报