2010-02-25 95 views
4

我不是問StyleCop或Fxcop提供的靜態代碼分析。兩者都有不同的目的,並且效果很好。我在問是否有方法來查找用戶控件或子模塊的代碼覆蓋範圍?例如,你有一個應用程序在獨立程序集中使用助手類。爲了確保單元測試代碼覆蓋率,我們需要運行應用程序並確保使用NCover或類似工具。有沒有一種方法可以確定代碼覆蓋率而不需要運行代碼?

我的要求是,不運行它,有沒有輔助類或相似類型的組件中的任何可以找到的代碼覆蓋率?

回答

0

我會說不;除了編譯器可以確定的「死代碼」之外。

我的代碼覆蓋率的定義是指多少次的每一行代碼在程序運行的結果:其中,當然,是指運行程序。這裏的決定因素通常是通過確定條件執行路徑的程序的數據值。像編譯器一樣,靜態分析可以推導出無法在任何條件下運行的代碼行。

這裏的一個例子是如果您的程序使用第三方庫,但庫中存在錯誤。如果您的程序從不使用庫的這些部分,或者您發送給庫的數據會導致它避免該錯誤,那麼您將不會受到影響。

你可以寫一個程序,通過反射,假設所有條件語句將被採取,並遵循所有的函數調用,通過所有派生類,但我不知道這是什麼會告訴你。它當然不能告訴你代碼行中是否存在任何錯誤。

+1

一般而言,我聽說過術語「代碼覆蓋率」是指測量是否執行特定的代碼行,而不是執行了多少次。 – 2010-02-27 17:15:10

+0

@John Saunders:IIRC gcov告訴你每行執行多少次。參見:http://gcc.gnu.org/onlinedocs/gcc/Gcov-Intro.html#Gcov-Intro但是,是的,你只需要知道*是否已經執行了一行。 – quamrana 2010-02-27 17:21:10

+0

這是一個關於gcov的問題?如果是這樣,那麼我錯過了。我只熟悉其他六種代碼覆蓋系統,其中沒有任何一種代碼涵蓋範圍之外的任何內容。 – 2010-02-27 17:37:49

3

一般來說,答案是否定的。這相當於halting problem,這是不可計算的。

0

Coverity Static Analysis是一種工具,是可以識別的程序很多secuirty缺陷。它還可以識別死代碼,並可用於幫助滿足測試法規,如D0178B,這要求開發人員證明所有代碼都可以執行。

2

有些(研究)工具基於抽象解釋或模型檢查,可以顯示覆蓋屬性而不執行,適用於語言子集。參見例如

「在界模型檢驗分析功能覆蓋」,格羅斯,庫恩D.,U德雷克斯勒,2008年

一般R.,是的,有辦法的,但他們是專業的,可能需要一些正式的方法經驗。這種東西仍然是尖端的研究。

5

請參閱Static Estimation for Test Coverage,該技術可以在不執行源代碼的情況下估計覆蓋率。

的基本思想是計算program slice每個測試用例,然後在「計數」切片列舉什麼。 (向前)切片實際上是程序的一部分,您可以從代碼中的特定起點(本例中爲測試代碼)到達該切片。

儘管如果您不是ACM會員(或者您沒有出席會議),上述技術文件很難得到,但有一個slide presentation here

當然,運行這個靜態估計器只會告訴你(大致)什麼樣的代碼將被執行。它並不代替實際運行測試,並驗證它們通過!

相關問題