2011-02-28 52 views
1

我正在嘗試執行共享庫的覆蓋測試。我選擇了gcov/lcov,因爲它是免費且開源的,這意味着我可以立即嘗試(商業軟件需要批准/購買,必須做出很多決定 - 它花費時間)。使用gcov進行共享庫覆蓋測試[Linux/Fortran]

情況如下 - 圖書館 - 我們用Fortran編寫的產品然後用於仿真軟件(具體來說就是MSC.Software的ADAMS)。我可以使用-fprofile-arcs -ftest-coverage編譯庫,如果ADAMS使用它,它可以正常工作。但是,沒有創建.gcda文件。

有一個小的測試可執行文件來測試庫的基本行爲(小方法的子集)。如果我使用覆蓋測試開關編譯此可執行文件,則可以爲可執行文件和庫獲取.gcda文件。

現在的問題是:如果使用該庫的可執行文件未使用coverage測試開關進行編譯,是否可以調用該庫的gcov度量值?如果是的話,怎麼樣?

可以編寫大量的測試,但它幾乎就像複製ADAMS(或其他任何仿真軟件包)一樣。或者我選擇了錯誤的覆蓋測試工具,我應該轉向商業產品?

預先感謝您。

邁克

回答

2

看來,專有軟件調用的庫的代碼覆蓋率測試沒有任何問題。人們只應該注意使用相同版本的編譯器編譯所有組件,並使用相應的gcov版本。 在我的情況下,這個庫(在Fortran中)是用f77(gcc-3.4.6)編譯的,它的組件是用最新的gcc(gcc-4.4)編譯的。 ADAMS使用的庫的包裝器再次使用gcc-3.4.6編譯,gcov使用4.1。

使用gcc-3.4.6爲所有組件提供非常有吸引力的代碼覆蓋測試結果。

請考慮關閉該主題,但如果有人有問題,請詢問。我很樂意分享我的經驗。

0

我編譯我的程序的方式通常是完全一樣的開關供應到編譯器爲所有模塊,所以,不,我不知道它可能得到的gcov工作時,可執行文件沒有用覆蓋開關編譯。然後,我做的是後處理gcov輸出文件,忽略僅與測試代碼有關的文件,但保留與代碼有關的所有文件直接調用測試代碼以及​​調用的庫代碼本身。

+0

謝謝你的回答。 這就是我通常所做的,然而在這裏庫的測試是特殊輸入數據集,它被輸入到ADAMS中,輸出與預期結果進行比較。 代碼覆蓋率應該找到任何「死代碼」,代碼不再使用,而不是檢查單元測試的質量。 如果沒有其他解決方案,我們只需要實施大量的單元測試。我希望我可以通過使用gcov來避免它。 Regards, Mike – Mike 2011-03-04 13:00:22