在C/C++中产生代码覆盖率的步骤包括如下几步:
一、设置编译参数
如下来设置Makefile中的编译参数以使之支持覆盖率产生:
ifeq ($(coverage), yes)
CXXFLAG = -g -Wall -DLINUX -DGTEST -fprofile-arcs -ftest-coverage
endif
这样,可以使用 make coverage=yes 来引入这些编译选项而不会影响到正常的编译,比如:
#make coverage=yes
这时候会产生.gcno文件。
二、运行测试程序
#./exe
运行测试程序,会针对所有cpp源代码产生相应的.gcda文件。
三、获取覆盖率数据
获取覆盖率数据的方法很多种,这里介绍两种,分别产生txt和html数据:
1、使用gcov获取文本形式的覆盖率数据
使用gcc自带的覆盖率结果产生工具gcov能产生文本格式(.gcov)的覆盖率结果。
#gcov xxx.cpp
2、使用lcov获取html形式的覆盖率数据
使用IBM的lcov来产生html结果数据,具体如下:
#lcov -c -d ./ -o app.info
#genhtml app.info -o cc_result
更多lcov信息,请参见。
四、展示数据
将步骤三中产生的覆盖率数据文件放到Apached的htdocs目录下,就能通过浏览器来查看覆盖率结果了。
五、基本术语
1、行覆盖率(line coverage)
即源代码有效行数与被执行的代码行的比率。
2、分支覆盖率(branch coverage)
即有判定语句的地方都会出现2个分支,整个程序经过的分支与所有分支的比率是分支覆盖率。
3、增量覆盖率(incremental coverage)
即被执行的新增和修改的代码行数与新增和修改的代码行数的比率。
更多详细信息,请参看。
阅读(8625) | 评论(1) | 转发(1) |