一:代碼分析工具介紹html
現有4種主流java靜態代碼分析工具(Checkstyle,FindBugs,PMD,Jtest)。參見: 經常使用 Java 靜態代碼分析工具的分析與比較,有比較全面的分析,現摘錄一部分以做備份。java
1.1 靜態代碼分析工具簡介編程
1.1.1 什麼是靜態代碼分析eclipse
靜態代碼分析是指無需運行被測代碼,僅經過分析或檢查源程序的語法、結構、過程、接口等來檢查程序的正確性,找出代碼隱藏的錯誤和缺陷,如參數不匹配,有歧義的嵌套語句,錯誤的遞歸,非法計算,可能出現的空指針引用等等。編輯器
在軟件開發過程當中,靜態代碼分析每每先於動態測試以前進行,同時也能夠做爲制定動態測試用例的參考。統計證實,在整個軟件開發生命週期中,30% 至 70% 的代碼邏輯設計和編碼缺陷是能夠經過靜態代碼分析來發現和修復的。函數
可是,因爲靜態代碼分析每每要求大量的時間消耗和相關知識的積累,所以對於軟件開發團隊來講,使用靜態代碼分析工具自動化執行代碼檢查和分析,可以極大地提升軟件可靠性並節省軟件開發和測試成本。工具
1.1.2 靜態代碼分析工具的優點測試
1. 幫助程序開發人員自動執行靜態代碼分析,快速定位代碼隱藏錯誤和缺陷。網站
2. 幫助代碼設計人員更專一於分析和解決代碼設計缺陷。編碼
3. 顯著減小在代碼逐行檢查上花費的時間,提升軟件可靠性並節省軟件開發和測試成本。
二.主流分析工具的比較分析
三. 主流java靜態分析工具之checkstyle
Checkstyle 是 SourceForge 的開源項目,經過檢查對代碼編碼格式,命名約定,Javadoc,類設計等方面進行代碼規範和風格的檢查,從而有效約束開發人員更好地遵循代碼編寫規範。
Checkstyle 提供了支持大多數常見 IDE 的插件,文本主要使用 Eclipse 中的 Checkstyle 插件。以下圖 1 所示,Checkstyle 對代碼進行編碼風格檢查,並將檢查結果顯示在 Problems 視圖中。圖中,代碼編輯器中每一個放大鏡圖標表示一個 Checkstyle 找到的代碼缺陷。開發人員可經過在 Problems 視圖中查看錯誤或警告詳細信息。
checkstyle 在eclipse的安裝:
checkstyle的更新源地址:http://eclipse-cs.sf.net/update/,也能夠從http://sourceforge.net/projects/eclipse-cs/files/ 下載最新的插件包本地進行安裝
安裝後的Preferences的顯示是
在你須要進行Checkstyle的項目上單擊右鍵,選擇properties。在彈出的對話框中選擇Checkstyle項目,若是須要Checkstyle的時候就勾選上左上角的複選框,不須要的時候反之便可。在此界面你還能夠選擇代碼規範,而且對相應的代碼規範進行配置。顯示以下:
Checkstyle的內置編程規範:
checkstyle常見錯誤解釋:
序號 輸出內容意義
序號 | 輸出內容意義 |
1. Type is missing a javadoc commentClass | 缺乏類型說明 |
2.「{」 should be on the previous line | 「{」 應該位於前一行 |
3. Methos is missing a javadoc comment | 方法前面缺乏javadoc註釋 |
4. Expected @throws tag for 「Exception」 | 在註釋中但願有@throws的說明 |
5. 「.」 Is preceeded with whitespace | 「.」 前面不能有空格 |
6. 「.」 Is followed by whitespace | 「.」 後面不能有空格 |
7. 「=」 is not preceeded with whitespace | 「=」 前面缺乏空格 |
8. 「=」 is not followed with whitespace | 「=」 後面缺乏空格 |
9. 「}」 should be on the same line | 「}」 應該與下條語句位於同一行 |
10. Unused @param tag for 「unused」 | 沒有參數「unused」,不需註釋 |
11. Variable 「CA」 missing javadoc | 變量「CA」缺乏javadoc註釋 |
12. Line longer than 80characters | 行長度超過80 |
13. Line contains a tab character | 行含有」tab」 字符 |
14. Redundant 「Public」 modifier | 冗餘的「public」 modifier |
15. Final modifier out of order with the JSL suggestion | Final modifier的順序錯誤 |
16. Avoid using the 「.*」 form of importImport | 格式避免使用「.*」 |
17. Redundant import from the same package | 從同一個包中Import內容 |
18. Unused import-java.util.listImport | 進來的java.util.list沒有被使用 |
19. Duplicate import to line 13 | 重複Import同一個內容 |
20. Import from illegal package | 從非法包中 Import內容 |
21.「while」 construct must use 「{}」 | 「while」 語句缺乏「{}」 |
22. Variable 「sTest1」 must be private and have accessor method | 變量「sTest1」應該是private的,而且有調用它的方法 |
23. Variable 「ABC」 must match pattern 「^[a-z][a-zA-Z0-9]*$」 | 變量「ABC」不符合命名規則「^[a-z][a-zA-Z0-9]*$」 |
24.「(」 is followed by whitespace | 「(」 後面不能有空格 |
25.「)」 is proceeded by whitespace | 「)」 前面不能有空格 |
參考網站: