代码覆盖率
Gcovr Guide
测量源码中哪些语句在测试中被执行,哪些语句尚未被执行
为什么要测量代码覆盖率
测试可以提高软件版本的质量和可预测性,测量代码覆盖率的原因:
- 测试用例对源代码的测试效果
- 是否进行了足够的测试
- 保证软件生命周期内保持测试质量
代码覆盖率的指标种类
- 函数覆盖率
- 语句覆盖率
- 分支覆盖率:多少控制结构的分支(例如if语句)被执行
- 条件覆盖率:多少布尔子表达式被测试为真值和假值
- 行覆盖率
代码覆盖率工作原理
1. Source code instrumentation——源代码检测
将检测语句添加到源代码中,并使正常的编译工具编译代码以生成检测是程序集(插桩),Gcov属于这一类
2. Runtime instrumentation——运行时收集
在代码执行时从运行环境收集信息以确定覆盖率信息,JaCoCo和Coverage
3. Intermediate code instrumentation——中间代码检测
添加新的字节码检测编译后的类文件,并生成一个新的检测类
工作原理
- 在GCC编译时加入覆盖率编译选项(
-fprofile-arcs
、-ftest-coverage
),生成可执行文件和*.gcno - 运行(测试)可执行文件,生成*.gcda数据文件
- 将*.gcno和*.gcda生成gcov文件,最后生成代码覆盖率
主流代码覆盖率测试工具
编程语言 | 代码覆盖率工具 |
---|---|
C/C++ | Gcov |
Java | JaCoCo |
JavaScript | Istanbul |
Python | Coverage.py |
Golang | cover |
参考
https://www.lambdatest.com/blog/code-coverage-vs-test-coverage/
https://www.atlassian.com/continuous-delivery/software-testing/code-coverage