Eclipse FindBugs插件安裝與使用

 

前言:

白盒測試中的靜態檢查通常是檢查編碼標準規範,錯誤列表。編碼規範每每團隊會根據本身的經驗和風格進行設置一些規範。如今不少IDE工具都會在編輯代碼的時候實時的提醒是否符合代碼風格。錯誤列表,通常是代碼潛在的bug,因爲某種代碼寫法雖然沒有語法錯誤,可是可能存在錯誤,好比會致使線程死鎖。這些都是錯誤列表應該檢查的。java

靜態檢查的可操做方式有人工代碼走查和軟件代碼掃描。使用軟件對咱們的代碼進行掃描,查找出潛在的問題。如今有許多商業的工具可以進行掃描,好比Parasoft JTest、Software Analyzer、pclint等工具,每每不一樣的工具會針對不一樣的語言。固然也有不少開源的工具。在這裏java方面主要推薦Findbugs。Findbugs能夠在ANT/GUI/ECLIPSE三個環境中運行,同時也能夠編寫本身的檢測器,功能比較完善。咱們平時能夠收集本身的或者是別人的開發經驗,把它作成檢測器來完善Findbugs的檢測體系。軟件掃描的特色是,機器掃描、效率高,可是沒不夠靈活,擴展比較負責。正則表達式

何謂FindBugs?

FindBugs 是一個靜態分析工具,它檢查類或者 JAR 文件,將字節碼與一組缺陷模式進行對比以發現可能的問題。有了靜態分析工具,就能夠在不實際運行程序的狀況對軟件進行分析。不是經過分析類文件的形式或結構來肯定程序的意圖,而是一般使用 Visitor 模式來鑑別代碼是否符合一些固定的規範。數據庫

Findbugs自帶檢測器,其中有60餘種Bad practice,80餘種Correctness,1種 Internationalization,12種Malicious code vulnerability,27種Multithreaded correctness,23種Performance,43種Dodgy。咱們還能夠本身配置檢查規則(作哪些檢查,不作哪些檢查),也能夠本身來實現獨有的校驗規則(用戶自定義特定的bug模式須要繼承它的接口,編寫本身的校驗類,屬於高級技巧)。編程

安裝Findbugs

一、在線安裝:在Eclipse的插件安裝地址中輸入http://findbugs.cs.umd.edu/eclipse並一路「next」就可安裝成功。
二、離線安裝:跨域

使用Findbugs

源碼:https://sourceforge.net/projects/findbugs/files/findbugs/3.0.1/數組

一、 選擇指定的包或者類進行findbug, 右鍵包或者類,在彈出的對話框中選擇Find bugs -> Find Bugs便可。
二、Show view, 中添加findbugs explorer , 能夠看到對應的錯誤信息
三、找出的bug有3中顏色, 黑色的臭蟲標誌是分類, 紅色的臭蟲表示嚴重bug發現後必須修改代碼,橘黃色的臭蟲表示潛在警告性bug 儘可能修改。安全

配置FindBugs

一、 Run FindBugs Automatically開關cookie

當此項選中後,FindBugs將會在你修改Java類時自動運行,如你設置了Eclipse自動編譯開關後,當你修改完Java文件保存,FindBugs就會運行,並將相應的信息顯示出來。
當此項沒有選中,你只能每次在須要的時候本身去運行FindBugs來檢查你的代碼。數據結構

2.、Minimum priority to report選擇項多線程

這個選擇項是讓你選擇哪一個級別的信息進行顯示,有Low、Medium、High三個選擇項能夠選擇,很相似於Log4J的級別設置啦。 好比:

你選擇了High選擇項,那麼只有是High級別的提示信息纔會被顯示。
你選擇了Medium選擇項,那麼只有是Medium和High級別的提示信息纔會被顯示。
你選擇了Low選擇項,那麼全部級別的提示信息都會被顯示。

三、Enable bug categories選擇項

在這裏是一些顯示Bug分類的選擇:

Correctness關於代碼正確性相關方面的
Performance關於代碼性能相關方面的
Internationalization關於代碼國際化相關方面的
Multithreaded correctness關於代碼多線程正確性相關方面的
Style關於代碼樣式相關方面的
Malicious code vulnerability關於惡意破壞代碼相關方面的

好比:若是你把Style的檢查框去掉不選擇中它,那麼與Style分類相關的警告信息就不會顯示了。其它的相似。

4.、Select bug patterns to check for選擇項

在這裏你能夠選擇所要進行檢查的相關的Bug Pattern條目

能夠從Bug codes、Detector name、Detector description中看到相應的是要檢查哪些方面的內容,你能夠根據須要選擇或去掉相應的 檢查條件。

詳細說明

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屬性。

缺陷中英文對照表

rule.findbugs.IMSE_DONT_CATCH_IMSE.name=不良實踐 - 捕獲可疑IllegalMonitorStateException
rule.findbugs.BX_BOXING_IMMEDIATELY_UNBOXED.name=性能 - 基本類型包裝以後馬上解包
rule.findbugs.IJU_SETUP_NO_SUPER.name=使用錯誤 - TestCase定義的setUp沒有調用super.setUp()
rule.findbugs.TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED.name=使用錯誤 - 某個值使用了註解限制類型,可是這個限制永遠不會發生
rule.findbugs.TLW_TWO_LOCK_WAIT.name=多線程錯誤 - 等待兩個被持有的鎖
rule.findbugs.RV_01_TO_INT.name=使用錯誤 - 0至1的隨機數被當作整數0
rule.findbugs.NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE.name=高危 - 參數必須非null可是標記爲可爲null
rule.findbugs.RV_ABSOLUTE_VALUE_OF_RANDOM_INT.name=使用錯誤 - 嘗試計算32位隨機整數的絕對值
rule.findbugs.EC_INCOMPATIBLE_ARRAY_COMPARE.name=使用錯誤 - 使用equals()比較不兼容的數組
rule.findbugs.UL_UNRELEASED_LOCK_EXCEPTION_PATH.name=多線程錯誤 - 方法沒有在全部異常路徑釋放鎖
rule.findbugs.SE_NONSTATIC_SERIALVERSIONID.name=不良實踐 - serialVersionUID不是static的
rule.findbugs.UCF_USELESS_CONTROL_FLOW.name=高危 - 無用控制流
rule.findbugs.BC_IMPOSSIBLE_CAST.name=使用錯誤 - 不可能的轉換
rule.findbugs.XSS_REQUEST_PARAMETER_TO_SEND_ERROR.name=安全風險 - servlet的反射致使跨站腳本漏洞
rule.findbugs.DM_NEW_FOR_GETCLASS.name=性能 - 僅爲了得到一個方法就建立了一個對象
rule.findbugs.OBL_UNSATISFIED_OBLIGATION.name=試驗 - 方法可能在清理流或資源時失敗
rule.findbugs.UW_UNCOND_WAIT.name=多線程錯誤 - 無條件等待
rule.findbugs.DLS_DEAD_LOCAL_STORE_OF_NULL.name=高危 - 把null設置給不會用到的局部變量
rule.findbugs.NM_CLASS_NAMING_CONVENTION.name=類名應該以大寫字母開頭
rule.findbugs.RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN.name=使用錯誤 - 懷疑對兩個布爾值的引用進行比較
rule.findbugs.MWN_MISMATCHED_NOTIFY.name=多線程錯誤- 不匹配的notify()
rule.findbugs.NM_VERY_CONFUSING.name=錯誤 - 很是容易迷惑的方法名
rule.findbugs.FI_NULLIFY_SUPER.name=不良實踐 - 空Finalizer禁用了超類的finalizer
rule.findbugs.MTIA_SUSPECT_STRUTS_INSTANCE_FIELD.name=高危 - 繼承了struts Action的類使用了實例變量
rule.findbugs.DM_STRING_CTOR.name=性能 - 方法調用了效率很低的new String(String)構造方法
rule.findbugs.STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE.name=多線程錯誤 - 調用靜態DateFormat
rule.findbugs.NP_NULL_PARAM_DEREF_NONVIRTUAL.name=使用錯誤 - 非虛擬方法調用向非空參數傳入了null
rule.findbugs.FI_EMPTY.name=不良實踐 - 應該刪除空的finalizer
rule.findbugs.CD_CIRCULAR_DEPENDENCY.name=試驗 - 類間存在循環引用
rule.findbugs.EC_UNRELATED_TYPES.name=使用錯誤 - 使用equals()比較不一樣類型
rule.findbugs.EI_EXPOSE_STATIC_REP2.name=惡意代碼漏洞 - 把可變對象保存到靜態字段中可能會暴露內部靜態狀態
rule.findbugs.DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY.name=錯誤 - 對數組執行toString
rule.findbugs.SIC_INNER_SHOULD_BE_STATIC_ANON.name=性能 - 能夠重構成一個靜態內部類
rule.findbugs.STI_INTERRUPTED_ON_UNKNOWNTHREAD.name=錯誤 - 在thread實例上調用了靜態Thread.interrupted()方法
rule.findbugs.CN_IDIOM_NO_SUPER_CALL.name=不良實踐 - clone方法沒有調用super.clone()
rule.findbugs.VA_FORMAT_STRING_BAD_ARGUMENT.name=錯誤用法 - 格式化字符串佔位符與傳入的參數不匹配
rule.findbugs.EQ_DOESNT_OVERRIDE_EQUALS.name=高危 - 類沒有覆蓋父類的equals方法
rule.findbugs.BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY.name=錯誤用法 - 集合轉換爲數組元素時發生的類型轉換錯誤
rule.findbugs.SE_NO_SUITABLE_CONSTRUCTOR_FOR_EXTERNALIZATION.name=不良實踐 - 類是可擴展的,可是沒有提供無參數的構造方法
rule.findbugs.TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALWAYS_SINK.name=錯誤用法 - 數值須要類型標示,可是卻標記爲未知
rule.findbugs.SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS.name=性能 - 能夠籌夠成一個靜態內部類
rule.findbugs.EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS.name=不良實踐 - equals檢測不兼容的參數操做
rule.findbugs.RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED.name=錯誤用法 - 忽略了putIfAbsent的返回值,傳遞給putIfAbsent的值被重用
rule.findbugs.STCAL_INVOKE_ON_STATIC_CALENDAR_INSTANCE.name=多線程錯誤 - 調用靜態Calendar
rule.findbugs.MS_CANNOT_BE_FINAL.name=惡意代碼漏洞 - 字段不是final的,不能防止惡意代碼的攻擊
rule.findbugs.IS_INCONSISTENT_SYNC.name=多線程錯誤 - 不一致的同步
rule.findbugs.SE_NO_SERIALVERSIONID.name=不良實踐 - 類是可序列化的,可是沒有定義serialVersionUID
rule.findbugs.EI_EXPOSE_REP2.name=惡意代碼漏洞 - 可能暴露內部實現,經過與可變對象引用協做
rule.findbugs.NM_METHOD_CONSTRUCTOR_CONFUSION.name=錯誤用法 - 明顯的方法/構造方法混淆
rule.findbugs.ICAST_INTEGER_MULTIPLY_CAST_TO_LONG.name=高危 - 整形乘法的結果轉換爲long型
rule.findbugs.QF_QUESTIONABLE_FOR_LOOP.name=高危 - for循環中存在複雜,微妙或者錯誤的自增
rule.findbugs.DLS_DEAD_STORE_OF_CLASS_LITERAL.name=錯誤用法 - 類中保存了無用字符
rule.findbugs.NM_FUTURE_KEYWORD_USED_AS_MEMBER_IDENTIFIER.name=不良實踐 - 使用了將來java版本中成爲關鍵字的標識
rule.findbugs.BC_VACUOUS_INSTANCEOF.name=高危 - instanceof會一直返回true
rule.findbugs.INT_VACUOUS_BIT_OPERATION.name=高危 - 在整形上進行位操做時有一些位上出現空洞
rule.findbugs.NP_NULL_INSTANCEOF.name=錯誤用法 - 一個已知的null值被檢測它是不是一個類型的實例
rule.findbugs.SIC_THREADLOCAL_DEADLY_EMBRACE.name=錯誤用法 - 非靜態內部類和ThreadLocal的致命結合
rule.findbugs.EQ_UNUSUAL.name=高危 - 罕見的equals方法
rule.findbugs.IJU_NO_TESTS.name=錯誤用法 - TestCase沒有任何測試
rule.findbugs.EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC.name=錯誤用法 - equals方法覆蓋了父類的equals可能功能不符
rule.findbugs.XFB_XML_FACTORY_BYPASS.name=高危 - 方法直接調用了xml接口的一個具體實現
rule.findbugs.SWL_SLEEP_WITH_LOCK_HELD.name=多線程錯誤 - 方法在得到鎖時調用了Thread.sleep()
rule.findbugs.CN_IDIOM.name=不良實踐 - 類實現了Cloneable ,可是沒有定義或使用clone方法
rule.findbugs.WA_AWAIT_NOT_IN_LOOP.name=多線程錯誤 - 未在循環中使用的Condition.await()
rule.findbugs.DM_FP_NUMBER_CTOR.name=性能 - 方法調用了低效的浮點書構造方法;應該使用靜態的valueOf代替
rule.findbugs.SF_SWITCH_NO_DEFAULT.name=Switch語句中沒有包含default
rule.findbugs.NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE.name=高危 - 調用返回返回值可能出現null值
rule.findbugs.NP_CLONE_COULD_RETURN_NULL.name=不良實踐 - Clone方法可能返回null
rule.findbugs.MS_OOI_PKGPROTECT.name=惡意代碼漏洞 - 屬性應該從接口中移除並將訪問權限設置爲包保護
rule.findbugs.DM_BOXED_PRIMITIVE_TOSTRING.name=性能 - 方法使用了裝箱的基本類型只爲了調用toString
rule.findbugs.EQ_ABSTRACT_SELF.name=不良實踐 - 抽象類定義了協變的equals方法
rule.findbugs.DM_STRING_TOSTRING.name=性能 - 方法調用了String的toString()方法
rule.findbugs.SE_METHOD_MUST_BE_PRIVATE.name=錯誤用法 - 方法必須是private的爲了讓序列化正常工做
rule.findbugs.DL_SYNCHRONIZATION_ON_BOOLEAN.name=多線程錯誤 - 在Boolean上使用同步可能致使死鎖
rule.findbugs.UWF_UNWRITTEN_FIELD.name=錯誤用法 - 未賦值屬性
rule.findbugs.IS2_INCONSISTENT_SYNC.name=多線程錯誤 - 不一致的同步
rule.findbugs.IM_AVERAGE_COMPUTATION_COULD_OVERFLOW.name=高危 - 計算平均值可能溢出
rule.findbugs.BIT_SIGNED_CHECK_HIGH_BIT.name=錯誤用法 - 檢查位運算的符號
rule.findbugs.FL_MATH_USING_FLOAT_PRECISION.name=錯誤用法 - 方法進行數學運算時使用了浮點數的精度
rule.findbugs.WS_WRITEOBJECT_SYNC.name=多線程錯誤 - 類的writeObject()方法是同步的,可是沒有作其餘事情
rule.findbugs.RV_RETURN_VALUE_IGNORED.name=錯誤用法 - 方法忽略了返回值
rule.findbugs.SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE.name=安全風險 - 很是量的字符串傳遞給方法執行SQL語句
rule.findbugs.JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS.name=不良實踐 - 不可變的類的屬性應該是final
rule.findbugs.AM_CREATES_EMPTY_ZIP_FILE_ENTRY.name=不良實踐 - 建立了一個空的zip文件的入口
rule.findbugs.DM_NEXTINT_VIA_NEXTDOUBLE.name=性能 - 使用Random的nextInt方法來得到一個隨機整數,而不是nextDouble
rule.findbugs.UI_INHERITANCE_UNSAFE_GETRESOURCE.name=不良實踐 - 若是類被擴展,GetResource的使用可能就是不安全的
rule.findbugs.SIO_SUPERFLUOUS_INSTANCEOF.name=錯誤用法 - 沒必要要的類型檢測使用instanceof操做符
rule.findbugs.EQ_OTHER_NO_OBJECT.name=錯誤用法 - equals()方法定義,可是沒有覆蓋equals(Object)
rule.findbugs.USM_USELESS_ABSTRACT_METHOD.name=試驗 - 抽象方法已經在實現的接口中定義了
rule.findbugs.MTIA_SUSPECT_SERVLET_INSTANCE_FIELD.name=高危 - 擴展Servlet的類使用了實例變量
rule.findbugs.DM_USELESS_THREAD.name=多線程錯誤 - 使用默認的空run方法建立了一個線程
rule.findbugs.ML_SYNC_ON_UPDATED_FIELD.name=多線程錯誤 - 方法在一個修改了的屬性上進行了同步
rule.findbugs.CO_SELF_NO_OBJECT.name=不良實踐 - 協變的compareTo()定義
rule.findbugs.BC_UNCONFIRMED_CAST.name=高危 - 未檢查/未證明的類型轉換
rule.findbugs.FI_FINALIZER_NULLS_FIELDS.name=不良實踐 - Finalizer空屬性
rule.findbugs.BIT_AND.name=錯誤用法 - 不兼容的位掩碼(BIT_AND)
rule.findbugs.FE_FLOATING_POINT_EQUALITY.name=高危 - 測試浮點數相等
rule.findbugs.TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEVER_SINK.name=錯誤用法 - 值不要求有類型標示,可是標記爲未知
rule.findbugs.NP_NULL_PARAM_DEREF.name=錯誤用法 - 方法調用把null傳遞給一個非null參數
rule.findbugs.FB_MISSING_EXPECTED_WARNING.name=試驗 - findbugs丟失了期待或須要的警告
rule.findbugs.DMI_INVOKING_HASHCODE_ON_ARRAY.name=錯誤用法 - 在數組上調用了hashCode
rule.findbugs.QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT.name=錯誤用法 - 方法在布爾表達式中分配了boolean文字
rule.findbugs.SA_FIELD_SELF_COMPARISON.name=錯誤用法 - 屬性本身與本身進行了比較
rule.findbugs.UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR.name=錯誤用法 - 父類的構造方法調用未初始化屬性的方法
rule.findbugs.ES_COMPARING_PARAMETER_STRING_WITH_EQ.name=不良實踐 - 比較字符串參數使用了 == 或 !=
rule.findbugs.INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE.name=錯誤用法 - 錯誤比較非負值與負數
rule.findbugs.INT_BAD_COMPARISON_WITH_SIGNED_BYTE.name=錯誤用法 - 錯誤比較帶符號的byte
rule.findbugs.IO_APPENDING_TO_OBJECT_OUTPUT_STREAM.name=錯誤用法 - 嘗試向一個對象輸出流添加信息
rule.findbugs.FI_MISSING_SUPER_CALL.name=不良實踐 - Finalizer沒有調用父類的finalizer
rule.findbugs.VA_FORMAT_STRING_EXTRA_ARGUMENTS_PASSED.name=錯誤用法 - 傳遞了多餘實際使用的格式化字符串的參數
rule.findbugs.HE_EQUALS_USE_HASHCODE.name=不良實踐 - 類定義了equals(),但使用了Object.hashCode()
rule.findbugs.IJU_BAD_SUITE_METHOD.name=錯誤用法 - TestCase聲明瞭一個錯誤的suite方法
rule.findbugs.DMI_CONSTANT_DB_PASSWORD.name=安全風險 - 硬編碼了數據庫密碼
rule.findbugs.REC_CATCH_EXCEPTION.name=高危 - 捕獲了沒有拋出的異常
rule.findbugs.PS_PUBLIC_SEMAPHORES.name=高危 - 類在公用接口中暴露了同步和信號
rule.findbugs.EC_UNRELATED_INTERFACES.name=錯誤用法 - 調用equals()比較不一樣的接口類型
rule.findbugs.UCF_USELESS_CONTROL_FLOW_NEXT_LINE.name=錯誤用法 - 執行到下一行的無用流程控制
rule.findbugs.LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE.name=試驗 - OpenJDK中存在潛在的丟失logger的風險,由於弱引用
rule.findbugs.NP_UNWRITTEN_FIELD.name=錯誤用法 - 讀取未初始化的屬性
rule.findbugs.DMI_UNSUPPORTED_METHOD.name=高危 - 調用不支持的方法
rule.findbugs.RCN_REDUNDANT_COMPARISON_OF_NULL_AND_NONNULL_VALUE.name=高危 - 重複比較非空值和null
rule.findbugs.EC_BAD_ARRAY_COMPARE.name=錯誤用法 - 調用equals(),與==效果同樣
rule.findbugs.EI_EXPOSE_REP.name=惡意代碼漏洞 - 可能經過返回一個可變對象的引用暴露了內部實現
rule.findbugs.NP_DEREFERENCE_OF_READLINE_VALUE.name=高危 - 沒有判斷readLine()的結果是否爲空
rule.findbugs.UPM_UNCALLED_PRIVATE_METHOD.name=性能 - 從未用到的私有方法
rule.findbugs.NP_NULL_ON_SOME_PATH.name=錯誤用法 - 可能出現空指針引用
rule.findbugs.NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT.name=不良實踐 - equals()方法沒有檢測null參數
rule.findbugs.EC_NULL_ARG.name=錯誤用法 - 使用空參數調用equals()
rule.findbugs.SE_BAD_FIELD_STORE.name=不良實踐 - 非序列化值保存在序列化類的實例變量中
rule.findbugs.VO_VOLATILE_REFERENCE_TO_ARRAY.name=多線程錯誤 - 數組的volatile引用不會把數組元素也當作volatile來引用
rule.findbugs.NP_SYNC_AND_NULL_CHECK_FIELD.name=多線程錯誤 - 同步和空值檢測發生在同一個屬性上
rule.findbugs.DM_EXIT.name=不良實踐 - 方法調用了System.exit(…)
rule.findbugs.RC_REF_COMPARISON.name=不良實踐 - 懷疑進行了引用比較
rule.findbugs.SE_NO_SUITABLE_CONSTRUCTOR.name=不良實踐 - 類是可序列化的,可是父類沒有定義無參數構造方法
rule.findbugs.DC_DOUBLECHECK.name=多線程錯誤 - 可能對屬性進行了雙重檢測
rule.findbugs.DMI_LONG_BITS_TO_DOUBLE_INVOKED_ON_INT.name=錯誤用法 - 在int上調用了Double.longBitsToDouble
rule.findbugs.RpC_REPEATED_CONDITIONAL_TEST.name=錯誤用法 - 重複判斷條件
rule.findbugs.WMI_WRONG_MAP_ITERATOR.name=性能 - keySet迭代是低效的,使用entrySet代替
rule.findbugs.DLS_DEAD_LOCAL_STORE.name=高危 - 未用的局部變量
rule.findbugs.INT_BAD_REM_BY_1.name=錯誤用法 - 整數剩餘模1
rule.findbugs.RV_RETURN_VALUE_IGNORED_BAD_PRACTICE.name=不良實踐 - 方法忽略異常返回值
rule.findbugs.SA_LOCAL_SELF_ASSIGNMENT.name=高危 - 局部變量的自我賦值
rule.findbugs.MS_SHOULD_BE_FINAL.name=惡意代碼漏洞 - 屬性不是final,可是應該設置成final
rule.findbugs.SIC_INNER_SHOULD_BE_STATIC.name=性能 - 應該是一個靜態內部類
rule.findbugs.NP_GUARANTEED_DEREF.name=錯誤用法 - null值必定會被調用
rule.findbugs.SE_READ_RESOLVE_MUST_RETURN_OBJECT.name=不良實踐 - readResolve方法必須返回Object
rule.findbugs.NP_LOAD_OF_KNOWN_NULL_VALUE.name=高危 - 加載了已知的null值
rule.findbugs.BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERCION.name=性能 - 基本數據被裝箱又被拆箱
rule.findbugs.CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE.name=不良實踐 - 類定義了clone()但沒有實現Cloneable
rule.findbugs.CO_ABSTRACT_SELF.name=不良實踐 - 抽象類定義了協變的compareTo()方法
rule.findbugs.BAC_BAD_APPLET_CONSTRUCTOR.name=試驗 - 錯誤的Applet構造方法依賴未初始化的AppletStub
rule.findbugs.EQ_GETCLASS_AND_CLASS_CONSTANT.name=不良實踐 - equals方法由於子類失敗
rule.findbugs.DB_DUPLICATE_SWITCH_CLAUSES.name=高危 - 在兩個switch語句中使用了相同的代碼
rule.findbugs.DB_DUPLICATE_BRANCHES.name=高危 - 在兩個分支中使用了相同的代碼
rule.findbugs.UOE_USE_OBJECT_EQUALS.name=試驗 - 在final類上調用了equals,可是沒有覆蓋Object的equals方法
rule.findbugs.FI_USELESS.name=不良實踐 - Finalizer除了調用父類的finalizer之外什麼也沒作
rule.findbugs.NP_ALWAYS_NULL.name=錯誤用法 - 調用了null指針
rule.findbugs.DMI_VACUOUS_SELF_COLLECTION_CALL.name=錯誤用法 - 集合的調用不能被感知
rule.findbugs.DLS_DEAD_LOCAL_STORE_IN_RETURN.name=錯誤用法 - 返回語句中的無用的賦值
rule.findbugs.IJU_ASSERT_METHOD_INVOKED_FROM_RUN_METHOD.name=錯誤用法 - 在run方法中的JUnit檢驗不能報告給JUnit
rule.findbugs.DMI_EMPTY_DB_PASSWORD.name=安全風險 - 空的數據庫密碼
rule.findbugs.DM_BOOLEAN_CTOR.name=性能 - 方法調用了低效的Boolean構造方法;使用Boolean.valueOf(…)代替
rule.findbugs.BC_IMPOSSIBLE_DOWNCAST.name=錯誤用法 - 不可能轉型
rule.findbugs.BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS.name=不良實踐 - Equals方法不該該假設任何有關參數類型的事宜
rule.findbugs.RV_EXCEPTION_NOT_THROWN.name=錯誤用法 - 異常建立後就丟棄了,沒有拋出
rule.findbugs.VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG.name=錯誤用法 - 基本類型數組傳遞給一個期待可變對象類型參數的方法
rule.findbugs.LI_LAZY_INIT_UPDATE_STATIC.name=多線程錯誤 - 錯誤的延遲初始化和更新靜態屬性
rule.findbugs.SA_FIELD_SELF_ASSIGNMENT.name=錯誤用法 - 屬性自身賦值
rule.findbugs.EQ_ALWAYS_FALSE.name=錯誤用法 - equals方法一直返回false
rule.findbugs.DMI_RANDOM_USED_ONLY_ONCE.name=不良實踐 - Random對象建立後只用了一次
rule.findbugs.NM_CLASS_NOT_EXCEPTION.name=不良實踐 - Class沒有繼承Exception,雖然名字像一個異常
rule.findbugs.SA_LOCAL_DOUBLE_ASSIGNMENT.name=高危 - 給局部變量雙重賦值
rule.findbugs.NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS.name=錯誤用法 - 方法調用傳遞null給非空參數 (ALL_TARGETS_DANGEROUS)
rule.findbugs.NP_TOSTRING_COULD_RETURN_NULL.name=不良實踐 - toString方法可能返回null
rule.findbugs.BC_BAD_CAST_TO_ABSTRACT_COLLECTION.name=高危 - 轉換成抽象集合值得懷疑
rule.findbugs.NM_LCASE_HASHCODE.name=類定義了hashcode(); 應該是hashCode()吧?
rule.findbugs.RU_INVOKE_RUN.name=多線程錯誤 - 在線程中調用了run(你的意思是再啓動一次麼?)
rule.findbugs.DMI_INVOKING_TOSTRING_ON_ARRAY.name=錯誤用法 - 調用了數組的toString
rule.findbugs.NM_METHOD_NAMING_CONVENTION.name=方法名應該以小寫字母開頭
rule.findbugs.RCN_REDUNDANT_COMPARISON_TWO_NULL_VALUES.name=高危 - 重複比較兩個null值
rule.findbugs.SA_LOCAL_SELF_COMPUTATION.name=錯誤用法 - 對一個變量進行無心義的自我計算 (好比 x & x)
rule.findbugs.MS_MUTABLE_HASHTABLE.name=惡意代碼漏洞 - 屬性是可變的Hashtable
rule.findbugs.RV_DONT_JUST_NULL_CHECK_READLINE.name=高危 - 方法丟掉了readLine的結果,在檢測它是非空以後。
rule.findbugs.ES_COMPARING_STRINGS_WITH_EQ.name=不良實踐 - 使用== 或 !=比較String
rule.findbugs.DL_SYNCHRONIZATION_ON_SHARED_CONSTANT.name=多線程錯誤 - 同步內部String可能致使死鎖
rule.findbugs.MF_METHOD_MASKS_FIELD.name=錯誤用法 - 方法定義了一個變量,與實例變量同名。
rule.findbugs.EQ_SELF_USE_OBJECT.name=錯誤用法 - 協變equals()方法定義,繼承了Object.equals(Object)
rule.findbugs.ICAST_INT_CAST_TO_FLOAT_PASSED_TO_ROUND.name=錯誤用法 - int值轉換成float,而後傳遞給Math.round
rule.findbugs.GC_UNRELATED_TYPES.name=錯誤用法 - 泛型參數與方法參數沒有相互關係
rule.findbugs.BC_IMPOSSIBLE_INSTANCEOF.name=錯誤用法 - instanceof一直返回false
rule.findbugs.SBSC_USE_STRINGBUFFER_CONCATENATION.name=性能 - 方法在循環中使用+進行字符串拼接
rule.findbugs.ICAST_INT_CAST_TO_DOUBLE_PASSED_TO_CEIL.name=錯誤用法 - int轉換成double,而後傳遞給Math.ceil
rule.findbugs.UG_SYNC_SET_UNSYNC_GET.name=多線程錯誤 - 未同步的getter方法,同步的setter方法
rule.findbugs.RE_BAD_SYNTAX_FOR_REGULAR_EXPRESSION.name=錯誤用法 - 非法的正則表達式
rule.findbugs.SA_FIELD_SELF_COMPUTATION.name=錯誤用法 - 無心義的自我計算 (好比 x & x)
rule.findbugs.DMI_SCHEDULED_THREAD_POOL_EXECUTOR_WITH_ZERO_CORE_THREADS.name=錯誤用法 - 建立了沒有任何線程的ScheduledThreadPoolExecutor
rule.findbugs.DMI_USELESS_SUBSTRING.name=高危 - 調用substring(0)會返回原值
rule.findbugs.IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTER_METHOD.name=高危 - 被繼承的或外部的方法的模棱兩可的調用
rule.findbugs.OS_OPEN_STREAM.name=不良實踐 - 方法可能在關閉流時失敗
rule.findbugs.HE_INHERITS_EQUALS_USE_HASHCODE.name=不良實踐 - 類繼承了equals(),但使用了Object.hashCode()
rule.findbugs.SE_NONFINAL_SERIALVERSIONID.name=不良實踐 - serialVersionUID不是final的
rule.findbugs.EQ_SELF_NO_OBJECT.name=不良實踐 - 協變equals()方法定義
rule.findbugs.SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH.name=因爲switch語句致使的無用存儲
rule.findbugs.SW_SWING_METHODS_INVOKED_IN_SWING_THREAD.name=不良實踐 - 某些swing方法須要在swing線程中調用
rule.findbugs.VA_FORMAT_STRING_ILLEGAL.name=錯誤用法 - 非法的格式化字符串
rule.findbugs.DM_NUMBER_CTOR.name=性能 - 方法調用低效的數字構造方法;使用靜態valueOf代替
rule.findbugs.RV_REM_OF_RANDOM_INT.name=高危 - 其他32位帶符號隨機整數
rule.findbugs.EQ_COMPARING_CLASS_NAMES.name=錯誤用法 - equals方法比較類名而不是比較類
rule.findbugs.ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD.name=高危 - 經過一個實例方法更新靜態屬性
rule.findbugs.TQ_NEVER_VALUE_USED_WHERE_ALWAYS_REQUIRED.name=錯誤用法 - 某個值使用了註解標記不會限制類型,可是這個限制是必須的
rule.findbugs.NS_NON_SHORT_CIRCUIT.name=高危 - 可疑的非短路邏輯
rule.findbugs.VA_FORMAT_STRING_NO_PREVIOUS_ARGUMENT.name=錯誤用法 - 格式化字符串沒有前面的參數
rule.findbugs.SE_PRIVATE_READ_RESOLVE_NOT_INHERITED.name=高危 - 私有readResolve方法不是繼承自父類
rule.findbugs.RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE.name=高危 - 對一個已知不是null的值重複進行空值判斷
rule.findbugs.NM_LCASE_TOSTRING.name=類定義了tostring(); 應該是toString()吧?
rule.findbugs.HSC_HUGE_SHARED_STRING_CONSTANT.name=性能 - 巨大的字符串常量在多個類文件中間重複了
rule.findbugs.SE_TRANSIENT_FIELD_NOT_RESTORED.name=不良實踐 - Transient屬性沒有再反序列化時被設置
rule.findbugs.JLM_JSR166_LOCK_MONITORENTER.name=多線程錯誤 - 在java.util.concurrent Lock上進行了同步
rule.findbugs.EQ_ALWAYS_TRUE.name=錯誤用法 - equals方法老是返回true
rule.findbugs.ISC_INSTANTIATE_STATIC_CLASS.name=不良實踐 - 只提供靜態方法的類不須要實例化
rule.findbugs.ICAST_IDIV_CAST_TO_DOUBLE.name=高危 - int相除的結果轉換成double或float
rule.findbugs.RC_REF_COMPARISON_BAD_PRACTICE.name=錯誤用法 - 可疑的引用與常量的比較
rule.findbugs.FI_EXPLICIT_INVOCATION.name=不良實踐 - 直接調用finalizer
rule.findbugs.ESync_EMPTY_SYNC.name=多線程錯誤 - 空的同步塊
rule.findbugs.DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION.name=錯誤用法 - 不要使用removeAll清空集合
rule.findbugs.SE_BAD_FIELD.name=在序列化類中出現了非transient也非serializable的實例屬性
rule.findbugs.NP_STORE_INTO_NONNULL_FIELD.name=錯誤用法 - 屬性已經標記爲NonNull,可是設置了一個null值
rule.findbugs.IT_NO_SUCH_ELEMENT.name=不良實踐 - 迭代器的next()方法不能拋出NoSuchElementException
rule.findbugs.HRS_REQUEST_PARAMETER_TO_HTTP_HEADER.name=安全風險 - HTTP響應拆分漏洞
rule.findbugs.DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED.name=高危 - 但願傳入Runnable的地方傳入了一個Thread
rule.findbugs.NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH.name=錯誤用法 - null值會在exception處理中被用到
rule.findbugs.RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE.name=高危 - 已知的null值被重複的檢測
rule.findbugs.DMI_CALLING_NEXT_FROM_HASNEXT.name=錯誤用法 - hasNext方法調用了next方法
rule.findbugs.HE_HASHCODE_USE_OBJECT_EQUALS.name=不良實踐 - 定義了hashCode()的類使用了Object.equals()
rule.findbugs.VA_FORMAT_STRING_EXPECTED_MESSAGE_FORMAT_SUPPLIED.name=錯誤用法 - 須要使用printf樣式時使用了MessageFormat
rule.findbugs.NP_BOOLEAN_RETURN_NULL.name=不良實踐 - 方法返回boolean類型返回了null
rule.findbugs.RI_REDUNDANT_INTERFACES.name=高危 - 類實現了父類同樣的接口
rule.findbugs.DL_SYNCHRONIZATION_ON_UNSHARED_BOXED_PRIMITIVE.name=多線程錯誤 - 在裝箱的基本屬性上使用了同步
rule.findbugs.STCAL_STATIC_CALENDAR_INSTANCE.name=多線程錯誤 - 靜態Calendar
rule.findbugs.RR_NOT_CHECKED.name=不良實踐 - 方法忽略InputStream.read()的返回值
rule.findbugs.IL_INFINITE_RECURSIVE_LOOP.name=錯誤用法 - 明顯的無限遞歸循環
rule.findbugs.DMI_NONSERIALIZABLE_OBJECT_WRITTEN.name=高危 - 非持久化的對象寫入了ObjectOutput
rule.findbugs.GC_UNCHECKED_TYPE_IN_GENERIC_CALL.name=不良實踐 - 泛型調用中使用了未檢查的類型
rule.findbugs.IMA_INEFFICIENT_MEMBER_ACCESS.name=試驗 - 方法訪問了一個擁有的類的私有成員
rule.findbugs.FI_PUBLIC_SHOULD_BE_PROTECTED.name=惡意代碼漏洞 - Finalizer應該是protected,不能是public
rule.findbugs.RV_CHECK_FOR_POSITIVE_INDEXOF.name=高危 - 方法檢查檢查String.indexOf的結果是否爲正數
rule.findbugs.ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT.name=高危 - 無符號右移轉換爲short/byte
rule.findbugs.DM_STRING_VOID_CTOR.name=性能 - 方法調用了低效的new String()構造方法
rule.findbugs.RE_POSSIBLE_UNINTENDED_PATTERN.name=錯誤用法 - 「.」用做正則表達式
rule.findbugs.WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL.name=多線程錯誤 - 在getClass上使用同步而不是在class文字上
rule.findbugs.ICAST_BAD_SHIFT_AMOUNT.name=錯誤用法 - 右移的數值不在0..31範圍內
rule.findbugs.SF_SWITCH_FALLTHROUGH.name=Switch語句中一個case失敗之後進入了下一個case
rule.findbugs.DP_DO_INSIDE_DO_PRIVILEGED.name=不良實踐 - 方法調用應該在doPrivileged塊中
rule.findbugs.NO_NOTIFY_NOT_NOTIFYALL.name=多線程錯誤 - 使用notify()而不是notifyAll()
rule.findbugs.SS_SHOULD_BE_STATIC.name=性能 - 未讀取的屬性:這個屬性是否應該是static的?
rule.findbugs.DM_RUN_FINALIZERS_ON_EXIT.name=不良實踐 - 方法調用了危險的runFinalizersOnExit方法
rule.findbugs.MS_FINAL_PKGPROTECT.name=惡意代碼漏洞 - 屬性應該同時是final 和 package protected的
rule.findbugs.BC_BAD_CAST_TO_CONCRETE_COLLECTION.name=高危 - 轉換成具體集合可能有問題
rule.findbugs.BIT_IOR_OF_SIGNED_BYTE.name=錯誤用法 - 在帶符號的byte值上進行位OR運算
rule.findbugs.MSF_MUTABLE_SERVLET_FIELD.name=多線程錯誤 - 可變的servlet屬性
rule.findbugs.SE_BAD_FIELD_INNER_CLASS.name=不良實踐 - 非serializable類有一個可序列化的內部類
rule.findbugs.BIT_ADD_OF_SIGNED_BYTE.name=錯誤用法 - 在帶符號的byte值上進行位add運算
rule.findbugs.FI_FINALIZER_ONLY_NULLS_FIELDS.name=不良實踐 - Finalizer中子還有null屬性
rule.findbugs.DE_MIGHT_IGNORE.name=不良實踐 - 方法可能忽略異常
rule.findbugs.XSS_REQUEST_PARAMETER_TO_SERVLET_WRITER.name=安全風險 - Servlet反射跨域腳本漏洞
rule.findbugs.ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIELD.name=多線程錯誤 - 使用同步的屬性可能發生改變
rule.findbugs.SQL_BAD_PREPARED_STATEMENT_ACCESS.name=錯誤用法 - 方法嘗試訪問PreparedStatement參數的索引是0
rule.findbugs.DM_CONVERT_CASE.name=國際化 - 考慮使用國際化參數型的調用方法版本
rule.findbugs.SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS.name=高危 - 類的transient屬性不能序列化
rule.findbugs.NN_NAKED_NOTIFY.name=多線程錯誤 - 未使用同步包裹的notify
rule.findbugs.VA_FORMAT_STRING_MISSING_ARGUMENT.name=錯誤用法 - 格式化字符串引用的參數丟失
rule.findbugs.IC_SUPERCLASS_USES_SUBCLASS_DURING_INITIALIZATION.name=不良實踐 - 父類初始化時使用了子類
rule.findbugs.SA_LOCAL_SELF_COMPARISON.name=錯誤用法 - 本身和本身的值比較
rule.findbugs.IM_BAD_CHECK_FOR_ODD.name=高危 - 對奇偶判斷不能用於負數
rule.findbugs.NP_CLOSING_NULL.name=錯誤用法 - close()調用了一個永遠是null的值
rule.findbugs.XSS_REQUEST_PARAMETER_TO_JSP_WRITER.name=安全風險 - JSP反射調用跨域腳本漏洞
rule.findbugs.IS_FIELD_NOT_GUARDED.name=多線程錯誤 - 屬性不能保證同步訪問
rule.findbugs.DM_GC.name=性能 - 直接調用垃圾回收,特別是在性能測試中的可疑代碼
rule.findbugs.IM_MULTIPLYING_RESULT_OF_IREM.name=錯誤用法 - 整數乘法的結果是整數
rule.findbugs.SE_COMPARATOR_SHOULD_BE_SERIALIZABLE.name=不良實踐 - Comparator沒有實現Serializable
rule.findbugs.HE_HASHCODE_NO_EQUALS.name=不良實踐 - 類定義了hashCode()可是沒定義equals()
rule.findbugs.MF_CLASS_MASKS_FIELD.name=錯誤用法 - 類定義了屬性覆蓋了父類的屬性
rule.findbugs.NM_VERY_CONFUSING_INTENTIONAL.name=不良實踐 - 很是迷惑的方法名稱(多是內部方法)
rule.findbugs.SR_NOT_CHECKED.name=不良實踐 - 方法忽略了InputStream.skip()的結果
rule.findbugs.LI_LAZY_INIT_STATIC.name=多線程錯誤 - 錯誤的對static屬性進行了延遲初始化
rule.findbugs.DMI_ANNOTATION_IS_NOT_VISIBLE_TO_REFLECTION.name=錯誤用法 - 不能使用反射檢測沒有標記爲runtime rentention的註解的存在
rule.findbugs.ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH.name=不良實踐 - 方法可能在關閉database資源時由於異常失敗
rule.findbugs.BIT_IOR.name=錯誤用法 - 不兼容的位掩碼(BIT_IOR)
rule.findbugs.ODR_OPEN_DATABASE_RESOURCE.name=不良實踐 - 方法可能在關閉database資源時失敗
rule.findbugs.IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN.name=錯誤用法 - 參數沒有被使用,可是被從新賦值了
rule.findbugs.SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING.name=安全風險 - 使用很是量字符串建立了一個PreparedStatement
rule.findbugs.UUF_UNUSED_FIELD.name=性能 - 無用的屬性
rule.findbugs.RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE.name=錯誤用法 - 對一個已經使用的值進行了null檢測
rule.findbugs.EQ_OTHER_USE_OBJECT.name=錯誤用法 - equals()方法定義沒有覆蓋Object.equals(Object)
rule.findbugs.SP_SPIN_ON_FIELD.name=多線程錯誤 - 方法對一個屬性循環複製
rule.findbugs.SI_INSTANCE_BEFORE_FINALS_ASSIGNED.name=不良實踐 - 在全部靜態final屬性賦值以前static初始化塊建立了一個實例
rule.findbugs.NP_ALWAYS_NULL_EXCEPTION.name=錯誤用法 - 方法的異常路徑中引用了空指針
rule.findbugs.MS_EXPOSE_REP.name=惡意代碼漏洞 - Public static方法可能由於返回了一個數組而暴露內部實現
rule.findbugs.VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEAN.name=高危 - 非布爾參數使用%b進行了格式化
rule.findbugs.MS_PKGPROTECT.name=惡意代碼漏洞 - 屬性應該是package protected
rule.findbugs.NP_NONNULL_RETURN_VIOLATION.name=錯誤用法 - 方法可能返回null,可是聲明瞭 @NonNull rule.findbugs.J2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_SESSION.name=不良實踐 - 在HttpSession中保存了不可序列化的對象 rule.findbugs.NM_SAME_SIMPLE_NAME_AS_SUPERCLASS.name=不良實踐 - 類名不該該和父類的名稱相同 rule.findbugs.DMI_BLOCKING_METHODS_ON_URL.name=性能 - URL的equals 和 hashCode 方法會被堵塞 rule.findbugs.HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_CLASS.name=錯誤用法 - 在哈希構造中聲明瞭不能哈希的類 rule.findbugs.UR_UNINIT_READ.name=錯誤用法 - 構造方法中對未初始化的類進行了讀取 rule.findbugs.WA_NOT_IN_LOOP.name=多線程錯誤 - Wait不在循環中 rule.findbugs.DMI_FUTILE_ATTEMPT_TO_CHANGE_MAXPOOL_SIZE_OF_SCHEDULED_THREAD_POOL_EXECUTOR.name=錯誤用法 - 嘗試修改ScheduledThreadPoolExecutor的最大數 rule.findbugs.RV_RETURN_VALUE_IGNORED2.name=錯誤用法 - 方法忽略了返回值 rule.findbugs.NM_FIELD_NAMING_CONVENTION.name=屬性名應該以小寫字母開頭 rule.findbugs.FB_UNEXPECTED_WARNING.name=試驗 - 未期待/未指望的findbugs警告 rule.findbugs.BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR.name=錯誤用法 - 基礎類型拆箱後用於三元表達式 rule.findbugs.DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED.name=不良實踐 - Classloaders應該只在doPrivileged塊中被建立 rule.findbugs.NM_WRONG_PACKAGE.name=錯誤用法 - 方法沒有覆蓋父類的方法,由於參數的包不正確 rule.findbugs.IL_CONTAINER_ADDED_TO_ITSELF.name=錯誤用法 - 一個集合被添加到自身 rule.findbugs.CI_CONFUSED_INHERITANCE.name=高危 - 類是final的,可是定義了protected屬性 rule.findbugs.HE_USE_OF_UNHASHABLE_CLASS.name=錯誤用法 - 在哈希數據結構中使用的類沒有定義hashCode()方法 rule.findbugs.IJU_SUITE_NOT_STATIC.name=錯誤用法 - TestCase實現了非static suite方法 rule.findbugs.RS_READOBJECT_SYNC.name=多線程錯誤 - 類的readObject()方法不是同步的 rule.findbugs.AM_CREATES_EMPTY_JAR_FILE_ENTRY.name=不良實踐 - 建立了一個空的jar方法入口 rule.findbugs.VA_FORMAT_STRING_BAD_CONVERSION_FROM_ARRAY.name=錯誤用法 - 使用格式化字符串對數組進行了無用的格式化 rule.findbugs.SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH_TO_THROW.name=switch語句失敗拋出異常致使無用的存儲 rule.findbugs.RV_ABSOLUTE_VALUE_OF_HASHCODE.name=錯誤用法 - 錯誤的嘗試計算帶符號的32位hashcodde的絕對值 rule.findbugs.EQ_DONT_DEFINE_EQUALS_FOR_ENUM.name=錯誤用法 - 枚舉定義了協變equals()方法定義 rule.findbugs.SA_FIELD_DOUBLE_ASSIGNMENT.name=錯誤用法 - 對屬性進行雙重賦值 rule.findbugs.DMI_COLLECTION_OF_URLS.name=性能 - URL的Maps 和 sets多是性能大問題 rule.findbugs.NM_SAME_SIMPLE_NAME_AS_INTERFACE.name=不良實踐 - 類名不該該和實現的接口名相同 rule.findbugs.UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR.name=錯誤用法 - 構造方法沒有初始化屬性 rule.findbugs.TQ_MAYBE_SOURCE_VALUE_REACHES_NEVER_SINK.name=錯誤用法 - 值可能帶着一個類型修飾符,一直使用的方式是與這個類型修飾符相悖的 rule.findbugs.SE_NONLONG_SERIALVERSIONID.name=不良實踐 - serialVersionUID不是long型 rule.findbugs.RV_REM_OF_HASHCODE.name=高危 - hashCode的結果多是負數negative rule.findbugs.NS_DANGEROUS_NON_SHORT_CIRCUIT.name=高危 - 潛在危險使用非短跳出邏輯 rule.findbugs.USM_USELESS_SUBCLASS_METHOD.name=試驗 - 方法代理到父類方法 rule.findbugs.ITA_INEFFICIENT_TO_ARRAY.name=性能 - 方法使用了toArray()對空數組參數 rule.findbugs.DM_MONITOR_WAIT_ON_CONDITION.name=多線程錯誤 - 根據條件監控wait()的調用 rule.findbugs.BOA_BADLY_OVERRIDDEN_ADAPTER.name=錯誤用法 - 類覆蓋了父類中實現的方法適配器錯誤 rule.findbugs.IC_INIT_CIRCULARITY.name=高危 - 初始化死循環 rule.findbugs.NM_FUTURE_KEYWORD_USED_AS_IDENTIFIER.name=不良實踐 - 使用的標記是將來java版本中的關鍵字 rule.findbugs.EC_UNRELATED_CLASS_AND_INTERFACE.name=錯誤用法 - equals()比較無關的類和接口 rule.findbugs.TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK.name=錯誤用法 - 值可能沒有攜帶一個類修飾符,可是使用中會一直須要這個類修飾符 rule.findbugs.FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER.name=錯誤用法 - 測試是否與NaN相等 rule.findbugs.NM_CONFUSING.name=不良實踐 - 迷惑的方法名 rule.findbugs.VA_FORMAT_STRING_ARG_MISMATCH.name=錯誤用法 - 格式化字符串參數的數目與佔位符不相等 rule.findbugs.NP_NULL_ON_SOME_PATH_EXCEPTION.name=錯誤用法 - 方法的異常路徑中可能引用空指針 rule.findbugs.DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE.name=多線程錯誤 - 同步裝箱基本類型可能致使死鎖 rule.findbugs.IJU_TEARDOWN_NO_SUPER.name=錯誤用法 - TestCase定義的tearDown沒有調用super.tearDown() rule.findbugs.SE_READ_RESOLVE_IS_STATIC.name=錯誤用法 - readResolve方法沒有生命爲static方法 rule.findbugs.NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE.name=高危 - 這個路徑上空指針引用是不可實現的 rule.findbugs.UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS.name=錯誤用法 - 匿名內部類中定義的不可調用的方法 rule.findbugs.VA_FORMAT_STRING_BAD_CONVERSION.name=錯誤用法 - 提供的參數類型與格式化標記不符 rule.findbugs.EC_ARRAY_AND_NONARRAY.name=錯誤用法 - equals()用來比較數組和非數組 rule.findbugs.NM_BAD_EQUAL.name=類定義了equal(Object),應該是equals(Object)吧? rule.findbugs.EC_UNRELATED_TYPES_USING_POINTER_EQUALITY.name=錯誤用法 - 使用指針比較不一樣的類型 rule.findbugs.STI_INTERRUPTED_ON_CURRENTTHREAD.name=錯誤用法 - currentThread()調用的沒必要要用法,調用了interrupted() rule.findbugs.RE_CANT_USE_FILE_SEPARATOR_AS_REGULAR_EXPRESSION.name=錯誤用法 - File.separator用作正則表達式 rule.findbugs.MWN_MISMATCHED_WAIT.name=多線程錯誤 - 不匹配的wait() rule.findbugs.IL_INFINITE_LOOP.name=錯誤用法 - 明顯的無限循環 rule.findbugs.NP_IMMEDIATE_DEREFERENCE_OF_READLINE.name=高危 - 馬上使用了readLine()的結果 rule.findbugs.SC_START_IN_CTOR.name=多線程錯誤 - 構造方法調用了Thread.start() rule.findbugs.STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE.name=多線程錯誤 - 靜態DateFormat rule.findbugs.HE_EQUALS_NO_HASHCODE.name=不良實踐 - 類定義了equals(),可是沒有hashCode() rule.findbugs.UL_UNRELEASED_LOCK.name=多線程錯誤 - 方法沒有在任何路徑中釋放鎖 rule.findbugs.PZLA_PREFER_ZERO_LENGTH_ARRAYS.name=高危 - 考慮返回空數組而不是null rule.findbugs.SKIPPED_CLASS_TOO_BIG.name=高危 - 類太大不能分析 rule.findbugs.NP_ARGUMENT_MIGHT_BE_NULL.name=錯誤用法 - 方法沒有檢查空參數 rule.findbugs.UM_UNNECESSARY_MATH.name=性能 - 方法常量調用了靜態Math類方法 rule.findbugs.NM_WRONG_PACKAGE_INTENTIONAL.name=不良實踐 - 方法沒有覆蓋父類的方法由於參數包名錯誤 rule.findbugs.NP_NONNULL_PARAM_VIOLATION.name=錯誤用法 - 方法傳遞null給一個非空參數 rule.findbugs.BIT_AND_ZZ.name=錯誤用法 - 檢查 ((…) & 0) == 0 是否成立 rule.findbugs.HRS_REQUEST_PARAMETER_TO_COOKIE.name=安全風險 - HTTP cookie可能來自不被信任的輸入 rule.findbugs.SQL_BAD_RESULTSET_ACCESS.name=錯誤用法 - 方法嘗試訪問一個ResultSet,可是使用的index是0 rule.findbugs.INT_VACUOUS_COMPARISON.name=高危 - 整形的空比較 rule.findbugs.EQ_COMPARETO_USE_OBJECT_EQUALS.name=不良實踐 - 類定義了compareTo(…),但使用了Object.equals() rule.findbugs.DMI_HARDCODED_ABSOLUTE_FILENAME.name=高危 - 類包含一個硬編碼的絕對路徑 rule.findbugs.DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVES.name=錯誤用法 - 集合不該該包含自身 rule.findbugs.URF_UNREAD_FIELD.name=性能 - 讀不到的屬性 rule.findbugs.DLS_OVERWRITTEN_INCREMENT.name=錯誤用法 - 重寫了自增 rule.findbugs.BIT_SIGNED_CHECK.name=不良實踐 - 檢測帶符號的位運算 rule.findbugs.UWF_NULL_FIELD.name=錯誤用法 - 屬性曾經設置爲null rule.findbugs.DE_MIGHT_DROP.name=不良實踐 - 方法可能拋出異常 rule.findbugs.DMI_BAD_MONTH.name=錯誤用法 - 對於month錯誤的常量值 rule.findbugs.MS_MUTABLE_ARRAY.name=惡意代碼漏洞 - 屬性是可變數組 rule.findbugs.SE_INNER_CLASS.name=不良實踐 - 可序列化的內部類 rule.findbugs.OS_OPEN_STREAM_EXCEPTION_PATH.name=不良實踐 - 方法可能在關閉流時由於異常而失敗 rule.findbugs.AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION.name=併發抽象的順序調用可能不是原子的 rule.findbugs.BX_UNBOXING_IMMEDIATELY_REBOXED.name=裝箱的值被拆箱,而後馬上從新裝箱了 rule.findbugs.CO_COMPARETO_RESULTS_MIN_VALUE.name=compareTo()或compare()返回Integer.MIN_VALUE rule.findbugs.DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD.name=無用的局部變量可能與實例屬性同名 rule.findbugs.DMI_ARGUMENTS_WRONG_ORDER.name=方法參數順序翻轉 rule.findbugs.DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE.name=由double構造BigDecimal時沒有指定精確度 rule.findbugs.DMI_DOH.name=一個明顯不合理的方法調用 rule.findbugs.DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS.name=一個入口的添加可能由於重用Entry對象致使失敗 rule.findbugs.DM_DEFAULT_ENCODING.name=信任默認字符編碼 rule.findbugs.ICAST_INT_2_LONG_AS_INSTANT.name=int轉換成long,用來當作絕對時間 rule.findbugs.INT_BAD_COMPARISON_WITH_INT_VALUE.name=錯誤比較int值和long常量 rule.findbugs.JML_JSR166_CALLING_WAIT_RATHER_THAN_AWAIT.name=在util.concurrent抽象中使用監控樣式的wait方法 rule.findbugs.NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.name=讀取了未初始化的public或protected屬性 rule.findbugs.OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE.name=方法可能由於checked exception致使清理流或資源失敗 rule.findbugs.PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS.name=不用在iterator裏重用entry對象 rule.findbugs.RV_CHECK_COMPARETO_FOR_SPECIFIC_RETURN_VALUE.name=compareTo返回的值與指定的值進行檢測 rule.findbugs.RV_NEGATING_RESULT_OF_COMPARETO.name=調換了compareTo()/compare()結果的正負 rule.findbugs.RV_RETURN_VALUE_IGNORED_INFERRED.name=方法忽略了返回值,這是正常的嗎? rule.findbugs.SA_LOCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD.name=局部變量給本身賦值而不是賦值到實例變量中 rule.findbugs.URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD.name=未被讀取的public/protected屬性 rule.findbugs.UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD.name=未被使用的public 或 protected 屬性 rule.findbugs.UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.name=未初始化的public 或 protected 屬性 rule.findbugs.VA_FORMAT_STRING_USES_NEWLINE.name=格式化代碼應該使用%n代替\n rule.findbugs.VO_VOLATILE_INCREMENT.name=volatile的自增操做不是原子的

相關文章
相關標籤/搜索