本关任务:以闯关的模式,让学生在自己设计测试用例的过程中一步一步掌握逻辑覆盖的各个等级。

相关知识

路径覆盖

定义

路径覆盖(Path Coverage)的含义是,选取足够多的测试用例,覆盖程序中所有可能的执行路径。(如果程序图中有环,则要求每个环至少经过一次)。

特点

1.这种覆盖方法可以对程序进行彻底的测试用例覆盖,比前面讲的五种方法的覆盖度都要高。
2.路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。路径覆盖虽然是一种比较强的覆盖,但未必考虑判断语句中条件表达式结果的组合,并不能代替条件覆盖和条件组合覆盖。
3.路径覆盖率的公式:
路径覆盖率 = 被执行到的路径数 / 程序中总的路径数。
4.在有些情况下,一些执行路径是不可能被执行的,如:

  1. if(!A) B++;
  2. if(!A) D--;

这两个语句实际只包括了2条执行路径,即A为真或假时候对B和D的处理,真或假不可能都存在,而路径覆盖测试则认为是包含了真与假的4条执行路径。这样不仅降低了测试效率,而且大量的测试结果的累积,也为排错带来麻烦。

图解

gtest 覆盖率统计 测试覆盖率计算_条件覆盖

若要对如上的程序流程图使用路径覆盖法设计测试用例,则测试用例需覆盖程序中所有可能的执行路径,共有4条:路径abd,路径abe,路径acf,路径acg。

实例

假设需要测试这样的代码:

1. public void func(int A,int B,int X){ 
2. if(A > 1 && B == 0){ 
3. X = X / A; 
4. } 
5. if(A == 2 || X > 1){ 
6. X = X + 1; 
7. } 
8. System.out.println("结束"); 
9. } 

画出该程序的流程图:

gtest 覆盖率统计 测试覆盖率计算_gtest 覆盖率统计_02

由流程图可知,该例子中共有4条执行路径,分别为路径

总结

路径覆盖是白盒测试逻辑覆盖的6种覆盖标准中最强的,测试了程序中所有可能的执行路径。但是,路径覆盖需要设计大量、复杂的测试用例,使得工作量呈指数级增长。路径覆盖虽然是一种比较强的覆盖,但未必考虑判断语句中条件表达式结果的组合,并不能代替条件覆盖和条件组合覆盖。

作答要求

请首先仔细阅读并学习、理解上方相关知识,然后完成右侧的选择题任务。作答完毕,通过点击“测评”,可以验证答案的正确性。

  • 1、
    给定如下案例描述:
    编写程序,要求输入读入某汽车销售人员的销售数(以台 计)和每台销售的基础提成数(元)、以及销售人员工种(正式工或临时工),计算并输出他的销售提成。若销售人员销售超过40台且基础提成超过400元,则超过部分按基础提成的1.5倍的来计算。超过50台,如果是正式员工,则超过50台的部分按基础提成的2倍的来计算,否则销售提成仍按照基础提成的1.5倍的来计算。
    使用路径覆盖法设计测试用例,要求达到100%的路径覆盖。
    为达到100%的路径覆盖,至少需要设计几个测试用例? A、 2 B、 3 C、 4 D、 5
  • 2、
    针对下面的代码:
1. //判断一个数是否为水仙花数,若是水仙花数则返回1,否则返回0 
2. public int IsNarcissisticNumber(int number) 
3. { 
4. if(number <= 99 || number >= 1000) 
5. { 
6. return 0; 
7. } 
8. int a = number%10; 
9. int b = number/10%10; 
10. int c = number/100%10; 
11. if(number == a*a*a+b*b*b+c*c*c) 
12. return 1; 
13. return 0; 
14. } 

以下哪种测试用例的设计满足路径覆盖?

    •  A、 
    TeseCase1: num=99, result=0
     TeseCase2: num=1000, result=0
     TeseCase3: num=100, result=0•  B、 
    TeseCase1: num=99, result=0
     TeseCase2: num=1000, result=0
     TeseCase3: num=100, result=1•  C、 
    TeseCase1: num=99, result=0
     TeseCase2: num=153, result=1
     TeseCase3: num=100, result=0•  D、 
    TeseCase1: num=99, result=0
     TeseCase2: num=153, result=1
     TeseCase3: num=1000, result=0