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

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