代码覆盖率

·

代码覆盖率的工作方式

source code instrumentation - 源代码检测

将检测豫剧添加到源代码中, 并使用正常的编译工具链编译代码生成检测的程序。 这是我们常说的茶庄, gcov 属于这一类的代码覆盖率工具

Runtime instrumentation - 运行时收集

这种方法在代码执行时从运行时环境收集信息以确定覆盖率信息。以我的理解 JaCoCo 和 Coverage 这两个工具的原理属于这一类别。

Intermediate code instrumentation - 中间代码检测

通过添加新的字节码来检测编译后的类文件,并生成一个新的检测类。说实话,我 Google 了很多文章并找到确定的说明哪个工具是属于这一类的。

了解这些工具的基本原理,结合现有的测试用例,有助于正确的选择代码覆盖率工具。比如:

产品的源代码只有 E2E(端到端)测试用例,通常只能选择第一类工具,即通过插桩编译出的可执行文件,然后进行测试和结果收集。 产品的源代码有单元测试用例,通常选择第二类工具,即运行时收集。这类工具的执行效率高,易于做持续集成。

当前主流代码覆盖率工具

代码覆盖率的工具有很多,以下是我用过的不同编程语言的代码覆盖率工具。在选择工具时,力求去选择那些开源、流行(活跃)、好用的工具。

|编程语言 | 代码覆盖率工具 | | C/C++ | Gcov | |Java | JaCoCo| |JavaScript| Istanbul| |Python| Coverage.py| |Golang |cover|