使用gcov和lcov测试代码覆盖率

发表于:2018-3-27 14:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:守望    来源:个人博客

  gcov与 lcov简介
  通过gcov和lcov,可以很直观的看到代码的运行情况,同时也可以查看
  代码的行覆盖率,函数覆盖率等等信息,为开发提供一个方便的测试手段。
  gcov
  gcov是Linux下GCC自带的一个C/C++代码覆盖率分析工具,因此只要安装了gcc,就不需要再次安装了
  lcov
  lcov介绍
  gcov能够生成代码覆盖信息,但是不够直观,因此需要借助lcov直观展示覆盖率,主要特点有:
  基于Html输出,并生成一棵完整的HTML树
  输出包括概述、覆盖率百分比、图表,能快速浏览覆盖率数据
  支持大项目,提供三个级别的视图:目录视图、文件视图、源码视图
  lcov安装
  下载地址:lcov
  下载完成后解压,执行命令:make install即可。
  下面简单介绍linux下,使用gcov和locov进行代码覆盖率的测试。
  测试
 ####测试代码:
  /***************************************************************
  *   Copyright (C) 2017 All rights reserved.
  *
  *   文件名称:test.c
  *   创 建 者:hyb
  *   创建日期:2017年08月06日
  *   描    述:
  *
  ***************************************************************/
  #include<stdio.h>
  #include<stdlib.h>
  #include<string.h>
  int* twoSum(int* nums, int numsSize, int target) {
  int loop = 0;
  int inloop = 0;
  int* result = NULL;
  result =(int*) malloc(2*sizeof(int));
  memset(result,0,2*sizeof(int));
  printf("numsSize=%d\n",numsSize);
  if(NULL == nums || numsSize==0)
  {
  return result;
  }
  for(loop = 0;loop < numsSize;loop++)
  {
  for(inloop = loop+1;inloop <numsSize;inloop++)
  {
  if(*(nums+loop)+*(nums+inloop) == target)
  {
  if(NULL != result)
  {
  *result = loop;
  *(result+1) = inloop;
  }
  return result;
  }
  }
  }
  return result;
  }
  int main(int arg,char argv[])
  {
  int nums[4]={2,7,11,15};
  int target = 9;
  int numsSize = 4;
  int* result = twoSum(nums,numsSize,target);
  printf("index1:%d\nindex2:%d\n",*result,*(result+1));
  }
  编译
  gcc -fprofile-arcs -ftest-coverage test.c -o test
  上面的参数-fprofile-arcs -ftest-coverage一定要带上,会生成gcno文件
  运行
  ./test
  生成了gcda文件
  转换覆盖率信息
  lcov -c -o test.info -d .
  -c 生成覆盖率信息
  -o 生成目标文件
  -d 目录
  . 当前目录
  可能出现的出错:可能会提示out of memory,原因是locv版本过低。
  生成html文件
  genhtml test.info -o ./output
  tst.info 需要生成覆盖率信息的源文件
  -o 生成结果目录
  最后会有提示如下:
  Generating output.
  Processing file gcov_lcov/test.c
  Writing directory view page.
  Overall coverage rate:
  lines……: 91.3% (21 of 23 lines)
  functions..: 100.0% (2 of 2 functions)
  可以看到output目录下有index.html文件
  使用浏览器打开html文件,即可查看覆盖率报告
  覆盖率报告分析
  从上图可以看到
  整个工程的代码行覆盖率和函数覆盖率,分支覆盖情况
  继续点击test.c,可以看到具体每行是否有跑到。
  褐色表示未跑到过的代码,左侧数字表示跑到的次数。
  总结
  结合使用gcov和locv,可以比较直观的观察到运行的程序是否按照自己的设计,
  跑到了对应的代码中。


上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号