独望枫

人在尘世间,有缘自相见,变化千千万,未开窍,已迷恋
posts - 45, comments - 0, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

随着单元测试的开展和普及,也随着产品功能的越来越多,产品代码糅合更多的功能,面对几十个工程项目、成千上百的类、超过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-***目录下:


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


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理