实验二+142+王娇

实验二结构性测试(4学时)

一、实验目的

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

二、实验要求

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

三、实验内容

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

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

包括的内容有:

1) 被测原代码

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

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

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

四、实验步骤

1) 被测原代码

 1 package test;
 2 import java.util.Scanner;
 3 
 4 public class TestUtil {
 5 
 6     public static void main(String[] args){
 7         while(true){
 8             System.out.println("请输入三角形的三条边,用空格分割:");
 9             //@SuppressWarnings("resource")    
10             try {
11                 //获取键盘录入
12                 Scanner scanner=new Scanner(System.in);
13                 int a=scanner.nextInt();    
14                 int b=scanner.nextInt();
15                 int c=scanner.nextInt();    
16                 String str=triangle(a,b,c);
17                 System.out.println(str);
18                 } catch (Exception e) {
19                 //捕获运行时异常,当输入有误时,打印异常信息
20                 System.out.println("您的输入有误,请重新输入...");    
21             }    
22         }
23     }
24 
25     public static String triangle(int a, int b, int c){
26         String str=null;
27         if((a>=1&&a<=100)&&(b>=1&&b<=100)&&(c>=1&&c<=100)){
28             if(a<(b+c)&&b<(a+c)&&c<(a+b)){    
29                 if(a==b&&a==c){
30                     str="等边三角形!";
31                 }else if(a==b||a==c||b==c){
32                     str="等腰三角形!";
33                 }else if(a*a+b*b==c*c||b*b+c*c==a*a||c*c+a*a==b*b){
34                     str="直角三角形!";
35                 }else{
36                     str="一般三角形!";
37                 }
38             }else{
39                 str="不能构成三角形!";
40             }
41         }else{
42             str="边的值不在范围内!";
43         }
44         return str;
45     }
46 }
 1 伪代码
 2 Input(a,b,c)        
 3 String str=null;
 4         IF((a>=1 and a<=100) and (b>=1 and b<=100) and (c>=1 and c<=100)){
 5             IF(a<(b+c) and b<(a+c) and c<(a+b)){    
 6                 IF(a==b and a==c){
 7                     str="等边三角形!";
 8                 }ELSE IF(a==b or a==c or b==c){
 9                     str="等腰三角形!";
10                 }ELSE IF(a*a+b*b==c*c or b*b+c*c==a*a or c*c+a*a==b*b){
11                     str="直角三角形!";
12                 }ELSE{
13                     str="一般三角形!";
14                 }
15             }ELSE{
16                 str="不能构成三角形!";
17             }
18         }ELSE{
19             str="边的值不在范围内!";
20         }
21 output(result)

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

 

程序图  :

DD-路径图:

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

(I)语句覆盖:

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

(III)路径覆盖:

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

 

3测试代码

 1 import static org.junit.Assert.assertEquals;
 2 
 3 import org.junit.Test;
 4 
 5 public class JudgeTriangleTest {
 6 
 7     @Test
 8     public void testTriangle() {
 9         String result = null;// 实际结果
10         result = JudgeTriangle.triangle(0, 0, 0);
11         assertEquals("边的值不在范围内!", result);
12         result = JudgeTriangle.triangle(101, 101, 101);
13         assertEquals("边的值不在范围内!", result);
14         result = JudgeTriangle.triangle(5, 1, 1);
15         assertEquals("不能构成三角形!", result);
16         result = JudgeTriangle.triangle(1, 5, 1);
17         assertEquals("不能构成三角形!", result);
18         result = JudgeTriangle.triangle(1, 1, 5);
19         assertEquals("不能构成三角形!", result);
20         result = JudgeTriangle.triangle(5, 5, 5);
21         assertEquals("等边三角形!", result);
22         result = JudgeTriangle.triangle(1, 5, 5);
23         assertEquals("等腰三角形!", result);
24         result = JudgeTriangle.triangle(5, 1, 5);
25         assertEquals("等腰三角形!", result);
26         result = JudgeTriangle.triangle(5, 5, 1);
27         assertEquals("等腰三角形!", result);
28         result = JudgeTriangle.triangle(3, 4, 5);
29         assertEquals("直角三角形!", result);
30         result = JudgeTriangle.triangle(3, 5, 4);
31         assertEquals("直角三角形!", result);
32         result = JudgeTriangle.triangle(5, 3, 4);
33         assertEquals("直角三角形!", result);
34         result = JudgeTriangle.triangle(2, 3, 4);
35         assertEquals("一般三角形!", result);
36     }
37 
38 }

五 、测试小结:

1.测试找到的缺陷清单:无

2. 对源代码的修改建议

    (1)对源代码的修改情况:使用!降低if-else的代码层级

    (2)添加控制程序退出,而不是用while(true)无限循环

3.测试总结与心得体会

   (1)条件覆盖中会随着一个判断语句中条件的增多呈指数上升

     (2)各种覆盖方式容易重合,造成测试冗余。

posted @ 2017-04-14 16:20  王娇(wj)  阅读(151)  评论(0编辑  收藏  举报