戏说c第二十六篇: 测试完备性衡量(代码覆盖率)

03-03 1272阅读

前言

师弟:“师兄,我又被鄙视了。说我的系统太差,测试不过关。”

我:“怎么说?”

师弟:“每次发布版本给程夏,都被她发现一些bug,太丢人了。师兄,有什么方法来衡量测试的程度么?”

我:“有,代码覆盖率就是一个比较好的方式。”

正文

通过gcov和lcov,可以很直观的看到代码的运行情况,同时也可以查看代码的行覆盖率,函数覆盖率等等信息,为开发提供一个方便的测试手段。

gcov是Linux下GCC自带的一个C/C++代码覆盖率分析工具,因此只要安装了gcc,就具备了。

gcov能够生成代码覆盖信息,但是不够直观,因此需要借助lcov/genhtml直观展示覆盖率,主要特点有:

● 基于Html输出,并生成一棵完整的HTML树

● 输出包括概述、覆盖率百分比、图表,能快速浏览覆盖率数据

● 支持大项目,提供三个级别的视图:目录视图、文件视图、源码视图

具体操作方法

代码编译的时候需要加上编译参数: -ftest-coverage -fprofile-arcs 和库 -lgcov。编译完会生成.gcno文件,然后进行测试,程序正常退出,会有.gcda文件生成。然后根据.gcda生成可视化信息。

Step1: lcov根据.gcda生成info数据

lcov 可以在指定目录去找代码覆盖的信息, 输出为 *.info, 这个 *.info 是一个中间结果 lcov -c -o

code_coverage.info -d .

Step2: 生成html数据

genhtml code_coverage.info -o coverage_result

Step3: 在coverage_result目录启动http服务,就可以通过网页访问

python3 -m http.server

其中第一二步,可以封装脚本为code_coverage.sh:

lcov -c -o code_coverage.info -d .
genhtml code_coverage.info -o coverage_result

结果如下

代码行覆盖率21.0%,函数覆盖率39.1%。

戏说c第二十六篇: 测试完备性衡量(代码覆盖率)

详细代码覆盖信息如下,其中标红的表示未测试到的代码行。

戏说c第二十六篇: 测试完备性衡量(代码覆盖率)

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]