Findbugs反模式的分享
FindBugs解釋
FindBugs 是一個靜態分析工具,它檢查類或者 JAR 文件,將字節碼與一組缺陷模式進行對比以發現可能的問題。之所以叫做靜態分析工具,是因為它在不實際運行程序的情況對軟件進行分析。使用findbugs有很多種方式,從 GUI、從命令行、使用 Ant、作為 Eclipse 插件程序和使用 Maven,甚至作為hudson持續集成的插件。
findbugs自己定義了一系列的檢測器,1.3.9版本的檢測器有83種Bad practice(不好的習慣),133種Correctness(正確性),2種Experimental(實驗性問題),1種 Internationalization(國際化問題),12種Malicious code vulnerability(惡意的代碼),41種Multithreaded correctness(線程問題),27種Performance(性能問題),9種Security(安全性問題),62種Dodgy(狡猾的問題)。
可能大家更感興趣的是它的工作原理,我們可以首先看一下eclipse插件下面的lib包:

其中的bcel.jar和asm-xx.jar都是對java字節碼(通過命令javap -c 類名 反編譯class文件)的操作,原理都是在類被裝載虛擬機之前,動態修改類(可以直接創造類,也就是說不經過java編譯器那一步),bcel是apache下面的一個開源項目,而asm是由法國某電信公司的研發工程師負責。
在公司內部推廣findbugs的時候遇到一些阻力,其中有一個很重要的原因就是很多人認為黃色臭蟲沒有多大用處,為此我歷時一個月對公司內部的一些代碼進行了解釋,大約有50多種,沒用弄完,因為工作量實在太大,有些bug我自己都要想半天,還要查找很多資料才能說服別人,文檔詳見附件,當然都是去掉了公司業務和邏輯的,希望分享出來對有些人有用。
【編輯推薦】