2010-11-28 106 views

回答

136

我使用兩者。我認爲他們是相輔相成的。

如您所說,PMD適用於源代碼,因此會發現類似以下問題:違反命名約定,缺少花括號,空位檢查,長參數列表,不必要的構造函數,交換機中缺少中斷等。你可以找到你的代碼的Cyclomatic complexity,我發現它非常有用(FindBugs沒有告訴你有關Cyclomatic的複雜性)。

FindBugs適用於字節碼。這裏有一些問題FindBugs發現哪些PMD沒有:equals()方法在子類型上失敗,clone方法可能返回null,布爾值的引用比較,不可能強制轉換,32位int移位的數量不在0-31範圍內,一個包含它自己的集合,equals方法總是返回true,一個無限循環等。

通常他們每個人都發現一組不同的問題。同時使用。這些工具教會了我很多關於如何編寫好的Java代碼的知識。

+0

當一個集合包含它自己時,您看到的具體錯誤代碼是什麼,以及爲什麼它標記了FindBugs的一個可能的錯誤? – Geek 2013-03-17 11:58:35

20

PMD的最大特點是它的XPath規則,與規則設計器捆綁在一起,讓您輕鬆構建代碼示例中的新規則(類似於RegEx和XPath GUI構建器)。 FindBugs開箱即用性更強,但構建項目特定的規則和模式非常重要。

例如,我遇到了涉及2個嵌套for循環的性能問題,導致O(n^2)運行時間,這很容易避免。我使用PMD構建特設查詢,以查看嵌套for循環的其他實例 - // ForStatement/Statement // ForStatement。這指出了2個更多的問題。這不是一個通用的規則。

1

PMD是

  • 著名
  • 廣泛應用於工業
  • 您可以在XML
  • 添加你的規則讓你在錯誤的水平和警告級別的詳細分析
  • 你也可以掃描你的代碼是「複製和粘貼行」。重複的代碼。這給出了實現java oops的好主意。