有一個question comparing PMD and CheckStyle。但是,我無法找到PMD和FindBugs之間差異/相似性的細分。我相信一個關鍵的區別是PMD在源代碼上工作,而FindBugs在編譯的字節碼文件上工作。但就能力而言,它應該是一個/或者是選擇還是相互補充?PMD和FindBugs有什麼區別?
99
A
回答
136
我使用兩者。我認爲他們是相輔相成的。
如您所說,PMD適用於源代碼,因此會發現類似以下問題:違反命名約定,缺少花括號,空位檢查,長參數列表,不必要的構造函數,交換機中缺少中斷等。你可以找到你的代碼的Cyclomatic complexity,我發現它非常有用(FindBugs沒有告訴你有關Cyclomatic的複雜性)。
FindBugs適用於字節碼。這裏有一些問題FindBugs發現哪些PMD沒有:equals()方法在子類型上失敗,clone方法可能返回null,布爾值的引用比較,不可能強制轉換,32位int移位的數量不在0-31範圍內,一個包含它自己的集合,equals方法總是返回true,一個無限循環等。
通常他們每個人都發現一組不同的問題。同時使用。這些工具教會了我很多關於如何編寫好的Java代碼的知識。
20
PMD的最大特點是它的XPath規則,與規則設計器捆綁在一起,讓您輕鬆構建代碼示例中的新規則(類似於RegEx和XPath GUI構建器)。 FindBugs開箱即用性更強,但構建項目特定的規則和模式非常重要。
例如,我遇到了涉及2個嵌套for循環的性能問題,導致O(n^2)運行時間,這很容易避免。我使用PMD構建特設查詢,以查看嵌套for循環的其他實例 - // ForStatement/Statement // ForStatement。這指出了2個更多的問題。這不是一個通用的規則。
1
PMD是
- 著名
- 廣泛應用於工業
- 您可以在XML
- 添加你的規則讓你在錯誤的水平和警告級別的詳細分析
- 你也可以掃描你的代碼是「複製和粘貼行」。重複的代碼。這給出了實現java oops的好主意。
相關問題
- 1. PMD和FindBugs衝突
- 2. 碼分析:PMD和FindBugs的
- 3. PMD和FindBugs的驗證
- 4. 有什麼區別`和$(Bash中有什麼區別?
- 5. 有什麼區別? :和||
- 6. &&和||有什麼區別?
- 7. 「/」和「/ *」有什麼區別?
- 8. 有什麼區別:。!和:r!?
- 9. ==和===有什麼區別?
- 10. Appender和〜有什麼區別?
- 11. $ @和$ *有什麼區別?
- 12. is和=有什麼區別?
- 13. #.00和#。##有什麼區別?
- 14. `==`和`is`有什麼區別?
- 15. '=='和'==='有什麼區別?
- 16. /和/#/有什麼區別?
- 17. | 0和~~有什麼區別?
- 18. `&`和`ref`有什麼區別?
- 19. ==和===有什麼區別?
- 20. ==和===有什麼區別?
- 21. `{}`和`[]`有什麼區別?
- 22. JavaScript和=== ===有什麼區別?
- 23. difftime和' - '有什麼區別?
- 24. =和==有什麼區別?
- 25. CheckStyle,FindBugs和PMD配置不重疊
- 26. Gradle上的Findbugs和PMD插件
- 27. Eclipse插件鏈接 - SVN,Checkstyle,PMD和FindBugs
- 28. xtype和別名有什麼區別?
- 29. Mixpanel:識別()和people.identify()有什麼區別?
- 30. 有什麼區別
當一個集合包含它自己時,您看到的具體錯誤代碼是什麼,以及爲什麼它標記了FindBugs的一個可能的錯誤? – Geek 2013-03-17 11:58:35