2008-10-06 106 views
17

我想從使用或評估Coverity的用戶那裏獲得靜態分析Java代碼的評論。我知道它在C/C++世界很受歡迎,但是值得花錢用於Java分析還是使用PMD,Findbugs和其他開源工具更好?Java靜態分析的覆蓋率

回答

4

我會用一個有點相關的答案。我已經使用Klocwork來處理Java和C代碼。 Klocwork是Coverity的一個關鍵競爭對手......在成本方面,它們大致相同(仔細看看,Klocwork看起來更便宜,直到你真正購買了你所需要的產品),並且它們在功能上明顯地反覆出現。

對於C/C++,這太好了。對於Java ......好吧,它幫助發現了很多資源泄漏(Java開發人員似乎忘記了文件句柄之類的資源沒有被垃圾回收),但似乎並沒有發現許多「關鍵「的錯誤。這可能是因爲語言本身確實有助於防止一些更基本但很難發現的錯誤(數組溢出,指針損壞等)。

獲得Coverity進行演示,他們非常樂意。看看他們找到了什麼樣的東西。

15

如果您今天沒有使用任何東西,我會從Findbugs和PMD開始。它們易於安裝和使用。首先集中審查FindBugs並修正正確性錯誤 - 他們建議從高和中嚴重性正確性錯誤開始,因爲檢查人員的誤報率非常低,您將獲得良好的回報。讓開發人員使用PMD清理代碼,並在Eclipse中查找FindBugs插件以查看新代碼。逐步開展工作將使開發人員瞭解並接受這些工具的用處。

與其C/C++檢查器相比,Coverity的Java檢查器仍然很薄弱。我們使用Findbugs,PMD,Coverity和Klocwork,因爲它們都有不同的優勢,而且我們偏執狂。如果你不偏執,你可以堅持使用開源工具並獲得很多價值。或者如果您需要安全檢查:那麼Klocwork或特別是Fortify應該爲您做更徹底的工作。

+0

你有沒有比較Java的各種這些工具? – 2010-12-08 07:50:31

3

我會在前面的答案中添加一個有限的我,這受到我所約束的Coverity NDA的限制。 Coverity Prevent在尋找開源C/C++代碼中的錯誤方面擁有令人印象深刻的公開記錄,但是他們的Java產品更新穎。 (Coverity對我的前僱主發佈了新聞稿,所以我可以說它的確幫助我們找到並修復了C/C++代碼中的大量錯誤,這比我以前在尋找bug的時候所發現的要多得多。)FindBugs確實在Java代碼方面令人印象深刻的工作,並且你無法打敗價格。但重點已經提出:在購買之前在你的真實代碼上試用它們兩個。無法替代現實,靜態分析中的傳統觀點是,這些工具發現的重疊性令人驚訝。

0

正如其他人所說,決定最好的方法是嘗試所有這些工具。 (Coverity)最近宣佈推出一款名爲Code Spotter()的託管靜態分析即服務產品,該產品目前處於測試階段。它使用與Coverity企業產品相同的分析引擎,但它被封裝在一個不同的(簡化的)用戶界面中。由於這是一個託管服務,因此可以很容易地使用它來了解Coverity分析功能。

在撰寫本文時,Code Spotter是純Java的,但其他Coverity支持的語言應該即將推出。