用C语言生成代码覆盖率的方法

目录

  • 1- 需要准备的东西
    • 1.1 工具lcov
    • 1.2 源文件
    • 1.3 改变环境的so包
  • 2- 生成覆盖率报告
    • 2.1 step1: 编译阶段
    • 2.2 step2: 将生成的所需文件放在要执行程序的机器上
    • 2.2 step2: 数据收集与提取阶段
    • 2.3 step3: 报告形成阶段
    • 2.4 step4: lcov生成覆盖率报告结果info文件
    • 2.5 step5: genhtml 命令生成网页版的覆盖率报告文件夹
  • 3- 覆盖率报告结果 CovReport

1- 需要准备的东西

1.1 工具lcov

下载解压安装
我这里用的是 lcov-1.14.tar.gz

解压
tar -xzvf lcov-1.14.tar.gz

安装
cd lcov-1.14
make install

1.2 源文件

工作目录
~/Coverage2023/Code/source/source_dir

要被测试代码覆盖率的源文件 source file

~/Coverage2023/Code/source/source_dir/aaaaa.cpp
~/Coverage2023/Code/source/source_dir/ccccc.cpp
~/Coverage2023/Code/source/source_dir/zzzzz.cpp

1.3 改变环境的so包

临时性的替代当前环境的且含有coverage环境的so包
so包通过编译源代码生成

2- 生成覆盖率报告

2.1 step1: 编译阶段

生成gcno文件 以及临时性的替代当前环境的且含有coverage环境的so包
如果您之前已经获得了所需文件,并且源代码尚未修改,则可以省略该步骤 直接去 2.2 step2 .

`工作目录`
`~/Coverage2023/Code/source/source_dir`

step1.1 在Makefile中以下选项中添加如下参数
(这里我的源文件执行时是通过Makefile 来写的,所以生成带coverage的so包时需要在Makefile中添加相关参数)

在 CFLAGS 和 CPPFLAGS 选项后添加 --coverage 参数
在 LFLAGS 选项后 添加 --coverage -lgcov 参数

CFLAGS = \
        -XXX \
        --coverage \                                            # 添加 --coverage 参数

CPPFLAGS = \
        -XXX \
        --coverage \                                            # 添加 --coverage 参数

LFLAGS = \
        -XXX \
        --coverage \                                          # 添加 --coverage 参数
        -lgcov \                                              # 添加 -lgcov 参数

step1.2 使用 make 来编译

cd ~/Coverage2023/Code/source/source_dir

make

成功后将会生成so包以及源代码对应的gcno文件


so包
~/Coverage2023/CodeBin/lib/lib2023.so

gcno文件
~/Coverage2023/CodeBin/libsource_dir/aaaaa.gcno
~/Coverage2023/CodeBin/libsource_dir/ccccc.gcno
~/Coverage2023/CodeBin/libsource_dir/zzzzz.gcno

到现在为止,需要做代码覆盖率所需要的全部文件就已经准备好了

(1)source file

~/Coverage2023/Code/source/source_dir/aaaaa.cpp
~/Coverage2023/Code/source/source_dir/ccccc.cpp
~/Coverage2023/Code/source/source_dir/zzzzz.cpp

(2)so file

~/Coverage2023/CodeBin/lib/lib2023.so

(3).gcno files

~/Coverage2023/CodeBin/libsource_dir/aaaaa.gcno
~/Coverage2023/CodeBin/libsource_dir/ccccc.gcno
~/Coverage2023/CodeBin/libsource_dir/zzzzz.gcno

2.2 step2: 将生成的所需文件放在要执行程序的机器上

2.2 step2: 数据收集与提取阶段

2.3 step3: 报告形成阶段

2.4 step4: lcov生成覆盖率报告结果info文件

2.5 step5: genhtml 命令生成网页版的覆盖率报告文件夹

3- 覆盖率报告结果 CovReport

将so放在你想执行的测试程序所在的机器

(1)so file
如如下目录

~/CodeCoverage2023
libvast_ufs.so

(2)source file
~/CodeCoverage2023/Code/source_dir

(3).gcno files
~/CodeCoverage2023/CodeBin/libsource_dir

开始步骤

Here are the steps to do code coverage

在需要执行测试程序所在的机器上替换so包

Through this step, we can get the test report
/Code_coverage_UFS/lcov.sh [cov_info_name] [cov_report_name]
~/CodeCoverage2023/lcov.sh [cov_info_name] [cov_report_name]

如果没有输入参数, 那么默认生成的info 文件名字为 coverage.info , 默认生成的覆盖率文件夹名字为 coverage_report

比如 coverage info name:HelloUFS.info report name:HelloUFS_report
/Code_coverage_UFS/lcov.sh HelloUFS.info HelloUFS_Report

我们可能会在很多程序上都测试了代码覆盖率, 现在这些都是独立的,
如果我们需要合并, 形成一份完整的代码覆盖率报告

~/CodeCoverage2023/merge.sh coverage1.info coverage2.info [cov_info_name] [cov_report_name]

你可能感兴趣的:(测试覆盖率)