利用gcov实现代码覆盖率检测

一、GCOV简介

Gcov工具的基本功能是可以查看测试时代码执行的覆盖率,包括函数覆盖,语句覆盖,分支覆盖等覆盖内容。有助于分析被测程序的缺陷。使用该工具可以查看程序在某分支处的执行频率,从而分析程序的性能。

二、GCOV使用

gcov伴随gcc 发布。gcc编译加入-fprofile-arcs -ftest-coverage 参数生成二进制程序,执行测试用例生成代码覆盖率信息。
fprofile-arcs参数使gcc创建一个程序的流图,之后找到适合图的生成树。只有不在生成树中的弧被操纵(instrumented):gcc添加了代码来清点这些弧执行的次数。当这段弧是一个块的唯一出口或入口时,操纵工具代码(instrumentation code)将会添加到块中,否则创建一个基础块来包含操纵工具代码。

gcov主要使用.gcno和.gcda两个文件。

  • gcno是由-ftest-coverage产生的,它包含了重建基本块图和相应的块的源码的行号的信息。
  • gcda是由加了-fprofile-arcs编译参数的编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息(而gcda只能在程序运行完毕后才能产生的)。

话不多说,举个栗子。
手头有一个hello.c的例子,源代码如下:


> #include<stdio.h>
#include<stdlib.h>
void main()
{
    int i = 1;
    if(i == 1)
    printf("helloworld!\n");
    else
    printf("im not good!\n");
}
编译:`gcc hello.c -fprofile-arcs -ftest-coverage -o hello`
运行:`./hello` 输出:`helloworld!`
执行:gcov hello.c 

输出如下:
File 'hello.c'
Lines executed:83.33% of 6
Creating 'hello.c.gcov'

由上可知:在执行gcov hello.c 的同时,生成了hello.c.gcov文件
下面查看gcov文件:
cat hello.c.gcov

输出如下: -: 0:Source:hello.c

    1:    3:void main()
    -:    4:{
    1:    5:    int i = 1;
    1:    6:    if(i == 1)
    1:    7:    printf("helloworld!\n");
    -:    8:    else
#####:    9:    printf("im not good!\n");
    1:   10:}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
logcover 是一款非常便捷的统计测试用例异常日志覆盖率的工具。可清晰地分析出程序源代码中异常日志的覆盖情况,检验测试充分度,指导测试用例完善。 使用场景: 度量异常分支测试覆盖率,覆盖单元测试、模块测试、集成测试  背景: 异常测试是软件测试中非常重要的一环,异常测试充分与否直接影响到测试质量和产品线上稳定性。logcover是Baidu质量部推出的一款专门用于度量异常测试覆盖率的轻量级工具,通过度量异常日志的测试覆盖率来反应异常测试覆盖率,因为打印异常日志的程序分支往往更需要测试覆盖的异常分支。原理: 结合程序源代码和测试执行产生的日志,计算程序异常日志的测试覆盖率。例如: 源代码中有100处异常日志(warning、fatal、error)打印点,程序在测试过程中,产生了100条日志,对应源代码中50处日志打印点,则异常日志覆盖率是50%,同时,logcover会给出覆盖日志和未覆盖日志的所有信息,包括文件名、行号等,便于快速识别未覆盖异常日志。实现:• 根据svn,对源代码进行轻量级静态分析,获得代码中异常日志打印的原始信息• 收集单机/多机测试日志,并对日志文件进行parse、filter、merge等处理,得到实际覆盖的日志信息• 根据代码中的原始日志信息和实际测试产生的日志信息,做diff计算,得出异常log覆盖率和覆盖信息• 覆盖率报告邮件推送logcover使用说明:1: 下载logcover2: 修改对应 logcover.cfg文件    logcover_type =0 表示单机模式;logcover_type=1表示多机模式。   选择多机模式时,对应填写 machines、user、password、log_paths和script_path 3: 执行 sh logcover.sh $svn $log_cover_log_dir $mail_list -s $mail_subject    $svn : 被测程序svn源码路径   $log_cover_log_dir: log文件存放路径   $mail_list : 覆盖率报告推送邮件列表,多邮件中间以空格分隔。例如:[email protected] [email protected]   -s $mail_subject : 推送邮件自定义主题logcover执行环境依赖:1: perl v5.8.5 2: python v2.7 3: svn client v1.6.5 标签:logcover

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值