一、实验目的
掌握基于覆盖理论与基本路径的基本白盒测试方法和实践
二、实验要求
运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。
三、实验内容
根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。
所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。
包括的内容有:
1) 被测原代码
1 import java.util.InputMismatchException; 2 import java.util.Scanner; 3 4 public class TestDemo { 5 6 public static String Triangle(int side1,int side2,int side3)//判断是否构成三角形及三角形的种类 7 { 8 int temp; 9 if(side1>side2) {temp=side1;side1=side2;side2=temp;}//排个序让小数在前,大数在后(不能保证前两个数的顺序) 10 if(side2>side3) {temp=side2;side2=side3;side3=temp;} 11 12 String result="三角形"; 13 if(side1+side2<=side3) 14 return "不构成"+result; 15 else if(side1==side2 && side2==side3) 16 return "等边"+result; 17 else if(side1==side2 || side2==side3) 18 return "等腰"+result; 19 else if(side1*side1+side2*side2==side3*side3) 20 return "直角"+result; 21 else 22 return "普通"+result; 23 } 24 25 public static boolean Check(int num) //检验输入的数据是否属于[1,100] 26 { 27 if(num<1 || num>100) 28 { 29 System.out.println("边的值不在范围内!"); 30 return false; 31 } 32 return true; 33 } 34 35 public static void main(String[] args) 36 { 37 while(true) 38 { 39 Scanner scanner=new Scanner(System.in); 40 int side1=0,side2=0,side3=0; 41 boolean flag=true; //用于标记输入的数据是否合法 42 System.out.println("请输入三角形的三条边"); 43 try{ //捕获输入异常 44 side1=scanner.nextInt(); 45 side2=scanner.nextInt(); 46 side3=scanner.nextInt(); 47 } 48 catch(InputMismatchException e) //显示输入异常 49 { 50 flag=false; 51 System.out.println("请输入整数!"); 52 } 53 if(flag) //若输入有误则直接退出 54 if(Check(side1) && Check(side2) && Check(side3)) 55 System.out.println(Triangle(side1,side2,side3)); 56 } 57 } 58 }
2)依据覆盖技术,测试用例列表:
程序图:
DD路径图:
DD-路径(只压缩链路经)
语句覆盖:
A-B-C-P;A-B-D-E-F-P;
A-B-D-E-G-H-P;A-B-D-E-G-I-M-P;
A-B-D-E-G-I-J-K-P;
分支覆盖:
A-B-C-P;A-B-D-E-F-P;
A-B-D-E-G-H-P;A-B-D-E-G-I-M-P;
A-B-D-E-G-I-J-K-L-O-P;
路径覆盖:
A-B-C-P;A-B-D-E-F-P;
A-B-D-E-G-H-P;A-B-D-E-G-I-M-P;
A-B-D-E-G-I-J-K-P;A-B-D-E-G-I-J-L-N-P;
A-B-D-E-G-I-J-L-O-P;
条件覆盖:
测试用例:
Junit测试脚本:
1 package test; 2 import static org.junit.Assert.*; 3 import org.junit.Before; 4 import org.junit.BeforeClass; 5 import org.junit.Test; 6 7 /* 8 * @author lxt 9 * @date 2017年4月14日上午12:28:04 10 * @Param 11 */ 12 13 public class TestDemoTest { 14 15 public static void setUpBeforeClass() throws Exception { 16 } 17 18 @Before 19 public void setUp() throws Exception { 20 } 21 22 @Test 23 public void testTriangle() { 24 // fail("Not yet implemented"); 25 String result =null; 26 result=TestDemo.Triangle(7, 8, 21); 27 assertEquals("不构成三角形", result); 28 result=TestDemo.Triangle(8, 8, 10); 29 assertEquals("等腰三角形", result); 30 result=TestDemo.Triangle(6, 8, 10); 31 assertEquals("直角三角形", result); 32 result=TestDemo.Triangle(6, 7, 9); 33 assertEquals("普通三角形",result); 34 result=TestDemo.Triangle(6, 6, 10); 35 assertEquals("等腰三角形",result); 36 result=TestDemo.Triangle(8, 4, 20); 37 assertEquals("不构成三角形",result); 38 result=TestDemo.Triangle(4, 8, 64); 39 assertEquals("不构成三角形",result); 40 result=TestDemo.Triangle(8, 8, 8); 41 assertEquals("等边三角形",result ); 42 } 43 44 @Test 45 public void testCheck() { 46 // fail("Not yet implemented"); 47 boolean result; 48 result=TestDemo.Check(202); 49 assertEquals(false, result); 50 result=TestDemo.Check(155); 51 assertEquals(false, result); 52 result=TestDemo.Check(381); 53 assertEquals(false, result); 54 } 55 56 }
运行结果:
四、测试小结:
对代码进行了测试后,代码测试通过能够正常运行,并且对判断条件进行了优化,先将边的大小进行排序使判断较少,执行的效率提高。
在本次测试实验中,学会了单元测试框架的使用,对Junit4的开发与使用又有了更深的了解。
但在写测试用例时未做到全面覆盖,在测试时应当尽可能多的使测试更加完整。
时间: 2024-12-28 18:34:03