Posted on 2022-03-29 23:07
小菜枫 阅读(1319)
评论(0) 编辑 收藏 引用 所属分类:
学习笔记
随着单元测试的开展和普及,也随着产品功能的越来越多,产品代码糅合更多的功能,面对几十个工程项目、成千上百的类、超过10万的代码…………会不会有一丝丝恐惧,眼见它平地起高楼……眼见它……
那么有什么办法可以给自己足够的底气,胸有成竹的放心下班?单元测试是这底气的基石,那么如何才能让这个基石落到心上?如何衡量这个基石是否足够的完美、牢固?答案可以是——代码覆盖率。
代码覆盖率有很多衡量的维度:函数覆盖率、行覆盖率、分支覆盖率、指令覆盖率……等,笔者不是软件测试专业人员,就不班门弄斧以免误导旁人了,所以这里选用行覆盖率和分支覆盖率进行讲述,如何基于以往开展的单元测试生成被测目标的代码覆盖率。
尤其是有了分支覆盖率,就可以更有针对性的设计一些用例补全尚未覆盖到的分支,提高程序的健壮性。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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的库
CTRL+R运行,一切正常,没有什么不同,就像还没有增加上述配置一样。那么上文提到的gcno、gcda文件在哪里?在qt的build-***目录下:
代码覆盖率的第一步:gcov已经被我们成功应用起来了。
但由于gcov生成的是程序树,非常不便于阅读,所以下一节我们将更进一步使用工具来将gcno、gcda来生成更加人性化易于阅读的报告。