在運行程序前我們可以通過編譯來發現問題,但這樣是遠遠不夠的。這是因爲在編譯期間僅捕獲到非常小的錯誤範圍,即語法錯誤,無效引用等。當程序包含編譯錯誤時,IDE會發出警告,但它無法防範其他類型的錯誤,例如運行時錯誤或邏輯錯誤。
通過使用靜態分析工具SpotBugs,瀏覽代碼以查找某些“已知的壞味道”:可能會導致偶發性/間歇性問題,性能不佳等的事物。這些問題很難通過測試找到,因此通過檢查通常是唯一可行的方法。擁有一個可以自動執行這些檢查的工具,以便可以在每次更改時進行檢查,從而防止代碼變得越來越差。
什麼是靜態分析
與查看源代碼的Java編譯器不同,靜態分析會檢查Java字節碼(已編譯的.class文件)是否存在錯誤模式。錯誤模式是一種經常容易出錯的代碼表達式/習慣用法。錯誤模式的產生可能有多種原因,其中包括:
- 錯誤使用編程語言的某些特性
- 誤用的API方法
- 在維護期間修改代碼時誤解變量
- 錯別字,使用錯誤的運算符等
SpotBugs定義了10個Bug模式:
- Bad practice 常見代碼錯誤,違反推薦和基本編碼規範。包括哈希代碼和等號問題、可克隆的習慣用法、丟棄的異常、可序列化的問題和finalize的誤用等。
- Correctness 可能的錯誤-一個明顯的編碼錯誤,導致代碼可能不是開發人員想要的。
- Experimental 實驗性和未經充分審查的錯誤模式
- Internationalization 與國際化和語言環境有關的代碼缺陷
- Malicious code vulnerability 易受不可信代碼攻擊的代碼
- Multithreaded correctness 與線程、鎖和Volatile有關的代碼缺陷
- Bogus random noise 僞隨機噪聲:用於數據挖掘實驗中的控制,而不是用於發現軟件中的實際錯誤
- Performance 不一定不正確但可能效率低下的代碼
- Security 使用不受信任的輸入,可能會造成可遠程利用的安全漏洞。
- Dodgy code 混亂、異常或以導致錯誤的方式編寫的代碼。
更詳細的內容可瀏覽官網介紹。
SpotBugs Eclipse插件
在Eclipse裏安裝SpotBugs插件很容易。在“Eclipse Marketplace”中搜索“ SpotBugs”。應該在列表頂部看到SpotBugs,然後一步步安裝即可。最後需要重啓下Eclipse。
SpotBugs 使用
在運行分析之前,讓我們打開SpotBugs視圖。
在“Windows-Show view-Others”中輸入Bugs。選擇兩個SpotBugs視圖,然後單擊打開它們。
在Package Explorer中右鍵單擊項目,然後從上下文菜單中選擇SpotBugs-> Find Bugs。
分析結束後,結果將顯示在Bug Explorer視圖中。
SpotBugs包含有關每個問題的更多信息。要查看它,請右鍵單擊該錯誤,然後從彈出菜單中選擇“ Show Bug Info ”。這將在“Bug Info”視圖中打開一個信息頁面:
總結
在這篇文章中介紹瞭如何在Eclipse中安裝靜態分析工具,並配置和應用到我們的Java項目。儘管SpotBugs不會消除程序中的所有錯誤,但肯定會減少在生產中發現的錯誤數量。