FindBugs的Bug種類說明

2021-09-01 01:29:59 字數 3506 閱讀 1541

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()。

sqlstatement 的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...