实验二+162+张倩
一、实验目的
掌握基于覆盖理论与基本路径的基本白盒测试方法和实践
二、实验要求
运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。
三、实验内容
根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。
所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。
包括的内容有:
1) 被测原代码:
1 //package Java_1; 2 3 4 5 import java.util.Scanner; 6 7 public class TriangleExp1 { 8 // 主函数 9 public static void main(String[] args) { 10 int a[] = inPut(); 11 System.out.println(triangle(a[0], a[1], a[2])); 12 } 13 14 // 输入 15 public static int[] inPut() { 16 int arr[] = new int[3]; 17 System.out.println("请输入三角形的三条边"); 18 Scanner scanner = new Scanner(System.in); 19 try { 20 arr[0] = scanner.nextInt(); 21 arr[1] = scanner.nextInt(); 22 arr[2] = scanner.nextInt(); 23 scanner.close(); 24 } catch (Exception e) { 25 System.out.println("输入有误!!!"); 26 System.exit(-1); 27 } 28 return arr; 29 } 30 31 // 判断三角形的类型 32 public static String triangle(int a, int b, int c) { 33 if ((a < 1 || a > 100) || (b < 1 || b > 100) || (c < 1 || c > 100)) { 34 return "边的值不在范围内!"; 35 } else if ((a >= b + c) || (b >= a + c) || (c >= a + b)) { 36 return "不构成三角形!"; 37 } else if (a == b || a == c || b == c) { 38 if (a == b && a == c) { 39 return "等边三角形!"; 40 } else { 41 return "等腰三角形!"; 42 } 43 } else if (a * a == b * b + c * c || b * b == a * a + c * c || c * c == b * b + a * a) { 44 return "直角三角形"; 45 } else { 46 return "一般三角形"; 47 } 48 } 49 }
2)依据覆盖技术,测试用例列表:
(1)程序流程图:
(2)控制流图:
(2-1)语句覆盖:
(2-2)分支覆盖:
(2-3)路径覆盖:
(2-4)条件覆盖:
测试用例:
3)相应Junit测试脚本、执行结果
package t; import static org.junit.Assert.*; import org.junit.Test; public class TriangleTest { @Test public void test() { fail("Not yet implemented"); Triangle t=new Triangle(); assertEquals("边的值不在范围内", t.triangle(101, 99, 99)); assertEquals("不能构成三角形", t.triangle(2, 99, 2)); assertEquals("等边三角形", t.triangle(3,3, 3)); assertEquals("等腰三角形", t.triangle(3, 3, 4)); assertEquals("直角三角形", t.triangle(3, 4, 5)); assertEquals("一般三角形", t.triangle(3, 5, 6)); } }
4)给出测试参数化和打包测试的脚本,并生成执行结果
四、测试小结:
(1)测试找到的缺陷清单:没有找到缺陷
(2)对源代码的修改建议 :
希望可以添加能够反复输入三角形三条边的值的功能,目前的代码运行后只能输入一次三条边的值,再次输入需要重新运行代码,希望能改进代码实现运行之后能多次输入三条边的值
(3)测试总结与心得体会
通过对逻辑覆盖测试和基本路径测试的完整学习加上本次实验的练习,我有如下总结:
针对逻辑覆盖测试:
1.满足条件组合覆盖的测试用例一定满足语句覆盖、判定覆盖、条件覆盖和条件判定覆盖
2.满足条件判定覆盖的测试用例一定满足语句覆盖、条件覆盖和判定覆盖
3.满足判定覆盖的测试用例一定满足语句覆盖
4.满足条件覆盖的测试用例不一定满足语句覆盖计判定覆盖
针对基本路径测试:
基本路径测试的步骤大致可以归纳为:
1.依据源程序画出控制流图
2.依据画出控制流图计算环路复杂度
3.找出图中的各条独立路径
4.设计覆盖各条独立路径的测试用例
通过对Junit的学习和使用知道了Junit的目的不仅仅是测试程序,Junit从根本上督促自己设计程序结构,并且在TestCase建立后,后面的测试就会自动奖项测试了,提高了测试效率并且保证了测试的品质