C代码覆盖率测试工具 Gcov及生成报告

0. 概念

代码覆盖率测试反映了测试的广度与深度,量化了测试和开发质量,是十分有必要的。

1. Gcov使用

示例代码:
say.c

#include <stdio.h>

int say(char* what) {
    printf("------ %s\n", what);
    return 0;
}

main.c

#include <stdio.h>

extern int say(char*);

int main(int argc, const char* argv[]) {
    if (argv[1]) {
        say("hello");
    } else {
        say("bye");
    }
    return 0;
}
1. 直接编译

添加 -fprofile-arcs -ftest-coverage 编译参数编译程序,生成可执行程序和 *.gcno 文件:

PS G:\Gcc> gcc -fprofile-arcs -ftest-coverage -O0 say.c main.c
PS G:\Gcc> wsl
cs@cspc:/mnt/g/Gcc$ ls
a.exe  main.c  main.gcno  say.c  say.gcno
2. 数据收集

运行可执行文件,生成 *.gcda :

PS G:\Gcc> .\a.exe
------ bye
PS G:\Gcc> wsl
cs@cspc:/mnt/g/Gcc$ ls
a.exe  main.c  main.gcda  main.gcno  say.c  say.gcda  say.gcno
3. 合成最终的gcov文件

生成了gcda文件后可以使用命令将这些文件合成最终的gcov文件,运行结束后会生成存有具体覆盖率信息的文件*.cpp.gcov:

PS G:\Gcc> gcov main.c .\say.c
.\say.gcno:'main' has arcs to entry block
.\say.gcno:'main' has arcs from exit block
File 'main.c'
Lines executed:80.00% of 5
Creating 'main.c.gcov'

File 'say.c'
Lines executed:100.00% of 3
Creating 'say.c.gcov'

*.cpp.gcov中代码行显示"1"代表有覆盖,"#####"则显示没有覆盖:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a517x6ZK-1635512399351)(C:/Users/cs/Desktop/Snipaste_2021-10-29_20-06-23.jpg)]

2. Gcovr生成报告

Gcovr生成 GCC 代码覆盖率报告。
Gcovr 作为 Python 包提供,可以通过 pip 安装:

pip install gcovr

1. 生成代码覆盖率列表报告

gcovr -r . : 对当前目录递归执行gcove生成代码覆盖率报告

PS G:\Gcc> gcovr -r .
------------------------------------------------------------------------------
                           GCC Code Coverage Report
Directory: .
------------------------------------------------------------------------------
File                                       Lines    Exec  Cover   Missing
------------------------------------------------------------------------------
main.c                                         5       4    80%   7
say.c                                          3       3   100%
------------------------------------------------------------------------------
TOTAL                                          8       7    87%
------------------------------------------------------------------------------

报告展示程序运行后覆盖了 80% 的代码。

2. 生成分支覆盖率列表报告

gcovr -b -r .:对当前目录递归执行gcove生成分支覆盖率报告

PS G:\Gcc> gcovr -b -r .
------------------------------------------------------------------------------
                           GCC Code Coverage Report
Directory: .
------------------------------------------------------------------------------
File                                    Branches   Taken  Cover   Missing
------------------------------------------------------------------------------
main.c                                         2       1    50%   6
say.c                                          0       0    --%
------------------------------------------------------------------------------
TOTAL                                          2       1    50%

报告展示了在 main.c 中有一个分支没有执行到。

3. 生成html形式报告

gcovr -r . --html --html-details -o coverage.html

–html : 生成当前目录下所有文件的 HTML summary:
–html-details: 为每个源文件在coverage.html 摘要旁边创建一个HTML 详情报告

HTML summary:

在这里插入图片描述

HTML details:

在这里插入图片描述

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值