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
可以搭配其他工具一起使用,更能有助于发现代码性能、测试覆盖程度等,例如gcovprof
、lcov
……
那么如何使用这个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
运行,一切正常,没有什么不同,就像还没有增加上述配置一样。那么上文提到的gcno
、gcda
文件在哪里?在qt
的build-\*\*\*
目录下:
代码覆盖率的第一步:gcov
* 已经被我们成功应用起来了。
但由于gcov
生成的是程序树,非常不便于阅读,所以下一节我们将更进一步使用工具来将gcno
、gcda
来生成更加人性化易于阅读的报告。
也可扫码关注博主同名公众号 “不解之榬” 查看