测试基础之:测试覆盖率
一、定义
测试覆盖率,通常被用来衡量测试的充分性和完整性。根据偏向对象的不同,分为偏向项目的需求覆盖率,和偏向技术的代码覆盖率。需求覆盖率,是指将需求和测试建立一对多的映射关系,确保覆盖每个需求。一般采用 ALM、Doors 和 TestLink 等需求管理工具建立映射关系,计算覆盖率。代码覆盖率,指计算至少被执行了一次的条目数占整个条目数的百分比。其中,若条目为语句,对应代码行覆盖率。若条目数为函数,对应函数覆盖率。若条目数为路径,对应路径覆盖率。
特别说明:
1. 大多数情况下提及的测试覆盖率,通常默认指代码覆盖率,不是需求覆盖率。
2. 在安全等级较高的软件中,满足修订条件/判定覆盖(MC/DC-Modified Condition/Decision Coverage)是一项强制性要求(由 RTCA/EUROCAE 在 1992 年联合颁布的一份针对机载设备的软件开发的指导性文件中首次提出,用于提高航空软件测试中的覆盖率水平)。
二、常用方法
1、JaCoCo
JaCoCo 是一款针对 Java 代码的开源覆盖率工具。使用方法很灵活,可以很方便的嵌入到 Ant、Maven 中,并且和很多主流的持续集成工具以及静态检查工具,比如 Jekins 和 Sonar 等都有较好的集成。JaCoCo 覆盖率报告如下图所示。
2、工具原理
统计代码覆盖率,最基本的方法就是注入(Instrumentation)。往被测代码中自动插入用于覆盖率统计的探针代码(Probe)保证插入的探针代码不会给源代码带来任何影响。
基于 Java 代码及注入目标的不同,一般分为源代码注入(Source Code)和字节码注入(Byte Code)。基于 JVM 自身的特性及执行效率,最常采用 ASM 技术注入字节码。
基于注入的时间点不同,字节码注入也分为 On-The-Fly 模式(不用修改源代码,不用提前进行字节码插桩,运行环境需允许使用 JavaAgent。可以在系统不停机的情况下,实时收集代码覆盖率)和 Offline 模式(不用修改源代码,在测试开始之前先对文件进行插桩,并事先生成插过桩的 class 文件,不支持 JavaAgent 运行环境,以及无法使用自定义类装载器的场景。无法实时获取代码覆盖率,仅能在系统停机时下获取)。
特别说明:
ASM 是一个可以分析和操作字节码的框架,可以生产 class 文件,也可以在 class 被加载入 JVM 前动态改变类的行为。
👉如果在阅读过程中有任何疑问,欢迎在评论区留言参与讨论!
版权声明: 本文为 InfoQ 作者【甜甜的白桃】的原创文章。
原文链接:【http://xie.infoq.cn/article/45b0d63de841eb5ae144399bd】。文章转载请联系作者。
评论