2009-02-10 88 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。但是,您可以在所有標題或只選擇一個子集上執行此操作。我認爲我們以這種方式生產的比例是您正在尋找的比例。