说说覆盖率统计的相关事情

三 8th, 2012

What?

先说说什么是代码覆盖率: 它是反映测试用例对被测软件覆盖程度的重要指标,也是衡量测试工作进展情况的重要指标。它是对测试工作进行量化的重要指标之一。

我们平时所说的测试覆盖率分为三大类:

1. 行覆盖率:     度量被测代码中每个可执行语句是否被执行到

int foo(int a, int b)
{   return  a / b;
}

测试用例:

TeseCase:  a = 10, b = 5

2. 分支覆盖率: 度量程序中每一个判定的分支是否都被测试到

3.  条件覆盖率: 度量判定中的每个子表达式结果true和false是否被测试到

int foo(int a, int b)
{      if (a < 10 || b < 10) // 判定  {         return 0; // 分支一    }     else   {        return 1; // 分支二    }
}
分支覆盖率100%
TestCaes1: a = 5, b = 任意数字  覆盖了分支一
TestCaes2: a = 15, b = 15          覆盖了分支二

条件覆盖率100%
TestCase1: a = 5, b = 5     truetrue
TestCase2: a = 15, b = 15   false, false
我想这里,大家可能会问这样的几个问题。

100%的行覆盖率能证明代码是正确的吗?

100%的条件覆盖能否代表100%的分支覆盖?

当然,答案非常明显,测试覆盖率仅仅能够告诉我们什么没有被测试,根本就回答不了软件是否经过了有效测试!上面条件覆盖的例子都只覆盖率分支一,对于分支二都没有涉及到。

 

WHY

为什么我们要做覆盖率统计?

既然测试覆盖率不能证明代码是正确的,那么它存在又有什么意义了?有过开发,测试经验的同学都能体会到,覆盖率能够帮助我们发现代码的一些问题,如下:

1. 被测系统中有没有存在代码,没有被当前的测试用例集所覆盖的

2. 找出冗余的代码,提高开发质量

3. 可以及时反馈当前系统的测试质量,间接衡量测试的质量。

 

HOW

介绍一个工具:

1. Cobertura的使用步骤:

    a. 插桩: 通过修改指定class文件的字节码来插入统计标签,插桩信息会保存在cobertura.ser中

    b. 部署 :  将插桩完的jar包重新打包,替换掉原来的包

    c. 执行测试件 : 需确保所调用服务与所部署环境的正确对应

    d. 生成报告 : 通过脚本结束服务, 读取cobertura.ser生成报告

2. 需要掌握的插桩命令

    –includeClasses     需要包括的类名

    –excludeClasses    需要排除的类名

    –ignoreTrivial         将set方法,get方法,构造方法排除在统计范围之外

3.  覆盖率报告

     生成报告的命令: sh cobertura_war.sh report

4.  使用工具前,应该知道的事

      A. 你要统计的应用类型: jar包,war包或者是ear包?

      B. 如果是web应用,那么所用的java容器是jetty还是jboss? 启动目录在哪里?

      C. 阅读应用的启动脚本,确定它是如何工作的,使用的是哪个包

      D. 请确定你需要统计覆盖率的范围

      E. 是否需要忽略掉对一些模型的无关代码的统计,例如模型的set,get,构造方法

当然还有很多其他的工具,不过目前在用的就是Cobertura,相关的工具可以去google去搜搜!

 





除非注明,本站文章均为原创。本文基于 BY-NC-SA 协议进行授权,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 metaboy(包含链接).

本文链接地址: http://blog.wangyuxiong.com/archives/51598

订阅本站:http://www.wangyuxiong.com/feed

分类: 工作笔记 测试技术         标签: ,
目前还没有任何评论.

无觅相关文章插件,快速提升流量