实验二+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)各种覆盖方式容易重合,造成测试冗余。