去年换工作到一家做交易的公司,动辄都是成百上千万的交易额,核心系统使用C语言开发的,但是没有自动化测试工具。也许上家公司GTest给惯坏了,没有自动化测试总感觉像是在裸奔……于是,利用零散的空余时间,带着一个外包在已有的手工测试工具的基础上,整了一个自动化测试工具出来。工具做好之后,补充了一定数量的测试用例后,开始考虑覆盖率的问题。网上搜索一番,原来gcc自带的gcov/lcov工具包已经实现了覆盖率生成,下面就是一番实践后的一个小结。

1、编译选项:-fprofile-arcs   -ftest-coverage

使用上述编译选项编译、链接应用程序。其中,‘ftest-coverage’用以生成.gcno文件,‘fprofile-arcs’用以后续执行应用程序时生成.gcda文件。

2、执行应用程序生成.gcda文件

3、执行'gcov *.c'命令生成.gcov文件

gcov使用前面两步生成的.gcno文件和.gcda文件生成.gcov文件,如有嵌套子目录,则每个目录下的源文件都需要生成.gcov文件。

其实,.gcov文件已经包含了代码的覆盖信息,但不是图形化的数据,看起来不直观,所以需要使用lcov工具以生成图形化的统计数据。

C语言项目代码覆盖率实践

4、执行lcov生成.info文件: 

    >lcov -d <.gcda文件目录> -o <文件名称.info> -b <.gcno文件路径> -c

    //lcov -d . -o 'test.info' -b . --no-recursion -c

    *需要生成分支覆盖数据可修改文件'/etc/lcovrc(需要root权限)或~/.lcovrc:lcov_branch_coverage= 1

    *如果有嵌套子目录,则每个子目录需要单独生成.info文件,使用如下命令将多个.info文件合并为一个.info文件:

    lcov -a 1.info -a 2.info -o all.info

5、执行genhtml生成HTML文件

      genhtml -o <输出目录名> <文件名.info>

      //genhtml -o result all.info

    *整体覆盖率

    C语言项目代码覆盖率实践

   *单个文件覆盖率

    C语言项目代码覆盖率实践

  • 参考:

          http://ltp.sourceforge.net/coverage/lcov.php


                                                                                            --2018年7月


相关文章:

  • 2022-12-23
  • 2021-06-06
  • 2021-07-23
  • 2021-12-21
  • 2022-12-23
  • 2021-12-21
  • 2021-07-14
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-07-06
  • 2021-08-16
  • 2022-12-23
  • 2021-07-19
  • 2022-12-23
相关资源
相似解决方案