BullseyeCoverage覆盖率统计

BullseyeCoverage(以下称ccvoer)是由Bullseye提供的C/C++代码覆盖率测试工具,可统计:函数、分支、类覆盖率,可用于单测,自动化测试等测试阶段的覆盖率统计工作中,是一种有效的发现未被测试覆盖的代码的手段

原理

ccover采用的是先对代码进行插桩,然后收集覆盖数据,最后分析覆盖率原理的技术。
其工作原理是:
编译插桩:针对不同的编译器,设计一个和真实编译器名字相同的拦截器,这些拦截器文件存放在 ccover的bin目录下。当覆盖编译开关打开时,文件在编译过程中将首先被这些拦截器所拦截,而不是由真实的编译器去编译源代码。在这个拦截过程中,拦截器将一系列探针代码插入到C/C++源代码中,即插桩过程,然后带有桩代码的文件再次通过真实的编译器生成可执行二进制文件和覆盖分析文件(test.cov),此时的二进制文件具备被ccover分析的条件,而插桩信息被记录在test.cov中。在当覆盖编译开关关闭时,这些拦截器将直接调用真实的编译器而不进行代码插桩的过程。
收集覆盖数据:运行测例过程中,被插桩后的二进制文件在执行时会将覆盖率信息写入test.cov。
分析覆盖率:采用covsrc等命令基于test.cov获取覆盖率统计数据。

使用步骤

  1. 下载源码并安装ccover
  2. 声明ccover和使用的编译器路径
  3. 开启覆盖率编译开关
    cov01 -1
  4. 声明覆盖分析文件的输出路径和名称,一般为test.cov
  5. 获取被测试代码,编译
  6. 关闭覆盖率编译开关
    cov01 -0
  7. 将编译后的可执行文件和输出的test.cov复制到测试代码目录下
  8. 声明覆盖数据写入文件路径(复制后的test.cov)
  9. 执行测试代码,覆盖率信息写入test.cov(如果不复制test.cov,会提示生成和使用的test.cov为同一文件)
  10. 基于test.cov文件统计覆盖率

ccover命令

covdir 查看文件夹覆盖率
covsrc
查看文件覆盖率
covfn
查看函数覆盖率
covclass
查看类覆盖率
covbr
查看分支覆盖率

covselect
文件过滤

–> 没有被执行到的函数、条件判断、switch、while/for、catch等
X 某个函数已被执行,并支持classs内的函数
T/t 某处条件判断为真
F/f 某处条件判断为假
TF/tf 某处条件判断时,真假值都成立过
K 某处条件为常量