findbugs是乙個靜態分析工具,它檢查類或者jar 檔案,將位元組碼與一組缺陷模式進行對比以發現可能的問題。findbugs自帶檢測器,其中有60餘種bad practice,80餘種correctness,1種 internationalization,12種malicious code vulnerability,27種multithreaded correctness,23種performance,43種dodgy。
bad practice壞的實踐
一些不好的實踐,下面列舉幾個:
he:類定義了equals(),卻沒有hashcode();或類定義了equals(),卻使用
object.hashcode();或類定義了hashcode(),卻沒有equals();或類定義了hashcode(),卻使用object.equals();類繼承了equals(),卻使用object.hashcode()。
sql:statement 的execute方法呼叫了非常量的字串;或prepared statement是由乙個非常量的字串產生。
de:方法終止或不處理異常,一般情況下,異常應該被處理或報告,或被方法丟擲。
correctness一般的正確性問題
可能導致錯誤的**,下面列舉幾個:
np:空指標被引用;在方法的異常路徑裡,空指標被引用;方法沒有檢查引數是否null;null值產生並被引用;null值產生並在方法的異常路徑被引用;傳給方法乙個宣告為@nonnull的null引數;方法的返回值宣告為@nonnull實際是null。
nm:類定義了hashcode()方法,但實際上並未覆蓋父類object的hashcode();類定義了tostring()方法,但實際上並未覆蓋父類object的tostring();很明顯的方法和構造器混淆;方法名容易混淆。
sql:方法嘗試訪問乙個prepared statement的0索引;方法嘗試訪問乙個resultset的0索引。
uwf:所有的write都把屬性置成null,這樣所有的讀取都是null,這樣這個屬性是否有必要存在;或屬性從沒有被write。
internationalization國際化
當對字串使用upper或lowercase方法,如果是國際的字串,可能會不恰當的轉換。
malicious code vulnerability可能受到的惡意攻擊
如果**公開,可能受到惡意攻擊的**,下面列舉幾個:
fi:乙個類的finalize()應該是protected,而不是public的。
ms:屬性是可變的陣列;屬性是可變的hashtable;屬性應該是package protected的。
multithreaded correctness多執行緒的正確性
多執行緒程式設計時,可能導致錯誤的**,下面列舉幾個:
esync:空的同步塊,很難被正確使用。
mwn:錯誤使用notify(),可能導致illegalmonitorstateexception異常;或錯誤的
使用wait()。
no:使用notify()而不是notifyall(),只是喚醒乙個執行緒而不是所有等待的執行緒。
sc:構造器呼叫了thread.start(),當該類被繼承可能會導致錯誤。
performance效能問題
可能導致效能不佳的**,下面列舉幾個:
dm:方法呼叫了低效的boolean的構造器,而應該用boolean.valueof(…);用類似
integer.tostring(1) 代替new integer(1).tostring();方法呼叫了低效的float的構造器,應該用靜態的valueof方法。
sic:如果乙個內部類想在更廣泛的地方被引用,它應該宣告為static。
ss:如果乙個例項屬性不被讀取,考慮宣告為static。
urf:如果乙個屬性從沒有被read,考慮從類中去掉。
uuf:如果乙個屬性從沒有被使用,考慮從類中去掉。
dodgy危險的
具有潛在危險的**,可能執行期產生錯誤,下面列舉幾個:
ci:類宣告為final但宣告了protected的屬性。
dls:對乙個本地變數賦值,但卻沒有讀取該本地變數;本地變數賦值成null,卻沒有讀取該本地變數。
icast:整型數字相乘結果轉化為長整型數字,應該將整型先轉化為長整型數字再相乘。
int:沒必要的整型數字比較,如x <= integer.max_value。
np:對readline()的直接引用,而沒有判斷是否null;對方法呼叫的直接引用,而方法可能返回null。
rec:直接捕獲exception,而實際上可能是runtimeexception。
st:從例項方法裡直接修改類變數,即static屬性。
SonarQube的findbugs擴充套件
以前公司掃 用eclipse findbugs外掛程式,還擴充套件了8個自定義規則。最近有個需求,就是要把eclipse的findbugs外掛程式中自擴充套件規則整合到sonar中。安裝sonarqube7.7後,在應用市場再安裝完findbugs 一開始想到sonar自定義規則,這個比較簡單,但是...
匯出EXCEL的findBugs問題
問題不大,但是jekins上的這些東西就是煩人,也有相應的亂碼隱患.你如果不宣告編碼,它就會用作業系統預設的編碼。那麼你的專案部署到其他伺服器上的時候,就有可能發生錯誤了。所以他警告你,最好宣告乙個編碼格式。為什麼會出現這個問題,還是因為字符集編碼格式的問題.所以.我們把問題改一下,大概就是在獲取檔...
FindBugs的安裝及使用
這裡簡單介紹findbugs作為eclipse外掛程式在eclipse luna中的安裝和使用方法。在eclipse中點選help install new software.中填寫位址如下圖所示 點選ok後選擇findbugs,如下圖所示 點選next,如下圖所示 點選next,點選 i accep...