是否可以使用gcov测量功能覆盖率?

时间:2009-02-10 21:03:45

标签: c++ unit-testing code-coverage gcov

目前我们将gcov与我们用于Linux C ++应用程序的测试套件一起使用,它在测量线路覆盖率方面做得很好。

除了线路覆盖范围外,gcov能否生成功能/方法覆盖率报告?

看看gcov接受的参数我不认为这是可能的,但我可能会遗漏一些东西。或者,是否有任何其他工具可以从gcc生成的统计数据中生成函数/方法覆盖率报告?

更新:按功能/方法覆盖率,我指的是在测试期间执行的功能百分比。

3 个答案:

答案 0 :(得分:6)

我猜您的意思是-f选项,它会为您提供每个功能所涵盖的行数百分比。在Dr. Dobb's有一篇关于gcov的有趣文章可能会有所帮助。如果“man gcov”没有显示-f标志,请检查你是否有最新版本的gcc套件。

编辑:要获得未执行的函数的百分比,您只需解析函数覆盖率输出,因为0.00%的覆盖率应该与未调用的几乎相同。这个小脚本打印了未执行的函数的百分比:

#!/bin/bash

if test -z "$1"
then
    echo "First argument must be function coverage file"
else
    notExecuted=`cat $1 | grep "^0.00%" | wc -l`
    executed=`cat $1 | grep -v "^0.00%" | wc -l`

    percentage=$(echo "scale=2; $notExecuted / ($notExecuted + $executed) * 100" |bc)

    echo $percentage
fi

答案 1 :(得分:6)

我们已经开始一起使用gcov和lcov。 lcov的结果确实包括为您正在查看的“模块”执行的函数的百分比。

编辑 模块可以从目录转到文件。

我还想补充一点,如果您已经在使用GNU编译器工具,那么gcov / lcov对您来说并不会太难以运行,并且它产生的结果非常令人印象深刻。

答案 2 :(得分:5)

lcov实用程序很好,我们使用它。但我不确定你是否需要它以满足你的需求。

我们

  1. 使用ctags(wikipedia; sourceforge)查找相关头文件中声明的所有函数。

  2. 运行GCOV以获取二进制文件中每个函数的行覆盖率。

  3. 比较1&的功能列表2生成“被调用的函数”/“可用函数”。

  4. 我们将其称为“API覆盖”,因为我们仅将步骤#1应用于公共API标头。但是您可以在所有标题上执行此操作,也可以仅在您选择的子集中执我认为我们以这种方式生产的比例是您正在寻找的比率。