c++测试覆盖率统计 —lcov

c++测试覆盖率统计 

对于c/c++程序,使用GCC自带的gcov可以统计代码测试覆盖率。

1,编译时加上选项

-fprofile-arcs -ftest-coverage

如果用cmake

add_definitions (-fprofile-arcs -ftest-coverage)
target_link_libraries (live -fprofile-arcs)

2,将编译后产生的.gcno文件备份

3,运行程序

export GCOV_PREFIX=/opt/v_system/live_gcov/coverage/
export GCOV_PREFIX_STRIP=999
LD_PRELOAD=./gcov_out.so ./bin/live  -f etc/ops.conf

4,生成报告

程序退出后会在上面配置的/opt/v_system/live_gcov/coverage/目录下生成.gcda文件, 将第2步的.gcno文件和.gcda放在一个目录下,执行

lcov -c -d /opt/v_system/live_gcov/coverage/ -o res.info
genhtml -o report res.info

5,查看报告

在report目录下生成index.html,用浏览器打开。


gcov_out.so源码

代码编译:gcc -shared -fPIC gcov_out.c -o gcov_out.so

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#define SIMPLE_WAY
void sighandler(int signo)
{
#ifdef SIMPLE_WAY
    exit(signo);
#else
    extern void __gcov_flush();
    // flush out gcov stats data
    __gcov_flush();
    // raise the signal again to crash process
    raise(signo);
#endif
}
__attribute__ ((constructor))
void ctor()
{
    int sigs[] = {
        SIGILL, SIGFPE, SIGABRT, SIGBUS,
        SIGSEGV, SIGHUP, SIGINT, SIGQUIT,
        SIGTERM
    };
    int i;
    struct sigaction sa;
    sa.sa_handler = sighandler;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = SA_RESETHAND;
    for(i = 0; i < sizeof(sigs)/sizeof(sigs[0]); ++i) {
        if (sigaction(sigs[i], &sa, NULL) == -1) {
            perror("Could not set signal handler");
        }
    }
}

    • 0
      点赞
    • 1
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    lcov是一个测试覆盖率工具,用于分析程序代码的测试覆盖情况。分支覆盖率lcov分析报告中的一个指标,用于衡量程序中用于控制流程的分支语句是否被测试覆盖到。 分支覆盖率指的是程序中的条件分支语句,例如if语句或者switch语句中的不同分支,是否被测试用例执行到。通过lcov生成的分析报告,我们可以看到每个分支被执行的次数,以及被执行的比例。 分支覆盖率是一个重要的测试指标,因为分支语句是程序中的关键控制点,测试覆盖到所有的分支意味着对程序的各种情况都进行了测试。通过分支覆盖率,我们可以判断测试用例是否覆盖到了所有的分支情况,并据此得出测试的全面性和有效性。 分支覆盖率的计算是通过在编译过程中添加额外的代码实现的,这些代码用于跟踪分支的执行情况。在程序执行过程中,这些额外的代码会记录每个分支被执行的次数。通过分析这些记录,lcov可以计算出每个分支的覆盖率。 在使用lcov进行测试覆盖率分析时,我们可以根据分支覆盖率的报告来判断测试用例的覆盖情况,并找出原程序中哪些分支没有被覆盖到。这样我们就可以根据这些信息来优化测试用例的编写,提高程序的稳定性和质量。 总的来说,lcov的分支覆盖率是一项有助于衡量测试用例的全面性和有效性的指标,可以帮助开发者找出程序中未被覆盖到的分支情况,并据此来进行测试用例的优化和改进。

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值