2010-05-13 28 views
8

我已經嘗試過幾種不同的Java靜態分析器,特別是Findbugs和PMD。你在Java代碼上運行什麼靜態分析器?爲什麼?

我正在尋找可能值得在Java代碼上運行的其他靜態分析器的示例。

+0

我現在有兩個答案,建議Findbugs,我必須承認,它似乎是相當不錯的。這是普遍的共識嗎? – Finbarr 2010-05-13 15:01:42

回答

12

FindBugsPMD旁邊,還有Bandera,ESC/JavaJLint。你可以找到它們的比較here (PDF)。以下是相關的摘錄:

 
Bug Category - Example       | ESC | FindBugs | JLint | PMD 
--------------------------------------------------+-----+----------+-------+----- 
General - Null dereference      | V | V  | V | V 
Concurrency - Possible deadlock     | V | V  | V | V 
Exceptions - Possible unexpexted exception  | V |   |  | 
Array - Length may be less than zero    | V |   | V | 
Mathematics - Division by zero     | V |   | V | 
Conditional, loop - Unreachable code    |  | V  |  | V 
String - Checking equality using == or !=   |  | V  | V | V 
Object overriding - Equal objects/equal hashcodes |  | V  | V | V 
I/O stream - Stream not closed on all paths  |  | V  |  | 
Unused or duplicate statement - Unused local  |  | V  |  | V 
Design - Should be a static inner class   |  | V  |  | 
Unnecessary statement - Unnecessary return  |  |   |  | V 

注:這篇文章是從2004年開始這些工具可以在同時進行了改進。

正如您所見,FindBugs和PMD找到了很多,也是最流行的靜態分析工具。但是,現在一些智能IDE也包含了一些要點,例如空默認,未使用的本地代碼和無法訪問的代碼。 Eclipse例如可以警告他們。

+1

Checkstyle也很棒,它不僅僅是檢查你的代碼是否符合某種風格 - 不應該從任何列表中刪除 – 2010-05-13 15:09:23

+0

Checkstyle比邏輯檢查器更像一種風格檢查器。但是的確如此,這也是值得的。 – BalusC 2010-05-13 15:12:59

+0

很好回答謝謝。 – Finbarr 2010-05-13 15:14:57

2

Findbugs幾乎是標準,因爲它非常強大(對於從研究開始的工具),定期維護,並且最近的版本確實覆蓋了大部分基礎。它還具有良好的Eclipse集成和多種過濾和排序選項,可讓您實現首選的信噪比。我只希望它可以提供建議的工作流程,所以我可以選擇忽略特定的實例(例如,對於我無法控制的代碼),只能看到更改。當我有備用內核時,持續分析也很好。

我熟悉幾種非常有前途的研究工具,它們使用靜態分析來檢查API一致性或線程分析。不幸的是,他們中沒有一個是真正的生產質量,他們需要開發者的一些投資。

1

我建議你在IntelliJ中使用代碼分析器。它有超過600個易於打開和關閉的檢查,但主要原因是許多檢查有快速修復。

如果你只是運行一個報告,你可能會發現1000或10,000s的標記問題。這對於解決每個問題通常價值非常小但存在引入錯誤的真實風險時可能非常乏味。然而,IntelliJ讓你在幾分鐘內選擇並修復1000多個問題,並且可以降低引入錯誤的風險。

IntelliJ CE是開源且免費的並具有此功能。

相關問題