在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)
        即被执行的新增和修改的代码行数与新增和修改的代码行数的比率。

        更多详细信息,请参看这里


09-05 18:06