单元测试覆盖率之工具链——gcov的介绍及启用

gcov的介绍及启用

随着单元测试的开展和普及,也随着产品功能的越来越多,产品代码糅合更多的功能,面对几十个工程项目、成千上百的类、超过10万的代码…………会不会有一丝丝恐惧,眼见它平地起高楼……眼见它……

那么有什么办法可以给自己足够的底气,胸有成竹的放心下班?单元测试是这底气的基石,那么如何才能让这个基石落到心上?如何衡量这个基石是否足够的完美、牢固?答案可以是——代码覆盖率。

代码覆盖率(Code coverage) 是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。

代码覆盖率有很多衡量的维度:函数覆盖率、行覆盖率、分支覆盖率、指令覆盖率……等,笔者不是软件测试专业人员,就不班门弄斧以免误导旁人了,所以这里选用行覆盖率和分支覆盖率进行讲述,如何基于以往开展的单元测试生成被测目标的代码覆盖率。

尤其是有了分支覆盖率,就可以更有针对性的设计一些用例补全尚未覆盖到的分支,提高程序的健壮性。


gcov是一个代码覆盖率统计的工具。不用单独下载,伴随GCC一起发布(即你安装有GCC,也就有了gcov这个工具)。与GCC协同使用、分析被测代码,有助于创建更稳健的代码,并能发现程序中未经测试的部分。

基于gcov是隶属于GCC,所以其仅适用于使用GCC编译的代码。
原文:

gcov works only on code compiled with GCC. It is not compatible with any other profiling or test coverage mechanism._

gcov可以搭配其他工具一起使用,更能有助于发现代码性能、测试覆盖程度等,例如gcovproflcov……

那么如何使用这个GCC自带的工具呢?

使用gcov的准备工作非常简单:就是在使用GCC编译文件时,加入编译参数 -fprofile-arcs-ftest-coverage

-fprofile-arcs : 编译时在源码相同路径下产生gcno文件
-ftest-coverage : 在运行带 -fprofile-arcs 编译过的程序时,在gcno文件相同目录下产生gcda文件

首先,我们在utdemo.pro工程中的QMAKE_CXXFLAGS/QMAKE_CFLAGS下追加 -fprofile-arcs -ftest-coverage

QMAKE_CXXFLAGS += -fpermissive -fprofile-arcs -ftest-coverage
QMAKE_CFLAGS += -fpermissive -fprofile-arcs -ftest-coverage

然后,需要连接到gcov的库

LIBS += -lgcov

CTRL+R运行,一切正常,没有什么不同,就像还没有增加上述配置一样。那么上文提到的gcnogcda文件在哪里?在qtbuild-\*\*\*目录下:
image.png

代码覆盖率的第一步:gcov* 已经被我们成功应用起来了
但由于gcov生成的是程序树,非常不便于阅读,所以下一节我们将更进一步使用工具来将gcnogcda来生成更加人性化易于阅读的报告。

也可扫码关注博主同名公众号 “不解之榬” 查看
不解之榬

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值