有一個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. 有什麼區別`和$(Bash中有什麼區別?
- 4. ==和===有什麼區別?
- 5. ==和===有什麼區別?
- 6. 有什麼區別? :和||
- 7. ==和===有什麼區別?
- 8. '=='和'==='有什麼區別?
- 9. `&`和`ref`有什麼區別?
- 10. 有什麼區別:。!和:r!?
- 11. | 0和~~有什麼區別?
- 12. Appender和〜有什麼區別?
- 13. CheckStyle,FindBugs和PMD配置不重疊
- 14. xtype和別名有什麼區別?
- 15. 有什麼區別
- 16. 有什麼區別
- 17. 有什麼區別?
- 18. 有什麼區別?
- 19. 有什麼區別?
- 20. 有什麼區別
- 21. 有什麼區別?
- 22. 有什麼區別?
- 23. 有什麼區別
- 24. 有什麼區別
- 25. Microsoft.AspNet.WebApi.OData和Microsoft.Data.OData和Microsoft.AspNet.OData有什麼區別?
- 26. Viterbi CYK和Probabilistic CYK算法有什麼區別,有什麼區別嗎?
- 27. SonarQube - 帶有findbugs,PMD和checkstyle插件的Sonarway
- 28. Erlang的Ports和RPC有什麼區別?
- 29. debug.write和Trace.write有什麼區別?
- 30. LocalContainerEntityManagerFactoryBean和LocalEntityManagerFactoryBean有什麼區別?
當一個集合包含它自己時,您看到的具體錯誤代碼是什麼,以及爲什麼它標記了FindBugs的一個可能的錯誤? – Geek 2013-03-17 11:58:35