2009-02-10 87 views
7

目前我们使用gcov与我们的Linux C++应用程序测试套件,它在测量线路覆盖率方面做得很好。用gcov可以测量功能覆盖吗?

除了线路覆盖之外,gcov还可以生成功能/方法覆盖率报告吗?

看着参数gcov接受我不认为这是可能的,但我可能会失去一些东西。或者,可能还有其他工具可以用gcc生成的统计信息生成函数/方法覆盖率报告吗?

更新:按功能/方法覆盖率我是指在测试过程中执行的函数的百分比。

回答

6

我想你的意思是-f选项,它会给你每个函数覆盖的行的百分比。有一篇关于gcov的文章Dr. Dobb's可能会对您有帮助。如果“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 
+0

-f选项不正是我想要的。它通过函数提供了行覆盖,但是我想要函数/方法覆盖。我增加了对这个问题的澄清。 – 2009-02-10 22:19:29

6

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

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

我也想补充一点,如果你已经使用GNU编译器工具,然后对gcov/LCOV不会太为难你得到运行,它产生的结果是非常令人印象深刻。

5

lcov工具很不错,我们使用它。但我不确定你是否需要它。

我们

  1. 使用的ctags(wikipedia; sourceforge)找到相关的头文件中声明的所有功能。

  2. 运行的gcov得到线覆盖在二进制每一个功能。

  3. 比较来自1 & 2的函数列表以产生“调用函数”/“可用函数”。

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