詳解FindBugs的各項檢測器

         FindBugs是一個靜態分析工具,在程序不需運行的情況下,分析class文件,將字節碼與一組缺陷模式進行對比,試圖尋找真正的缺陷或者潛在的性能問題。本文檔主要詳細說明FindBugs 2.0.3版本中各項檢測器的作用,該版本共有156個缺陷檢測器,分爲11個類別。

 

1.       No Category(無類別)

1.1 BuildInterproceduralCallGraph

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.BuildInterproceduralCallGraph

說明

構建過程之間的調用圖。

報告模式

 

1.2 BuildObligationPolicyDatabase

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.BuildObligationPolicyDatabase

說明

構建由FindUnsatisfiedObligation檢測器使用的責任類型和方法的數據庫。

報告模式

 

1.3 CalledMethods

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.CalledMethods

說明

構建在被分析類中調用的所有方法的數據庫,供其他檢測器使用。

報告模式

 

1.4 CheckCalls

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.CheckCalls

說明

這個檢測器僅僅在FindBugs中調試方法調用解析時使用。不要啓用這個檢測器。

報告模式

 

1.5 ExplicitSerialization

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.ExplicitSerialization

說明

通過readObject方法和writeObject方法尋找顯式的序列化操作,作爲這個類確實已經序列化的證據。

報告模式

 

1.6 FieldItemSummary

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.FieldItemSummary

說明

這個檢測器會產生被存儲爲字段的所有條目的彙總信息。

報告模式

 

1.7 FindBugsSummaryStats

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.FindBugsSummaryStats

說明

這個檢測器僅僅收集分析過程相關的彙總統計信息。

報告模式

 

1.8 FunctionThatMightBeMistakenForProcedures

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.FunctionsThatMightBeMistakenForProcedures

說明

有些不可變類包含了返回這個類的新實例的方法,當調用這些類實例方法時,人們偶爾會認爲這些方法會修改當前的類實例,這個檢測器能夠找到這樣的不可變類。

報告模式

 

1.9 Methods

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.Methods

說明

構建在被分析類中定義的所有方法的數據庫,供其他檢測器使用。

報告模式

 

1.10 NoteAnnotationRetention

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.NoteAnnotationRetention

說明

記錄註解保留策略。

報告模式

 

1.11 NoteCheckReturnValueAnnotations

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.NoteCheckReturnValueAnnotations

說明

尋找用於檢查一個方法的返回值的註解。

報告模式

 

1.12 NoteDirectlyRelevantTypeQualifiers

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.NoteDirectlyRelevantTypeQualifiers

說明

記錄與分析方法有關的類型修飾符。

報告模式

 

1.13 NoteJCIPAnnotation

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.NoteJCIPAnnotation

說明

記錄net.jcip.annotations包中的註解。

報告模式

 

1.14 NoteNonNullAnnotations

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.NoteNonNullAnnotations

說明

檢查方法、字段、參數是否具有@NonNull註解。當在一個應當只能使用非NULL值的上下文環境中使用了一個可能爲NULL的值,那麼FindNullDeref檢測器會使用這些信息生成警告

報告模式

 

1.15 NoteNonNullReturnValues

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.NoteNonnullReturnValues

說明

分析應用程序中所有的方法,以便於確定哪個方法總是返回非NULL的值。

報告模式

 

1.16 NoteSuppressedWarnings

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.NoteSuppressedWarnings

說明

抑制基於使用edu.umd.cs.findbugs.annotations.NoteSuppressWarnings註解的警告。

報告模式

 

1.17 ReflectiveClasses

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.ReflectiveClasses

說明

嘗試確定哪些類具有指向它們自己的.class對象的常量引用。

報告模式

 

1.18 TestDataflowAnalysis

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.TestDataflowAnalysis

說明

這是一種內部檢測器,只有在測試數據流分析時纔會使用。默認情況下,請不要啓用這個檢測器。

報告模式

 

1.19 TrainFieldStoreTypes

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.TrainFieldStoreTypes

說明

TrainFieldStoreTypes檢測器會分析存儲在字段中的類型,並且會將它們存儲在一個數據庫中。這個數據庫會在稍後的分析中用到,它能夠使得分析更加精確。這個檢測器的速度較慢。

報告模式

 

1.20 TrainLongInstantParams

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.TrainLongInstantfParams

說明

構建參數數據庫,這些參數的長度爲64位,用於描述從標準基準時間到現在的時間長度,單位爲毫秒。

報告模式

 

1.21 TrainNonNullAnnotations

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.TrainNonNullAnnotations

說明

TrainNonNullAnnotations檢測器可以收集@NonNull和@PossiblyNull註解,並且可以將它們存儲在數據庫文件中。這個檢測器的速度較快。

報告模式

 

1.22 TrainUnconditionalDerefParams

模式

-

速度

缺陷類別

-

類型

edu.umd.cs.findbugs.detect.TrainUnconditionalDerefParams

說明

TrainUnconditionalParamDerefs檢測器可以確定哪些方法可以無條件解引用參數,並且可以將它們存儲在一個文件中。生成的文件可以在後續的檢測中使用,它可以改善NULL解引用檢測器的精確度。因爲這只是一連串檢測中的一個環節,所以不會報告任何警告。這個檢測器的速度較慢。

報告模式

 

2.       Bad Practice(壞習慣)

2.1 BooleanReturnNull

模式

NP

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.BooleanReturnNull

說明

檢查是否有返回類型爲Boolean,但是卻顯式返回了NULL值的方法。

報告模式

1.      NP_BOOLEAN_RETURN_NULL  (NP, BAD_PRACTICE):  Boolean返回類型的方法顯式返回了NULL值。

 

2.2CheckImmutableAnnotation

模式

JCIP

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.CheckImmutableAnnotation

說明

檢查被註解爲net.jcip.annotations.Immutable或javax.annotation.concurrent.Immutable的類是否違反規則。

報告模式

1.      JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS  (JCIP, BAD_PRACTICE):  不可變類的字段應當是final的

 

2.3 CloneIdiom

模式

CN

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.CloneIdiom

說明

這個檢測器會檢查編寫的可克隆類是否違反慣用語法。

報告模式

1.      CN_IDIOM  (CN, BAD_PRACTICE):  類實現了Cloneable接口,但是沒有定義或使用clone方法

2.      CN_IDIOM_NO_SUPER_CALL  (CN, BAD_PRACTICE):  clone方法沒有調用super.clone()方法

3.      CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE  (CN, BAD_PRACTICE):  類定義了clone()方法,但是沒有實現Cloneable接口

 

2.4 ComparatorIdiom

模式

Se

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.ComparatorIdiom

說明

這個檢測器會檢查編寫的實現Comparator接口的類是否違反慣用語法。

報告模式

1.      SE_COMPARATOR_SHOULD_BE_SERIALIZABLE  (Se, BAD_PRACTICE):  比較器類沒有實現Serializable接口

 

2.5 DontCatchIllegalMonitorStateException

模式

IMSE

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.DontCatchIllegalMonitorStateException

說明

這個檢測器會檢查try-catch代碼塊是否捕捉IllegalMonitorStateException異常。

報告模式

1.      IMSE_DONT_CATCH_IMSE  (IMSE, BAD_PRACTICE):  可疑的IllegalMonitorStateException異常捕捉

 

2.6 DontUseEnum

模式

Nm

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.DontUseEnum

說明

檢查字段和方法的名稱是否是assert或enum,因爲它們是Java 5的關鍵字。

報告模式

1.                  NM_FUTURE_KEYWORD_USED_AS_IDENTIFIER  (Nm, BAD_PRACTICE):  使用的標識符是Java後續版本中的一個關鍵字

2.                  NM_FUTURE_KEYWORD_USED_AS_MEMBER_IDENTIFIER  (Nm, BAD_PRACTICE):  使用的標識符是Java後續版本中的一個關鍵字

 

2.7 DroppedException

模式

DE

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.DroppedException

說明

這個檢測器會找出代碼中捕捉異常,但是卻沒有對異常進行任何處理的地方。

報告模式

1.      DE_MIGHT_DROP  (DE, BAD_PRACTICE):  方法可能遺漏異常處理

2.      DE_MIGHT_IGNORE  (DE, BAD_PRACTICE):  方法可能忽略異常處理

 

2.8 EmptyZipFileEntry

模式

AM

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.EmptyZipFileEntry

說明

這個檢測器會檢查是否創建了空白的zip文件項。這個檢測器的運行速度中等。

報告模式

1.      AM_CREATES_EMPTY_JAR_FILE_ENTRY  (AM, BAD_PRACTICE):  創建的jar文件項爲空

2.      AM_CREATES_EMPTY_ZIP_FILE_ENTRY  (AM, BAD_PRACTICE):  創建的zip文件項爲空

 

2.9 EqualsOperandShouldHaveClassCompatibleWithThis

模式

Eq

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.EqualsOperandShouldHaveClassCompatibleWithThis

說明

檢查equals方法,該方法的操作數是一個和定義這個equals方法的類不兼容的類的實例。

報告模式

1.      EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS  (Eq, BAD_PRACTICE):  檢查equals方法的操作數是否兼容

 

2.10 FinalizerNullFields

模式

FI

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.FinalizerNullsFields

說明

這個檢測器會找到將類的字段設置爲NULL值的finalize()方法。無論如何,這個檢測器都不會幫助到垃圾收集器,將字段設置爲NULL值不會產生任何影響。

報告模式

1.      FI_FINALIZER_NULLS_FIELDS  (FI, BAD_PRACTICE):  finalize()方法將字段設置爲NULL值

2.      FI_FINALIZER_ONLY_NULLS_FIELDS  (FI, BAD_PRACTICE):  finalize()方法僅將字段設置爲NULL值

 

2.11 FindNonSerializableStoreIntoSession

模式

J2EE

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.FindNonSerializableStoreIntoSession

說明

這個檢測器會檢查是否將不可序列化的對象(沒有實現Serializable接口的類實例)存儲至HTTP會話中。

報告模式

1.      J2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_SESSION  (J2EE, BAD_PRACTICE):  將不可序列化對象存儲至HttpSession

 

2.12 FindOpenStream

模式

ODR|OS

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.FindOpenStream

說明

這個檢測器會找出退出方法時沒有及時關閉的I/O流對象。這個檢測器的運行速度較慢。

報告模式

1.      ODR_OPEN_DATABASE_RESOURCE  (ODR, BAD_PRACTICE):  方法未能成功關閉數據庫資源

2.      ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH  (ODR, BAD_PRACTICE):  異常發生時,方法未能成功關閉數據庫資源

3.      OS_OPEN_STREAM  (OS, BAD_PRACTICE):  方法未能成功關閉流

4.      OS_OPEN_STREAM_EXCEPTION_PATH  (OS, BAD_PRACTICE):  異常發生時,方法未能成功關閉流

 

2.13 InheritanceUnsafeGetResource

模式

UI

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.InheritanceUnsafeGetResource

說明

檢查this.getClass().getResource(...)方法的使用狀況,如果當前類被另一個包中的類擴展時,調用這個方法可能會產生無法預料的結果。

報告模式

1.      UI_INHERITANCE_UNSAFE_GETRESOURCE  (UI, BAD_PRACTICE):  如果擴展這個類,那麼使用getResource方法可能是不安全的

 

2.14 InstantiateStaticClass

模式

ISC

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.InstantiateStaticClass

說明

這個檢測器會檢查是否創建了靜態類的對象,靜態類就是隻定義靜態方法的類。

報告模式

1.      ISC_INSTANTIATE_STATIC_CLASS  (ISC, BAD_PRACTICE):  不需要實例化只提供靜態方法的類

 

2.15 IteratorIdioms

模式

It

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.IteratorIdioms

說明

這個迭代器會檢查是否正確定義Iterator類。

報告模式

1.      IT_NO_SUCH_ELEMENT  (It, BAD_PRACTICE):  迭代器的next()方法不能拋出NoSuchElementException異常

 

2.16 ReadReturnShouldBeChecked

模式

RR

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.ReadReturnShouldBeChecked

說明

這個檢測器會檢查代碼中忽略返回值的地方是否調用了InputStream.read()方法或InputStream.skip()方法。

報告模式

1.      RR_NOT_CHECKED  (RR, BAD_PRACTICE):  方法忽略InputStream.read()的結果

2.      SR_NOT_CHECKED  (RR, BAD_PRACTICE):  方法忽略InputStream.skip()的結果

 

2.17 FindRefComparison

模式

DMI|EC|ES|RC

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.FindRefComparison

說明

這個檢測器會找出代碼中使用==或!=運算符比較兩個引用值是否相等的地方,因爲這種比較對象引用(例如java.lang.String的對象引用)的方式通常會產生錯誤。這個檢測器的運行速度較慢。

報告模式

1.      DMI_DOH  (DMI, CORRECTNESS):  一個無意義的方法調用

2.      EC_ARRAY_AND_NONARRAY  (EC, CORRECTNESS):  使用equals()方法比較數組類型和非數組類型

3.      EC_BAD_ARRAY_COMPARE  (EC, CORRECTNESS):  對一個數組調用equals()方法,等價於使用==運算符

4.      EC_INCOMPATIBLE_ARRAY_COMPARE  (EC, CORRECTNESS):  使用equals(...)方法比較不兼容的數組

5.      EC_NULL_ARG  (EC, CORRECTNESS):  調用equals(null)方法

6.      EC_UNRELATED_CLASS_AND_INTERFACE  (EC, CORRECTNESS):  調用equals()方法比較不相關的類和接口

7.      EC_UNRELATED_INTERFACES  (EC, CORRECTNESS):  調用equals()方法比較不同的接口類型

8.      EC_UNRELATED_TYPES  (EC, CORRECTNESS):  調用equals()方法比較不同的類型

9.      EC_UNRELATED_TYPES_USING_POINTER_EQUALITY  (EC, CORRECTNESS):  使用指針等式比較不同的類型

10.  ES_COMPARING_PARAMETER_STRING_WITH_EQ  (ES, BAD_PRACTICE):  使用==或!=運算符比較String參數

11.  ES_COMPARING_STRINGS_WITH_EQ  (ES, BAD_PRACTICE):  使用==或!=運算符比較String對象

12.  RC_REF_COMPARISON  (RC, CORRECTNESS):  可疑的引用比較

13.  RC_REF_COMPARISON_BAD_PRACTICE  (RC, BAD_PRACTICE):  可疑的常量引用比較

14.  RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN  (RC, BAD_PRACTICE):  可疑的Boolean值引用比較

 

2.18 FindUnrelatedTypesInGenericContainer

模式

DMI|GC

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.FindUnrelatedTypesInGenericContainer

說明

當調用形參爲java.lang.Object類型的範型集合方法時,這個檢測器會檢查使用的實參是否與集合形參相關。不要將不相關類型的實參放在集合中。例如,如果foo是List<String>類型的,bar是StringBuffer類型的,那麼調用foo.contains(bar)方法只會返回false。這個檢測器運行速度較快。

報告模式

1.      DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVES  (DMI, CORRECTNESS):  集合不應當包含它們

2.      DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION  (DMI, BAD_PRACTICE):  不要使用removeAll方法清空一個集合

3.      DMI_VACUOUS_SELF_COLLECTION_CALL  (DMI, CORRECTNESS):  對集合的空調用

4.      GC_UNCHECKED_TYPE_IN_GENERIC_CALL  (GC, BAD_PRACTICE):  範型調用中的未選擇類型

5.      GC_UNRELATED_TYPES  (GC, CORRECTNESS):  範型形參和方法實參之間沒有關聯

 

2.19 IncompatMask

模式

BIT

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.IncompatMask

說明

這個檢測器會檢查可疑的位邏輯運算表達式。

報告模式

1.      BIT_AND  (BIT, CORRECTNESS):  不兼容的位掩碼

2.      BIT_AND_ZZ  (BIT, CORRECTNESS):  檢查代碼中是否有表達式((...) & 0) == 0

3.      BIT_IOR  (BIT, CORRECTNESS):  不兼容的位掩碼

4.      BIT_SIGNED_CHECK  (BIT, BAD_PRACTICE):  檢查代碼中是否有帶符號的位運算

5.      BIT_SIGNED_CHECK_HIGH_BIT  (BIT, CORRECTNESS):  檢查代碼中是否有帶符號的位運算

 

2.20 Naming

模式

Nm

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.Naming

說明

這個檢測器會尋找代碼中是否有可疑的方法命名。

報告模式

1.      NM_BAD_EQUAL  (Nm, CORRECTNESS):  類定義了equal(Object)方法,它應當是equals(Object)嗎?

2.      NM_CLASS_NAMING_CONVENTION  (Nm, BAD_PRACTICE):  類名應當以大寫字母開頭

3.      NM_CLASS_NOT_EXCEPTION  (Nm, BAD_PRACTICE):  類沒有派生於Exception類,雖然它的名字很像異常

4.      NM_CONFUSING  (Nm, BAD_PRACTICE):  令人困惑的方法名稱

5.      NM_FIELD_NAMING_CONVENTION  (Nm, BAD_PRACTICE):  字段名應當以小寫字母開頭

6.      NM_LCASE_HASHCODE  (Nm, CORRECTNESS):  類定義了hashcode()方法,它應當是hashcode()嗎?

7.      NM_LCASE_TOSTRING  (Nm, CORRECTNESS):  類定義了toString()方法,它應當是toString()嗎?

8.      NM_METHOD_CONSTRUCTOR_CONFUSION  (Nm, CORRECTNESS):  明顯的方法/構造器混淆

9.      NM_METHOD_NAMING_CONVENTION  (Nm, BAD_PRACTICE):  方法名應當以小寫字母開頭

10.  NM_SAME_SIMPLE_NAME_AS_INTERFACE  (Nm, BAD_PRACTICE):  類名不應當屏蔽已實現接口的簡單名

11.  NM_SAME_SIMPLE_NAME_AS_SUPERCLASS  (Nm, BAD_PRACTICE):  類名不應當屏蔽父類的簡單名

12.  NM_VERY_CONFUSING  (Nm, CORRECTNESS):  非常令人困惑的方法名

13.  NM_VERY_CONFUSING_INTENTIONAL  (Nm, BAD_PRACTICE):  非常令人困惑的方法名(但可能是有意的)

14.  NM_WRONG_PACKAGE  (Nm, CORRECTNESS):  由於錯誤的參數封裝,方法沒有覆蓋父類中的方法

15.  NM_WRONG_PACKAGE_INTENTIONAL  (Nm, BAD_PRACTICE):  由於錯誤的參數封裝,方法沒有覆蓋父類中的方法(但可能是有意的)

 

2.21 FindHEmismatch

模式

Co|Eq|HE

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.FindHEmismatch

說明

這個檢測器會檢查代碼中的hashCode()和equals()方法的定義是否有問題。

報告模式

1.      CO_ABSTRACT_SELF  (Co, BAD_PRACTICE):  抽象類定義了共變的compareTo()方法

2.      CO_SELF_NO_OBJECT  (Co, BAD_PRACTICE):  定義了共變compareTo()方法

3.      EQ_ABSTRACT_SELF  (Eq, BAD_PRACTICE):  抽象類定義了共變的compareTo()方法

4.      EQ_COMPARETO_USE_OBJECT_EQUALS  (Eq, BAD_PRACTICE):  類定義了compareTo(...)方法,使用了Object.equals()方法

5.      EQ_DOESNT_OVERRIDE_EQUALS  (Eq, STYLE):  類沒有覆蓋父類中的equals方法

6.      EQ_DONT_DEFINE_EQUALS_FOR_ENUM  (Eq, CORRECTNESS):  爲枚舉類型定義了共變equals()方法

7.      EQ_OTHER_NO_OBJECT  (Eq, CORRECTNESS):  定義的equals()方法沒有覆蓋equals(Object)方法

8.      EQ_OTHER_USE_OBJECT  (Eq, CORRECTNESS):  定義的equals()方法沒有覆蓋Object.equals(Object)方法

9.      EQ_SELF_NO_OBJECT  (Eq, BAD_PRACTICE):  定義了共變equals()方法

10.  EQ_SELF_USE_OBJECT  (Eq, CORRECTNESS):  定義了共變equals()方法,繼承於Object.equals(Object)方法

11.  HE_EQUALS_NO_HASHCODE  (HE, BAD_PRACTICE):  類定義了equals()方法,但是沒有定義hashCode()方法

12.  HE_EQUALS_USE_HASHCODE  (HE, BAD_PRACTICE):  類定義了equals()方法,並且使用Object.hashCode()方法

13.  HE_HASHCODE_NO_EQUALS  (HE, BAD_PRACTICE):  類定義了hashCode()方法,但是沒有定義equals()方法

14.  HE_HASHCODE_USE_OBJECT_EQUALS  (HE, BAD_PRACTICE):  類定義了hashCode()方法,並且使用Object.equals()方法

15.  HE_INHERITS_EQUALS_USE_HASHCODE  (HE, BAD_PRACTICE):  類繼承了equals()方法,並且使用Object.hashCode()方法

16.  HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_CLASS  (HE, CORRECTNESS):  簽名聲明在哈希結構中使用不可哈希化的類

17.  HE_USE_OF_UNHASHABLE_CLASS  (HE, CORRECTNESS):  在一個哈希數據結構中使用沒有hashCode()方法的類

 

2.22 FindNullDeref

模式

NP|RCN

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.FindNullDeref

說明

這個檢測器會找出代碼中可能發生空指針異常的地方。它還會找出對空引用值的多餘的比較。這個檢測器運行速度較慢。

報告模式

1.      NP_ALWAYS_NULL  (NP, CORRECTNESS):  空指針解引用

2.      NP_ALWAYS_NULL_EXCEPTION  (NP, CORRECTNESS):  方法中的異常路徑上的空指針解引用

3.      NP_ARGUMENT_MIGHT_BE_NULL  (NP, CORRECTNESS):  方法沒有檢查NULL實參

4.      NP_CLONE_COULD_RETURN_NULL  (NP, BAD_PRACTICE):  clone方法可能返回NULL

5.      NP_CLOSING_NULL  (NP, CORRECTNESS):  調用一個總是NULL的值的close()方法

6.      NP_DEREFERENCE_OF_READLINE_VALUE  (NP, STYLE):  沒有進行判空檢查就對readLine()方法的結果解引用

7.      NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT  (NP, BAD_PRACTICE):  equals()方法沒有檢查NULL實參

8.      NP_GUARANTEED_DEREF  (NP, CORRECTNESS):  NULL值肯定會被解引用

9.      NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH  (NP, CORRECTNESS):  異常路徑上的NULL值肯定會被解引用

10.  NP_NONNULL_PARAM_VIOLATION  (NP, CORRECTNESS):  調用方法時,將NULL傳遞給一個非NULL形參

11.  NP_NONNULL_RETURN_VIOLATION  (NP, CORRECTNESS):  方法可能返回NULL,但是聲明爲@NonNull

12.  NP_NULL_ON_SOME_PATH  (NP, CORRECTNESS):  可能的空指針解引用

13.  NP_NULL_ON_SOME_PATH_EXCEPTION  (NP, CORRECTNESS):  方法中的異常路徑上的可能的空指針解引用

14.  NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE  (NP, STYLE):  由於被調用方法的返回值可能爲空,所以可能會有空指針解引用

15.  NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE  (NP, STYLE):  可能是不可達分支路徑上的可能的空指針解引用

16.  NP_NULL_PARAM_DEREF  (NP, CORRECTNESS):  調用方法時,將NULL傳遞給一個非NULL形參

17.  NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS  (NP, CORRECTNESS):  調用方法時,將NULL傳遞給一個非NULL形參

18.  NP_NULL_PARAM_DEREF_NONVIRTUAL  (NP, CORRECTNESS):  調用非虛方法時,將NULL傳遞給一個非NULL形參

19.  NP_STORE_INTO_NONNULL_FIELD  (NP, CORRECTNESS):  將NULL值存儲在被聲明爲@NonNull的字段中

20.  NP_TOSTRING_COULD_RETURN_NULL  (NP, BAD_PRACTICE):  toString方法可能返回NULL

21.  RCN_REDUNDANT_COMPARISON_OF_NULL_AND_NONNULL_VALUE  (RCN, STYLE):  非NULL值和NULL值之間的多餘比較

22.  RCN_REDUNDANT_COMPARISON_TWO_NULL_VALUES  (RCN, STYLE):  兩個NULL值之間的多餘比較

23.  RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE  (RCN, STYLE):  對已知非NULL的值進行多餘的判空檢查

24.  RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE  (RCN, STYLE):  對已知NULL的值進行多餘的判空檢查

25.  RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE  (RCN, CORRECTNESS):  對前面已經解引用的值進行多餘的判空檢查

 

2.23 FormatStringChecker

模式

FS|USELESS_STRING

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.FormatStringChecker

說明

檢查不正確的格式化字符串。

報告模式

1.      VA_FORMAT_STRING_BAD_ARGUMENT  (FS, CORRECTNESS):  格式化字符串的佔位符與傳遞的實參不兼容

2.      VA_FORMAT_STRING_BAD_CONVERSION  (FS, CORRECTNESS):  提供實參的類型與格式指定符不匹配

3.      VA_FORMAT_STRING_BAD_CONVERSION_FROM_ARRAY  (USELESS_STRING, CORRECTNESS):  使用格式化字符串無效地格式化數組

4.      VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEAN  (FS, STYLE):  使用“%b”格式指定符格式化非Boolean類型的實參

5.      VA_FORMAT_STRING_EXPECTED_MESSAGE_FORMAT_SUPPLIED  (FS, CORRECTNESS):  在可預料的風格格式之處提供消息格式

6.      VA_FORMAT_STRING_EXTRA_ARGUMENTS_PASSED  (FS, CORRECTNESS):  傳遞的實參個數多於在格式化字符串中實際使用的個數

7.      VA_FORMAT_STRING_ILLEGAL  (FS, CORRECTNESS):  非法的格式化字符串

8.      VA_FORMAT_STRING_MISSING_ARGUMENT  (FS, CORRECTNESS):  格式化字符串引用缺少實參

9.      VA_FORMAT_STRING_NO_PREVIOUS_ARGUMENT  (FS, CORRECTNESS):  沒有前面的格式化字符串參數

10.  VA_FORMAT_STRING_USES_NEWLINE  (FS, BAD_PRACTICE):  格式化字符串應當使用“%n”,而不是“\n”

 

2.24 MethodReturnCheck

模式

RV

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.MethodReturnCheck

說明

這個檢測器會找出代碼中調用帶有返回值的方法,但是可疑地忽略掉方法返回值的地方。

報告模式

1.      RV_CHECK_COMPARETO_FOR_SPECIFIC_RETURN_VALUE  (RV, CORRECTNESS):  代碼檢查compareTo方法返回的特定值

2.      RV_EXCEPTION_NOT_THROWN  (RV, CORRECTNESS):  創建並丟棄異常,而不是拋出異常

3.      RV_RETURN_VALUE_IGNORED  (RV, CORRECTNESS):  方法忽略返回值

4.      RV_RETURN_VALUE_IGNORED_BAD_PRACTICE  (RV, BAD_PRACTICE):  方法忽略異常的返回值

5.      RV_RETURN_VALUE_IGNORED_INFERRED  (RV, STYLE):  方法忽略返回值,這樣可以麼?

 

2.25 OverridingEqualsNotSymmetrical

模式

Eq

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.OverridingEqualsNotSymmetrical

說明

檢查代碼中覆蓋一個父類equals方法的equals方法,找出其中等值關係可能不是對稱的。

報告模式

1.      EQ_ALWAYS_FALSE  (Eq, CORRECTNESS):  equals方法總是返回false

2.      EQ_ALWAYS_TRUE  (Eq, CORRECTNESS):  equals方法總是返回true

3.      EQ_COMPARING_CLASS_NAMES  (Eq, CORRECTNESS):  equals方法比較類的名稱,而不是類的對象

4.      EQ_GETCLASS_AND_CLASS_CONSTANT  (Eq, BAD_PRACTICE):  equals方法未能成功比較子類型

5.      EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC  (Eq, CORRECTNESS):  equals方法覆蓋父類的equals方法,可能不是對稱的

6.      EQ_UNUSUAL  (Eq, STYLE):  不正常的equals方法

 

2.26 DumbMethods

模式

BC|BIT|Dm|DMI|Bx|

INT|NP|

RV|SW

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.DumbMethods

說明

這個檢測器會找到代碼中調用無意義方法的地方,例如調用無參數的String構造器。

報告模式

1.      BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS  (BC, BAD_PRACTICE):  equals方法不應當假定它的參數類型

2.      BIT_ADD_OF_SIGNED_BYTE  (BIT, CORRECTNESS):  對有符號的字節值進行按位加的運算

3.      BIT_IOR_OF_SIGNED_BYTE  (BIT, CORRECTNESS):  對有符號的字節值進行按位或的運算

4.      DMI_ANNOTATION_IS_NOT_VISIBLE_TO_REFLECTION  (Dm, CORRECTNESS):  沒有使用運行時保留時,不能使用反射機制檢查註解是否存在

5.      DMI_ARGUMENTS_WRONG_ORDER  (DMI, CORRECTNESS):  反向方法參數

6.      DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE  (DMI, CORRECTNESS):  使用沒有精確表示的double值構建BigDecimal對象

7.      DMI_CALLING_NEXT_FROM_HASNEXT  (DMI, CORRECTNESS):  hasNext方法調用next方法

8.      DMI_COLLECTION_OF_URLS  (Dm, PERFORMANCE):  URL使用Map/Set集合可能會造成性能堵塞

9.      DMI_DOH  (DMI, CORRECTNESS):  一個無意義的方法調用

10.  DMI_FUTILE_ATTEMPT_TO_CHANGE_MAXPOOL_SIZE_OF_SCHEDULED_THREAD_POOL_EXECUTOR  (Dm, CORRECTNESS):  嘗試修改ScheduledThreadPoolExecutor池的最大尺寸是無效的

11.  DMI_LONG_BITS_TO_DOUBLE_INVOKED_ON_INT  (DMI, CORRECTNESS):  對一個int值調用Double.longBitsToDouble方法

12.  DMI_RANDOM_USED_ONLY_ONCE  (DMI, BAD_PRACTICE):  創建Random對象,並且只使用一次

13.  DMI_SCHEDULED_THREAD_POOL_EXECUTOR_WITH_ZERO_CORE_THREADS  (Dm, CORRECTNESS):  創建沒有核心線程的ScheduledThreadPoolExecutor

14.  DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED  (Dm, STYLE):  預期傳入Runnable的地方卻傳入Thread

15.  DMI_VACUOUS_CALL_TO_EASYMOCK_METHOD  (Dm, CORRECTNESS):  EasyMock方法的無用/空調用

16.  DM_BOOLEAN_CTOR  (Dm, PERFORMANCE):  方法調用低效的Boolean構造器,應當使用Boolean.valueOf(...)方法替代

17.  DM_BOXED_PRIMITIVE_FOR_PARSING  (Bx, PERFORMANCE):  使用封裝/反封裝來解析一個基本類型

18.  DM_BOXED_PRIMITIVE_TOSTRING  (Bx, PERFORMANCE):  方法僅僅爲了調用toString方法而分配一個已封裝基本類型

19.  DM_CONVERT_CASE  (Dm, I18N):  考慮使用調用方法參數化版本的Locale

20.  DM_EXIT  (Dm, BAD_PRACTICE):  方法調用System.exit(...)

21.  DM_GC  (Dm, PERFORMANCE):  顯式的垃圾收集:極度可疑的代碼,除非是性能測試代碼

22.  DM_MONITOR_WAIT_ON_CONDITION  (Dm, MT_CORRECTNESS):  監控按條件調用的wait()方法

23.  DM_NEW_FOR_GETCLASS  (Dm, PERFORMANCE):  方法分配一個對象,僅僅爲了獲得類對象

24.  DM_NEXTINT_VIA_NEXTDOUBLE  (Dm, PERFORMANCE):  爲了生成一個隨機整數,調用Random對象的nextInt方法,而不是nextDouble方法

25.  DM_RUN_FINALIZERS_ON_EXIT  (Dm, BAD_PRACTICE):  方法調用危險的runFinalizersOnExit方法

26.  DM_STRING_CTOR  (Dm, PERFORMANCE):  方法調用低效的new String(String)構造器

27.  DM_STRING_TOSTRING  (Dm, PERFORMANCE):  方法對一個String對象調用toString()方法

28.  DM_STRING_VOID_CTOR  (Dm, PERFORMANCE):  方法調用低效的new String()構造器

29.  DM_USELESS_THREAD  (Dm, MT_CORRECTNESS):  使用默認爲空的run方法創建一個線程

30.  INT_BAD_COMPARISON_WITH_INT_VALUE  (INT, CORRECTNESS):  比較int值和long常量的錯誤比較方法

31.  INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE  (INT, CORRECTNESS):  比較非負值和負值常量的錯誤比較方法

32.  INT_BAD_COMPARISON_WITH_SIGNED_BYTE  (INT, CORRECTNESS):  帶符號字節值的錯誤比較方法

33.  INT_BAD_REM_BY_1  (INT, STYLE):  整數餘數模1

34.  INT_VACUOUS_BIT_OPERATION  (INT, STYLE):  對整數值進行空的位掩碼運算

35.  INT_VACUOUS_COMPARISON  (INT, STYLE):  對整數值進行空的比較運算

36.  NP_IMMEDIATE_DEREFERENCE_OF_READLINE  (NP, STYLE):  對readLine()方法的結果立即解引用

37.  RV_01_TO_INT  (RV, CORRECTNESS):  0和1之間的隨機值被強制轉換爲整數0

38.  RV_ABSOLUTE_VALUE_OF_HASHCODE  (RV, CORRECTNESS):  計算帶符號32位散列碼絕對值的錯誤嘗試

39.  RV_ABSOLUTE_VALUE_OF_RANDOM_INT  (RV, CORRECTNESS):  計算帶符號隨機整數絕對值的錯誤嘗試

40.  RV_REM_OF_HASHCODE  (RV, STYLE):  散列碼的餘數可能是負數

41.  RV_REM_OF_RANDOM_INT  (RV, STYLE):  32位帶符號隨機整數的餘數

42.  SW_SWING_METHODS_INVOKED_IN_SWING_THREAD  (SW, BAD_PRACTICE):  某些swing方法需要在Swing線程中調用

 

2.27 SerializableIdiom

模式

RS|Se|SnVI|WS

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.SerializableIdiom

說明

這個檢測器會檢查Serializable類實現中的潛在問題。

報告模式

1.      RS_READOBJECT_SYNC  (RS, MT_CORRECTNESS):  類的readObject()方法是同步的

2.      SE_BAD_FIELD  (Se, BAD_PRACTICE):  可序列化類中的非暫態不可序列化的實例字段

3.      SE_BAD_FIELD_INNER_CLASS  (Se, BAD_PRACTICE):  不可序列化的類有一個可序列化的內部類

4.      SE_BAD_FIELD_STORE  (Se, BAD_PRACTICE):  不可序列化的值存儲在一個可序列化類的實例字段中

5.      SE_INNER_CLASS  (Se, BAD_PRACTICE):  可序列化的內部類

6.      SE_METHOD_MUST_BE_PRIVATE  (Se, CORRECTNESS):  爲了能夠成功序列化,方法必須是私有的

7.      SE_NONFINAL_SERIALVERSIONID  (Se, BAD_PRACTICE):  serialVersionUID不是final的

8.      SE_NONLONG_SERIALVERSIONID  (Se, BAD_PRACTICE):  serialVersionUID不是long型的

9.      SE_NONSTATIC_SERIALVERSIONID  (Se, BAD_PRACTICE):  serialVersionUID不是靜態的

10.  SE_NO_SERIALVERSIONID  (SnVI, BAD_PRACTICE):  類實現了Serializable接口,但是沒有定義serialVersionUID

11.  SE_NO_SUITABLE_CONSTRUCTOR  (Se, BAD_PRACTICE):  類實現了Serializable接口,但是它的父類沒有定義一個空構造器

12.  SE_NO_SUITABLE_CONSTRUCTOR_FOR_EXTERNALIZATION  (Se, BAD_PRACTICE):  類實現了Externalizable接口,但是沒有定義一個空構造器

13.  SE_PRIVATE_READ_RESOLVE_NOT_INHERITED  (Se, STYLE):  私有的readResolve方法不會被子類繼承

14.  SE_READ_RESOLVE_IS_STATIC  (Se, CORRECTNESS):  readResolve方法不能聲明爲static方法

15.  SE_READ_RESOLVE_MUST_RETURN_OBJECT  (Se, BAD_PRACTICE):  readResolve方法必須聲明爲返回Object類型

16.  SE_TRANSIENT_FIELD_NOT_RESTORED  (Se, BAD_PRACTICE):  反序列化沒有設置transient字段

17.  SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS  (Se, STYLE):  類的transient字段不可序列化

18.  WS_WRITEOBJECT_SYNC  (WS, MT_CORRECTNESS):  類的writeObject()方法是同步的,但是沒有做其他事情

 

2.28 FindPuzzlers

模式

Bx|Co|DLS|DMI|USELESS_STRING|EC|BSHIFT|ICAST|IC|IJU|IM|PZ|RV

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.FindPuzzlers

說明

這個檢測器會檢查Joshua Bloch和Neal Gafter在他們的著作《Programming Puzzlers》中提到的各種小錯誤。

報告模式

1.      BX_BOXING_IMMEDIATELY_UNBOXED  (Bx, PERFORMANCE):  封裝基本類型的值,然後又立即反封裝

2.      BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERCION  (Bx, PERFORMANCE):  封裝了基本類型的值,然後爲了進行基本類型的強制轉換,又再次反封裝

3.      BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR  (Bx, CORRECTNESS):  反封裝基本類型的值,然後強制用於三元運算符

4.      BX_UNBOXING_IMMEDIATELY_REBOXED  (Bx, PERFORMANCE):  反封裝已經封裝的值,然後又立即重新封裝

5.      CO_COMPARETO_RESULTS_MIN_VALUE  (Co, CORRECTNESS):  compareTo()/compare()方法返回Integer.MIN_VALUE

6.      DLS_DEAD_LOCAL_STORE_IN_RETURN  (DLS, STYLE):  返回語句中的無效賦值操作

7.      DLS_OVERWRITTEN_INCREMENT  (DLS, CORRECTNESS):  覆蓋增量方法

8.      DMI_BAD_MONTH  (DMI, CORRECTNESS):  表示月份的錯誤常量值

9.      DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS  (DMI, BAD_PRACTICE):  由於重用Entry對象,向一個Entry集合添加元素可能會失敗

10.  DMI_INVOKING_HASHCODE_ON_ARRAY  (DMI, CORRECTNESS):  對一個數組調用hashCode方法

11.  DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY  (USELESS_STRING, CORRECTNESS):  對一個未命名數組調用toString方法

12.  DMI_INVOKING_TOSTRING_ON_ARRAY  (USELESS_STRING, CORRECTNESS):  對一個數組調用toString方法

13.  EC_BAD_ARRAY_COMPARE  (EC, CORRECTNESS):  對一個數組調用equals()方法等價於使用==運算符

14.  ICAST_BAD_SHIFT_AMOUNT  (BSHIFT, CORRECTNESS):  32位int型值的移位量不在-31和31之間

15.  ICAST_INTEGER_MULTIPLY_CAST_TO_LONG  (ICAST, STYLE):  將整數乘法運算的結果轉換爲long型

16.  ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT  (BSHIFT, STYLE):  將無符號右移運算的結果轉換爲short/byte型

17.  IC_SUPERCLASS_USES_SUBCLASS_DURING_INITIALIZATION  (IC, BAD_PRACTICE):  父類在初始化期間使用了子類

18.  IJU_ASSERT_METHOD_INVOKED_FROM_RUN_METHOD  (IJU, CORRECTNESS):  run方法中的JUnit斷言將不會被JUnit注意到

19.  IM_AVERAGE_COMPUTATION_COULD_OVERFLOW  (IM, STYLE):  均值計算可能會溢出

20.  IM_BAD_CHECK_FOR_ODD  (IM, STYLE):  不能對負數進行奇偶判斷

21.  IM_MULTIPLYING_RESULT_OF_IREM  (IM, CORRECTNESS):  一個整數和一次整數取餘運算的結果相乘

22.  PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS  (PZ, BAD_PRACTICE):  沒有在迭代器中重用條目對象

23.  RV_NEGATING_RESULT_OF_COMPARETO  (RV, BAD_PRACTICE):  對compareTo()/compare()方法的結果進行取反運算

 

2.29 FindUseOfNonSerializableValue

模式

DMI|J2EE

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.FindUseOfNonSerializableValue

說明

這個檢測器會檢查在需要使用可序列化對象的上下文中是否使用了不可序列化的對象。

報告模式

1.      DMI_NONSERIALIZABLE_OBJECT_WRITTEN  (DMI, STYLE):  將不可序列化對象寫入ObjectOutput

2.      J2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_SESSION  (J2EE, BAD_PRACTICE):  將不可序列化對象存至HttpSession

 

2.30 InitializationChain

模式

IC|SI

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.InitializationChain

說明

這個檢測器會找出潛在的環狀類初始化依賴關係。

報告模式

1.      IC_INIT_CIRCULARITY  (IC, STYLE):  環狀初始化

2.      SI_INSTANCE_BEFORE_FINALS_ASSIGNED  (SI, BAD_PRACTICE):  靜態初始化程序在所有static final字段被賦值之前創建實例

 

2.31 NoteUnconditionalParamDerefs

模式

NP

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.NoteUnconditionalParamDerefs

說明

分析應用程序中的所有方法,以便於確定哪些解引用參數是無條件的。這些信息會在稍後的分析中用到,用來找出代碼中調用方法,但可能將空值傳給這些方法的地方。這個檢測器的運行速度較慢。

報告模式

1.      NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT  (NP, BAD_PRACTICE):  equals()方法沒有檢查參數是否爲null

2.      NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE  (NP, STYLE):  參數不能爲空值,但是卻標記爲可爲空值

 

2.32 FindFinalizeInvocations

模式

FI

速度

缺陷類別

壞習慣

類型

edu.umd.cs.findbugs.detect.FindFinalizeInvocations

說明

這個檢測器會找到代碼中調用finalize()的地方,以及其他和finalize()方法相關的問題。

報告模式

1.      FI_EMPTY  (FI, BAD_PRACTICE):  應當刪除空的finalize()方法

2.      FI_EXPLICIT_INVOCATION  (FI, BAD_PRACTICE):  顯式調用finalize()方法

3.      FI_MISSING_SUPER_CALL  (FI, BAD_PRACTICE):  finalize()方法沒有調用父類的finalize()方法

4.      FI_NULLIFY_SUPER  (FI, BAD_PRACTICE):  finalize()方法使父類的finalize()方法無效

5.      FI_PUBLIC_SHOULD_BE_PROTECTED  (FI, MALICIOUS_CODE):  finalize()方法應當是protected的,不是public的

6.      FI_USELESS  (FI, BAD_PRACTICE):  除了調用父類的finalize()之外,finalize()方法什麼都沒做

 

3.       Correctness(正確性)

3.1 AppendingToAnObjectOutputStream

模式

IO

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.AppendingToAnObjectOutputStream

說明

找出代碼中試圖向一個對象輸出流添加信息的地方。

報告模式

1.      IO_APPENDING_TO_OBJECT_OUTPUT_STREAM  (IO, CORRECTNESS):  試圖向一個對象輸出流添加信息

 

3.2 BadAppletConstructor

模式

BAC

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.BadAppletConstructor

說明

某些applet的構造器會調用父類applet中的方法,而父類applet可能依賴於applet存根,這個檢測器會找出這些applet構造器。因爲這個存根直到調用init()方法時纔會初始化,所以構造器中調用的這些方法將會失敗。

報告模式

1.      BAC_BAD_APPLET_CONSTRUCTOR  (BAC, CORRECTNESS):  依賴於未初始化AppletStub的錯誤applet構造器

 

3.3 BadResultSetAccess

模式

SQL

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.BadResultSetAccess

說明

這個檢測器會檢查一個結果集的getXXX或setXXX方法,找出字段索引值爲0的上述方法調用。因爲ResultSet字段的起始索引爲1,所以前述的方法調用總是錯誤的。

報告模式

1.      SQL_BAD_PREPARED_STATEMENT_ACCESS  (SQL, CORRECTNESS):  方法試圖通過0索引訪問一個預處理語句參數

2.      SQL_BAD_RESULTSET_ACCESS  (SQL, CORRECTNESS):  方法試圖通過0索引訪問一個結果集字段

 

3.4 BadSyntaxForRegularExpression

模式

RE

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.BadSyntaxForRegularExpression

說明

這個檢測器會找出含有無效語法的正則表達式。

報告模式

1.      RE_BAD_SYNTAX_FOR_REGULAR_EXPRESSION  (RE, CORRECTNESS):  正則表達式使用無效語法

2.      RE_CANT_USE_FILE_SEPARATOR_AS_REGULAR_EXPRESSION  (RE, CORRECTNESS):  正則表達式使用文件分隔符

3.      RE_POSSIBLE_UNINTENDED_PATTERN  (RE, CORRECTNESS):  正則表達式使用“.”或“|”符號

 

3.5 BadlyOverriddenAdapter

模式

BOA

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.BadlyOverriddenAdapter

說明

某些類會擴展Adapter類,並且會使用錯誤的簽名覆蓋一個Listener方法,這個檢測器會找出這些類的代碼。

報告模式

1.      BOA_BADLY_OVERRIDDEN_ADAPTER  (BOA, CORRECTNESS):  類錯誤地覆蓋父類Adapter中實現的一個方法

 

3.6 CheckExpectedWarnings

模式

FB

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.CheckExpectedWarnings

說明

檢查@ExpectedWarning和@NoWarning註解。這個檢測器僅僅用於測試FindBugs。

報告模式

1.      FB_MISSING_EXPECTED_WARNING  (FB, CORRECTNESS):  FindBugs沒有發出預期的或期望的警告

2.      FB_UNEXPECTED_WARNING  (FB, CORRECTNESS):  FindBugs發出預期外或非期望的警告

 

3.7 FindFloatMath

模式

FL

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.FindFloatMath

說明

這個檢測器會找出代碼中使用浮點運算的地方。這個檢測器的運行速度中等。

報告模式

1.      FL_MATH_USING_FLOAT_PRECISION  (FL, CORRECTNESS):  方法執行具有浮點精度的運算

 

3.8 FindMaskedFields

模式

MF

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.FindMaskedFields

說明

這個檢測器會檢查類的屬性字段是否被方法中定義的局部變量遮蔽。

報告模式

1.      MF_CLASS_MASKS_FIELD  (MF, CORRECTNESS):  類定義的字段遮蔽了一個父類的字段

2.      MF_METHOD_MASKS_FIELD  (MF, CORRECTNESS):  方法定義一個隱藏類字段的局部變量

 

3.9 FindNullDerefsInvolvlingNonShortCircuitEvaluation

模式

NP

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.FindNullDerefsInvolvingNonShortCircuitEvaluation

說明

這個檢測器會找到代碼中可能發生空指針異常的地方,使用非短路求值會導致不能成功使用常用技巧。

報告模式

1.      NP_GUARANTEED_DEREF  (NP, CORRECTNESS):  一定會對null值解引用

2.      NP_NULL_ON_SOME_PATH  (NP, CORRECTNESS):  可能的空指針解引用

 

3.10 FindSelfComparison2

模式

SA

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.FindSelfComparison2

說明

這個檢測器會找出代碼中一個值和它自己進行比較的地方。

報告模式

1.      SA_FIELD_SELF_COMPARISON  (SA, CORRECTNESS):  字段與它自己比較

2.      SA_FIELD_SELF_COMPUTATION  (SA, CORRECTNESS):  對一個字段進行無意義的自我計算(例如x & x)

3.      SA_LOCAL_SELF_COMPARISON  (SA, CORRECTNESS):  局部變量與它自己比較

4.      SA_LOCAL_SELF_COMPUTATION  (SA, CORRECTNESS):  對一個局部變量進行無意義的自我計算(例如x & x)

 

3.11 FindUninitializedGet

模式

UR

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.FindUninitializedGet

說明

這個檢測器會檢查構造器中是否讀取未初始化的字段。

報告模式

1.      UR_UNINIT_READ  (UR, CORRECTNESS):  構造器中讀取未初始化字段

 

3.12 InfiniteLoop

模式

IL

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.InfiniteLoop

說明

檢查代碼中是否有無限循環

報告模式

1.      IL_INFINITE_LOOP  (IL, CORRECTNESS):  一個明顯的無限循環

 

3.13 InfiniteRecursiveLoop

模式

IL

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.InfiniteRecursiveLoop

說明

檢查代碼中是否有無限的遞歸循環。

報告模式

1.      IL_CONTAINER_ADDED_TO_ITSELF  (IL, CORRECTNESS):  一個自我添加的集合

2.      IL_INFINITE_RECURSIVE_LOOP  (IL, CORRECTNESS):  一個明顯的無限遞歸循環

 

3.14 InitializeNonnullFieldsInConstructor

模式

NP

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.InitializeNonnullFieldsInConstructor

說明

找到沒有在構造器中寫入的非空字段。

報告模式

1.      NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR  (NP, CORRECTNESS):  沒有初始化非空字段

 

3.15 IntCast2LongAsInstant

模式

ICAST

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.IntCast2LongAsInstant

說明

找出代碼中使用32位值描述從標準基準時間到現在的時間長度(以毫秒爲單位)的地方。

報告模式

1.      ICAST_INT_2_LONG_AS_INSTANT  (ICAST, CORRECTNESS):  將int型值轉換爲long型,用於表示絕對時間

 

3.16 InvalidJUnitTest

模式

IJU

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.InvalidJUnitTest

說明

這個檢測器會找出有缺陷的JUnit測試代碼。

報告模式

1.      IJU_BAD_SUITE_METHOD  (IJU, CORRECTNESS):  TestCase聲明一個錯誤的suite方法

2.      IJU_NO_TESTS  (IJU, CORRECTNESS):  TestCase中沒有測試

3.      IJU_SETUP_NO_SUPER  (IJU, CORRECTNESS):  TestCase定義的setUp方法沒有調用super.setUp()方法

4.      IJU_SUITE_NOT_STATIC  (IJU, CORRECTNESS):  TestCase實現一個非靜態suite方法

5.      IJU_TEARDOWN_NO_SUPER  (IJU, CORRECTNESS):  TestCase定義的tearDown方法沒有調用super.tearDown()方法

 

3.17 QuestionableBooleanAssignment

模式

QBA

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.QuestionableBooleanAssignment

說明

這個檢測器會找出代碼中將布爾字面值簡單的賦值給變量的條件表達式。

報告模式

1.      QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT  (QBA, CORRECTNESS):  方法在布爾表達式中賦值布爾字面值

 

3.18 ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass

模式

UR

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass

說明

檢查父類構造器中調用的方法是否正確。

報告模式

1.      UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR  (UR, CORRECTNESS):  父類構造器調用未初始化的字段讀取方法

 

3.19 RepeatedConditionals

模式

RpC

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.RepeatedConditionals

說明

這個檢測器會找出代碼中包含重複條件測試的地方,例如(x == 5 || x == 5)。

報告模式

1.      RpC_REPEATED_CONDITIONAL_TEST  (RpC, CORRECTNESS):  重複條件測試

 

3.20 ResolveAllReferencece

模式

VR

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.ResolveAllReferences

說明

檢查代碼中所有的引用調用是否已解析。

報告模式

1.      VR_UNRESOLVABLE_REFERENCE  (VR, CORRECTNESS):  類引用未能識別的類或方法

 

3.21 SuperfluousInstanceOf

模式

SIO

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.SuperfluousInstanceOf

說明

這個檢測器會找出代碼中本該靜態確定類型,但卻使用instanceof運算符進行類型檢查的地方。

報告模式

1.      SIO_SUPERFLUOUS_INSTANCEOF  (SIO, CORRECTNESS):  使用instanceof運算符進行不必要的類型檢查

 

3.22 SuspiciousThreadInterrupted

模式

STI

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.SuspiciousThreadInterrupted

說明

這個檢測器會找出從一個非靜態上下文中調用的Thread.interrupted()方法。如果調用的是Thread.currentThread().interrupted()方法,那麼這會是一次無效的操作,只要使用Thread.interrupted()即可。然而,如果是對一個任意的線程對象調用這個方法,那麼非常有可能發生錯誤,因爲總是對當前線程調用interrupted()方法。

報告模式

1.      STI_INTERRUPTED_ON_CURRENTTHREAD  (STI, CORRECTNESS):  不需要調用currentThread()方法,直接調用interrupted()方法即可

2.      STI_INTERRUPTED_ON_UNKNOWNTHREAD  (STI, CORRECTNESS):  對線程實例調用靜態的Thread.interrupted()方法

 

3.23 UncallableMethodOfAnonymousClass

模式

UMAC

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.UncallableMethodOfAnonymousClass

說明

這個檢測器會檢查具有方法定義的匿名內部類,找出那些包含想要覆蓋但又沒有覆蓋父類方法的方法的匿名內部類。

報告模式

1.      UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS  (UMAC, CORRECTNESS):  匿名類含有無法調用的方法定義

 

3.24 VarArgsProblems

模式

VA

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.VarArgsProblems

說明

找出由Java 1.5的可變參數引起的問題。

報告模式

1.      VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG  (VA, CORRECTNESS):  將基本類型數組傳遞給預期接收可變數量對象實參的方法

 

3.25 CheckTypeQualifiers

模式

TQ

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.CheckTypeQualifiers

說明

檢查變量是否違反由JSR-305類型的修飾符註解所指定的屬性。

報告模式

1.      TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED  (TQ, CORRECTNESS):  變量在不能帶有一個類型修飾符的地方卻帶有這個類型修飾符

2.      TQ_COMPARING_VALUES_WITH_INCOMPATIBLE_TYPE_QUALIFIERS  (TQ, CORRECTNESS):  比較不兼容的類型修飾符所修飾的變量

3.      TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALWAYS_SINK  (TQ, STYLE):  將需要帶有類型修飾符的變量標記爲未知

4.      TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEVER_SINK  (TQ, STYLE):  將不需要帶有類型修飾符的變量標記爲未知

5.      TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK  (TQ, CORRECTNESS):  變量可能不帶有一個類型修飾符,但使用時卻總是需要它帶有這個類型修飾符

6.      TQ_MAYBE_SOURCE_VALUE_REACHES_NEVER_SINK  (TQ, CORRECTNESS):  變量可能帶有一個類型修飾符,但使用時卻禁止它帶有這個類型修飾符

7.      TQ_NEVER_VALUE_USED_WHERE_ALWAYS_REQUIRED  (TQ, CORRECTNESS):  在需要變量帶有一個類型修飾符的地方,卻將這個變量註解爲從不帶有這個類型修飾符

8.      TQ_UNKNOWN_VALUE_USED_WHERE_ALWAYS_STRICTLY_REQUIRED  (TQ, CORRECTNESS):  變量在需要帶有類型修飾符的地方卻沒有帶有這個類型修飾符

 

3.26 FindBadCast2

模式

BC|NP

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.FindBadCast2

說明

這個檢測器會通過數據流分析找出錯誤的對象引用轉換。

報告模式

1.      BC_BAD_CAST_TO_ABSTRACT_COLLECTION  (BC, STYLE):  可疑的抽象集合類型轉換

2.      BC_BAD_CAST_TO_CONCRETE_COLLECTION  (BC, STYLE):  可疑的實體集合類型轉換

3.      BC_IMPOSSIBLE_CAST  (BC, CORRECTNESS):  不可能的轉換

4.      BC_IMPOSSIBLE_DOWNCAST  (BC, CORRECTNESS):  不可能的向下轉換

5.      BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY  (BC, CORRECTNESS):  不可能的toArray()結果向下轉換

6.      BC_IMPOSSIBLE_INSTANCEOF  (BC, CORRECTNESS):  instanceof總是會返回false

7.      BC_UNCONFIRMED_CAST  (BC, STYLE):  未檢查/未確認的類型轉換

8.      BC_UNCONFIRMED_CAST_OF_RETURN_VALUE  (BC, STYLE):  未檢查/未確認的方法返回值類型轉換

9.      BC_VACUOUS_INSTANCEOF  (BC, STYLE):  instanceof總是會返回true

10.  NP_NULL_INSTANCEOF  (NP, CORRECTNESS):  檢查一個已知的空值是哪種類型的實例

 

3.27 FindDeadLocalStores

模式

DLS|IP

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.FindDeadLocalStores

說明

這個檢測器會找出賦值之後從來沒有使用過的局部向量。這個檢測器的運行速度中等。

報告模式

1.      DLS_DEAD_LOCAL_INCREMENT_IN_RETURN  (DLS, CORRECTNESS):  返回語句中的無用增量

2.      DLS_DEAD_LOCAL_STORE  (DLS, STYLE):  死存儲局部向量

3.      DLS_DEAD_LOCAL_STORE_OF_NULL  (DLS, STYLE):  空值死存儲局部向量

4.      DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD  (DLS, STYLE):  遮蔽字段的死存儲局部向量

5.      DLS_DEAD_STORE_OF_CLASS_LITERAL  (DLS, CORRECTNESS):  死存儲類常量

6.      IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN  (IP, CORRECTNESS):  沒有讀取傳入方法的參數,但是覆寫了這個參數

 

3.28 FindFiledSelfAssignment

模式

SA

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.FindFieldSelfAssignment

說明

這個檢測器會找出代碼中通過讀取一個字段的值來爲同一個字段賦值的地方。

報告模式

1.      SA_FIELD_SELF_ASSIGNMENT  (SA, CORRECTNESS):  自我賦值的字段

2.      SA_LOCAL_DOUBLE_ASSIGNMENT  (SA, STYLE):  雙重賦值的局部變量

 

3.29 FindFloatEquality

模式

FE

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.FindFloatEquality

說明

找出代碼中的浮點數判等表達式。這個檢測器的運行速度較快。

報告模式

1.      FE_FLOATING_POINT_EQUALITY  (FE, STYLE):  浮點數的相等性測試

2.      FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER  (FE, CORRECTNESS):  註定失敗的NaN相等性測試

 

3.30 FindLocalSelfAssignment2

模式

SA

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.FindLocalSelfAssignment2

說明

這個檢測器會找出代碼中自我賦值的局部變量。

報告模式

1.      SA_LOCAL_SELF_ASSIGNMENT  (SA, STYLE):  局部變量自我賦值

2.      SA_LOCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD  (SA, CORRECTNESS):  局部變量自我賦值,而不是賦值給字段

 

3.31 FindSelfComparison

模式

SA

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.FindSelfComparison

說明

這個檢測器會找出代碼中取值進行自我比較的地方。

報告模式

1.      SA_FIELD_DOUBLE_ASSIGNMENT  (SA, STYLE):  字段雙重賦值

2.      SA_FIELD_SELF_COMPARISON  (SA, CORRECTNESS):  字段自我比較

3.      SA_FIELD_SELF_COMPUTATION  (SA, CORRECTNESS):  字段無意義的自我計算(例如x & x)

4.      SA_LOCAL_SELF_COMPARISON  (SA, CORRECTNESS):  取值自我比較

5.      SA_LOCAL_SELF_COMPUTATION  (SA, CORRECTNESS):  變量無意義的自我計算(例如x & x)

 

3.32 IDivResultCastToDouble

模式

ICAST

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.IdivResultCastToDouble

說明

這個檢測器會找出代碼中將整數除法的結果轉換爲double型的地方。通常,有意義的操作應當是將int型操作數轉換爲double型,然後再執行除法運算。

報告模式

1.      ICAST_IDIV_CAST_TO_DOUBLE  (ICAST, STYLE):  將整數除法的結果轉換爲double或float型

2.      ICAST_INT_CAST_TO_DOUBLE_PASSED_TO_CEIL  (ICAST, CORRECTNESS):  將整數值轉換爲double類型,然後傳給Math.ceil方法

3.      ICAST_INT_CAST_TO_FLOAT_PASSED_TO_ROUND  (ICAST, CORRECTNESS):  將int型值轉換爲float型,然後傳給Math.round方法

 

3.33 witchFallThrough

模式

SF

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.SwitchFallthrough

說明

這個檢測器會找出存在跨越分支問題的switch語句。

報告模式

1.      SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH  (SF, CORRECTNESS):  由於switch語句跨越分支引起的死存儲

2.      SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH_TO_THROW  (SF, CORRECTNESS):  由於switch語句跨越分支拋出異常引起的死存儲

3.      SF_SWITCH_FALLTHROUGH  (SF, STYLE):  發現switch語句中的一個case分支跨越到下一個case分支中

4.      SF_SWITCH_NO_DEFAULT  (SF, STYLE):  發現switch語句缺少默認的case分支

 

3.34 UnreadFields

模式

NP|SIC|SS|ST|UrF|UuF|UwF

速度

缺陷類別

正確性

類型

edu.umd.cs.findbugs.detect.UnreadFields

說明

這個檢測器會找出代碼中從未被讀取過值的字段。

報告模式

1.      NP_UNWRITTEN_FIELD  (NP, CORRECTNESS):  讀取沒有寫入過的字段

2.      NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD  (NP, STYLE):  讀取沒有寫入過的public或protected字段

3.      SIC_INNER_SHOULD_BE_STATIC  (SIC, PERFORMANCE):  應當是一個靜態內部類

4.      SIC_INNER_SHOULD_BE_STATIC_ANON  (SIC, PERFORMANCE):  可以重構爲一個具名靜態內部類

5.      SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS  (SIC, PERFORMANCE):  可以重構爲一個靜態內部類

6.      SIC_THREADLOCAL_DEADLY_EMBRACE  (SIC, CORRECTNESS):  非靜態內部類和本地線程產生死鎖

7.      SS_SHOULD_BE_STATIC  (SS, PERFORMANCE):  未讀字段:這個字段應當是靜態的嗎?

8.      ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD  (ST, STYLE):  在實例方法中寫入靜態字段

9.      URF_UNREAD_FIELD  (UrF, PERFORMANCE):  未讀字段

10.  URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD  (UrF, STYLE):  未讀public/protected字段

11.  UUF_UNUSED_FIELD  (UuF, PERFORMANCE):  未使用字段

12.  UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD  (UuF, STYLE):  未使用public/protected字段

13.  UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR  (UwF, STYLE):  在構造器中沒有初始化字段,稍後也沒有進行判空操作就解引用這個字段

14.  UWF_NULL_FIELD  (UwF, CORRECTNESS):  字段一直被設爲空

15.  UWF_UNWRITTEN_FIELD  (UwF, CORRECTNESS):  未寫入字段

16.  UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD  (UwF, STYLE):  未寫入public/protected字段

 

4.       Dodgy Code(危險代碼)

4.1 BadUseOfReturnValue

模式

RV

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.BadUseOfReturnValue

說明

找出代碼中在確定函數的返回值爲非空之後,就直接將其丟棄不使用的地方。

報告模式

1.      RV_CHECK_FOR_POSITIVE_INDEXOF  (RV, STYLE):  方法檢查String.indexOf方法的結果是否是正數

2.      RV_DONT_JUST_NULL_CHECK_READLINE  (RV, STYLE):  方法檢查readLine的結果是非空值之後,直接丟棄這個結果

 

4.2 CallToUnsupportedMethod

模式

Dm

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.CallToUnsupportedMethod

說明

這個檢測器會找出代碼中調用不支持方法的地方。

報告模式

1.      DMI_UNSUPPORTED_METHOD  (Dm, STYLE):  調用不支持的方法

 

4.3 CheckRelaxingNullnessAnnotation

模式

NP

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.CheckRelaxingNullnessAnnotation

說明

檢查覆蓋方法是否對返回值放寬@Nonnull的限制或者對參數放寬@CheckForNull的限制。

報告模式

1.      NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION  (NP, STYLE):  方法對參數收緊空值性註解

2.      NP_METHOD_RETURN_RELAXING_ANNOTATION  (NP, STYLE):  方法對返回值放寬空值性註解

 

4.4 ConfusedInheritance

模式

CI

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.ConfusedInheritance

說明

這個檢測器會找出聲明瞭受保護(protected)成員的final類。因爲final類是不能被繼承的,所以對其成員使用受保護訪問是不正確的。應當將訪問方法修改爲公開的(public)或私有的(private),以此表示這個字段的正確含義。這是由於改變了這個類的用途而導致的,沒有完全將所有的類改變爲新的範型。

報告模式

1.      CI_CONFUSED_INHERITANCE  (CI, STYLE):  聲明受保護字段的final類

 

4.5 ConfusionBetweenInheritedAndOuterMethod

模式

IA

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.ConfusionBetweenInheritedAndOuterMethod

說明

找到代碼中繼承方法和外層方法之間的潛在混淆。

報告模式

1.      IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTER_METHOD  (IA, STYLE):  潛在的二義性繼承方法或外層方法調用

 

4.6 DuplicateBranches

模式

DB

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.DuplicateBranches

說明

這個檢測器會檢查if/else或switch語句中是否有兩個具有相同代碼的分支,這種情況會降低測試的有用性。這通常是由於複製粘貼兩條分支時造成的,會導致其中一條分支的邏輯不正確。

報告模式

1.      DB_DUPLICATE_BRANCHES  (DB, STYLE):  方法含有使用相同代碼的兩條分支

2.      DB_DUPLICATE_SWITCH_CLAUSES  (DB, STYLE):  方法含有使用相同代碼的兩條switch子句

 

4.7 FindBadForLoop

模式

QF

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.FindBadForLoop

說明

這個檢測器會找出代碼中不正確的for循環。

報告模式

1.      QF_QUESTIONABLE_FOR_LOOP  (QF, STYLE):  for循環中含有複雜的、難以捉摸的或錯誤的增量

 

4.8 FindCircularDependencies

模式

CD

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.FindCircularDependencies

說明

這個檢測器會找出類之間的環狀依賴關係。

報告模式

1.      CD_CIRCULAR_DEPENDENCY  (CD, STYLE):  測試類之間的環狀依賴關係

 

4.9 FindNonSerializableValuePassedToWriteObject

模式

DMI

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.FindNonSerializableValuePassedToWriteObject

說明

這個檢測器會找出代碼中將不可序列化對象傳遞給一個ObjectOutput對象的writeObject方法的地方。

報告模式

1.      DMI_NONSERIALIZABLE_OBJECT_WRITTEN  (DMI, STYLE):  將不可序列化對象寫入ObjectOutput

 

4.10 FindNonShortCircuit

模式

NS

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.FindNonShortCircuit

說明

這個檢測器會找出代碼中使用非短路布爾運算符(使用|和&,而不是||和&&)的可疑之處。

報告模式

1.      NS_DANGEROUS_NON_SHORT_CIRCUIT  (NS, STYLE):  使用非短路邏輯運算符的潛在危險

2.      NS_NON_SHORT_CIRCUIT  (NS, STYLE):  非短路邏輯運算符的可疑使用

 

4.11 FindUselessControlFlow

模式

UCF

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.FindUselessControlFlow

說明

這個檢測器會找出代碼中無效的控制流語句。

報告模式

1.      UCF_USELESS_CONTROL_FLOW  (UCF, STYLE):  無用的控制流

2.      UCF_USELESS_CONTROL_FLOW_NEXT_LINE  (UCF, STYLE):  指向下一行的無用的控制流

 

4.12 InconsistentAnnotations

模式

NP

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.InconsistentAnnotations

說明

這個檢測器會找出代碼中直接應用於方法參數的類型修飾符和這些方法參數的實際使用之間的不一致性。

報告模式

1.      NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE  (NP, STYLE):  參數必須是非空的,但是卻標記爲可爲空值

 

4.13 LoadOfKnownNullValue

模式

NP

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.LoadOfKnownNullValue

說明

檢查代碼中加載明知爲空的值的地方。

報告模式

1.      NP_LOAD_OF_KNOWN_NULL_VALUE  (NP, STYLE):  加載已知爲空的值

 

4.14 MultithreadedInstanceAccess

模式

MTIA

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.MultithreadedInstanceAccess

說明

這個檢測器會找出實現Struts框架時的潛在問題。

報告模式

1.      MTIA_SUSPECT_SERVLET_INSTANCE_FIELD  (MTIA, STYLE):  類擴展Servlet類,並且使用實例變量

2.      MTIA_SUSPECT_STRUTS_INSTANCE_FIELD  (MTIA, STYLE):  類擴展Struts的Action類,並且使用實例變量

 

4.15 PreferZeroLengthArrays

模式

PZLA

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.PreferZeroLengthArrays

說明

這個檢測器會找出返回值要麼是數組,要麼是空引用的方法。通常,當需要返回一個空引用時,返回一個長度爲零的數組比較好。

報告模式

1.      PZLA_PREFER_ZERO_LENGTH_ARRAYS  (PZLA, STYLE):  考慮返回一個長度爲零的數組,而不是返回空引用

 

4.16 PublicSemaphores

模式

PS

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.PublicSemaphores

說明

這個檢測器會找出使用wait()、notify()、notifyAll()等方法進行同步操作的公有類。這樣會將同步的實現方法作爲這個類的公共信息暴露出來。這個類的客戶程序可能會使用這個類的實例對象作爲它自己的同步化對象,從而對基本實現造成嚴重破壞。

報告模式

1.      PS_PUBLIC_SEMAPHORES  (PS, STYLE):  類在它的公有接口中暴露了同步和信號量

 

4.17 RedundantInterfaces

模式

RI

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.RedundantInterfaces

說明

這個檢測器會找出聲明實現的接口和父類實現的接口相同的類。如果父類實現了一個接口,那麼子類也會實現這個接口,所以這是一種多餘實現。

報告模式

1.      RI_REDUNDANT_INTERFACES  (RI, STYLE):  這個類和父類實現的接口相同

 

4.18 RuntimeExceptionCapture

模式

REC

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.RuntimeExceptionCapture

說明

當代碼塊中沒有任何代碼拋出異常時,這個檢測器會找出捕捉異常的catch子句。

報告模式

1.      REC_CATCH_EXCEPTION  (REC, STYLE):  沒有拋出異常,但卻捕捉異常

 

4.19 UselessSubclassMethod

模式

USM

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.UselessSubclassMethod

說明

這個檢測器會找出實現在父類中定義的方法的子類,子類僅僅通過將參數原封未動地傳遞給父類方法來實現這個方法。這些方法都是可以被移除的。

報告模式

1.      USM_USELESS_ABSTRACT_METHOD  (USM, STYLE):  抽象方法已經在已實現的接口中定義

2.      USM_USELESS_SUBCLASS_METHOD  (USM, STYLE):  方法過分地委託給父類方法

 

4.20 XMLFactoryBypass

模式

XFB

速度

缺陷類別

危險代碼

類型

edu.umd.cs.findbugs.detect.XMLFactoryBypass

說明

這個檢測器會找出XML接口實現的直接分配。這樣會使代碼依賴於一種特定的實現,而不是使用提供的工廠模式來創建這些對象。

報告模式

1.      XFB_XML_FACTORY_BYPASS  (XFB, STYLE):  方法直接分配XML接口的一種特定實現

 

5.       Internationalization(國際化)

5.1 DefaultEncodingDetector

模式

Dm

速度

缺陷類別

國際化

類型

edu.umd.cs.findbugs.detect.DefaultEncodingDetector

說明

檢查將byte轉換爲String(或者String轉換爲byte)的方法調用是否使用用戶默認的平臺編碼。這樣的方法調用會導致應用程序的行爲可能會隨着平臺的不同而改變。

報告模式

1.      DM_DEFAULT_ENCODING  (Dm, I18N):  信任默認編碼

 

6.       Multithreaded Correctness(多線程正確性)

6.1 AtomicityProblem

模式

AT

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.AtomicityProblem

說明

找到一個併發抽象上的不會原子性執行的操作(例如get/put方法)序列。

報告模式

1.      AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION  (AT, MT_CORRECTNESS):  對併發抽象的調用序列可能不是原子性的

 

6.2 DontIgnoreResultOfPutIfAbsent

模式

RV

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.DontIgnoreResultOfPutIfAbsent

說明

檢查如果putIfAbsent方法的結果被忽略,那麼作爲第二個參數傳入的值沒有被重用。

報告模式

1.      RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED  (RV, MT_CORRECTNESS):  忽略putIfAbsent方法的返回值,重用傳入putIfAbsent方法的參數值

 

6.3 FindDoubleCheck

模式

DC

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.FindDoubleCheck

說明

這個檢測器會找出代碼中雙重檢查鎖定的實例。

報告模式

1.      DC_DOUBLECHECK  (DC, MT_CORRECTNESS):  可能的雙重檢查字段

 

6.4 FindEmptySynchronizedBlock

模式

ESync

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.FindEmptySynchronizedBlock

說明

這個檢測器會找出代碼中空白的同步代碼塊。

報告模式

1.      ESync_EMPTY_SYNC  (ESync, MT_CORRECTNESS):  空白的同步代碼塊

 

6.5 FindInconsistentSync2

模式

IS|MSF

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.FindInconsistentSync2

說明

這個檢測器會找出代碼中通過一種相對於鎖定而言不一致的方式訪問字段的地方。這個檢測器的運行速度較慢。

報告模式

1.      IS2_INCONSISTENT_SYNC  (IS, MT_CORRECTNESS):  不一致的同步

2.      IS_FIELD_NOT_GUARDED  (IS, MT_CORRECTNESS):  沒有預防對字段的併發訪問

3.      MSF_MUTABLE_SERVLET_FIELD  (MSF, MT_CORRECTNESS):  可變的servlet字段

 

6.6 FindJSR166LockMonitorenter

模式

JLM

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.FindJSR166LockMonitorenter

說明

這個檢測器會找出代碼中在JSR166鎖上執行的普通同步。這個檢測器的運行速度中等。

報告模式

1.      JLM_JSR166_LOCK_MONITORENTER  (JLM, MT_CORRECTNESS):  在Lock實例上執行同步方法

2.      JLM_JSR166_UTILCONCURRENT_MONITORENTER  (JLM, MT_CORRECTNESS):  在util.concurrent實例上執行同步方法

3.      JML_JSR166_CALLING_WAIT_RATHER_THAN_AWAIT  (JLM, MT_CORRECTNESS):  對util.concurrent抽象使用監控風格的wait方法

 

6.7 FindMismatchedWaitOrNotify

模式

MWN

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.FindMismatchedWaitOrNotify

說明

不能對當前被鎖定的對象調用wait()、notify()、notifyAll()等方法,這個檢測器會找出代碼中對當前被鎖定對象調用這些方法的地方。這個檢測器的運行速度中等。因爲這個檢測器仍然在開發之中,會產生很多錯誤的結果,所以一般不使用這個檢測器。

報告模式

1.      MWN_MISMATCHED_NOTIFY  (MWN, MT_CORRECTNESS):  不匹配的notify()方法

2.      MWN_MISMATCHED_WAIT  (MWN, MT_CORRECTNESS):  不匹配的wait()方法

 

6.8 FindNakedNotify

模式

NN

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.FindNakedNotify

說明

這個檢測器會找出代碼中看起來沒有修改可變對象狀態的notify()方法調用。

報告模式

1.      NN_NAKED_NOTIFY  (NN, MT_CORRECTNESS):  不確定的notify方法

 

6.9 FindRunInvocations

模式

Ru

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.FindRunInvocations

說明

這個檢測器會找出代碼中對Thread.run()方法的調用。這個檢測器的運行速度較快。

報告模式

1.      RU_INVOKE_RUN  (Ru, MT_CORRECTNESS):  調用一個線程對象的run方法(實際上你是想啓動這個線程嗎?)

 

6.10 FindSleepWithLockHeld

模式

SWL

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.FindSleepWithLockHeld

說明

這個檢測器會找出代碼中調用Thread.sleep()方法,同時又保持鎖的地方。這個檢測器的速度較慢。

報告模式

1.      SWL_SLEEP_WITH_LOCK_HELD  (SWL, MT_CORRECTNESS):  方法調用Thread.sleep()方法,同時又不釋放鎖

 

6.11 FindSpinLoop

模式

SP

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.FindSpinLoop

說明

這個檢測器會找出代碼中自旋讀取一個字段的循環(自旋鎖)。

報告模式

1.      SP_SPIN_ON_FIELD  (SP, MT_CORRECTNESS):  方法自旋競爭字段

 

6.12 FindTwoLockWait

模式

TLW

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.FindTwoLockWait

說明

這個檢測器會找出代碼中調用wait()方法,同時又保持兩個(或更多個)鎖的地方。這個檢測器的運行速度較慢。

報告模式

1.      TLW_TWO_LOCK_WAIT  (TLW, MT_CORRECTNESS):  線程等待,但是同時又保持兩個鎖

 

6.13 FindUnconditionalWait

模式

UW

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.FindUnconditionalWait

說明

這個檢測器會找出代碼中沒有在條件代碼塊或循環代碼塊中調用的wait()方法。

報告模式

1.      UW_UNCOND_WAIT  (UW, MT_CORRECTNESS):  無條件的等待

 

6.14 FindUnreleasedLock

模式

UL

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.FindUnreleasedLock

說明

這個檢測器會找出代碼中已經獲得但是退出方法時沒有釋放的JSR-166(java.util.concurrent)鎖。這個檢測器的運行速度中等。注意,爲了使用這個檢測器,你需要在輔助的classpath中導入java.util.concurrent包(或者由它自己分析這個包)。

報告模式

1.      UL_UNRELEASED_LOCK  (UL, MT_CORRECTNESS):  方法在所有執行路徑上都沒有釋放鎖

2.      UL_UNRELEASED_LOCK_EXCEPTION_PATH  (UL, MT_CORRECTNESS):  方法在所有異常路徑上都沒有釋放鎖

 

6.15 FindUnsyncGet

模式

UG

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.FindUnsyncGet

說明

這個檢測器會檢查代碼中的get/set方法,找出get方法是非同步而set方法是同步的get/set方法對。

報告模式

1.      UG_SYNC_SET_UNSYNC_GET  (UG, MT_CORRECTNESS):  非同步的get方法,同步的set方法

 

6.16 LazyInit

模式

LI

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.LazyInit

說明

這個檢測器會找出代碼中不是volatile,但是延遲字段初始化的字段。這個檢測器的運行速度中等。

報告模式

1.      LI_LAZY_INIT_STATIC  (LI, MT_CORRECTNESS):  靜態字段的不正確的延遲初始化

2.      LI_LAZY_INIT_UPDATE_STATIC  (LI, MT_CORRECTNESS):  靜態字段的不正確的延遲初始化和更新

 

6.17 MutableLock

模式

ML

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.MutableLock

說明

這個檢測器會找出代碼中對被修改字段的同步對象讀取操作。

報告模式

1.      ML_SYNC_ON_UPDATED_FIELD  (ML, MT_CORRECTNESS):  方法對一個更新字段進行同步操作

 

6.18 StartInConstructor

模式

SC

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.StartInConstructor

說明

這個檢測器會找出啓動線程的構造器。

報告模式

1.      SC_START_IN_CTOR  (SC, MT_CORRECTNESS):  調用Thread.start()方法的構造器

 

6.19 StaticCalendarDetector

模式

STCAL

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.StaticCalendarDetector

說明

這個檢測器會發出關於java.util.Calendar或java.text.DateFormat類型(及其子類)的靜態字段的警報,因爲Calendar在使用多線程的情況下是天生不安全的。

報告模式

1.      STCAL_INVOKE_ON_STATIC_CALENDAR_INSTANCE  (STCAL, MT_CORRECTNESS):  調用靜態Calendar

2.      STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE  (STCAL, MT_CORRECTNESS):  調用靜態DateFormat

3.      STCAL_STATIC_CALENDAR_INSTANCE  (STCAL, MT_CORRECTNESS):  靜態Calendar字段

4.      STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE  (STCAL, MT_CORRECTNESS):  靜態DateFormat字段

 

6.20 SynchronizationOnSharedBuiltinConstant

模式

DL

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.SynchronizationOnSharedBuiltinConstant

說明

這個檢測器會找出代碼中對一個共享內建常量(例如String)進行同步操作的地方。

報告模式

1.      DL_SYNCHRONIZATION_ON_BOOLEAN  (DL, MT_CORRECTNESS):  對Boolean進行同步

2.      DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE  (DL, MT_CORRECTNESS):  對封裝的基本類型進行同步

3.      DL_SYNCHRONIZATION_ON_SHARED_CONSTANT  (DL, MT_CORRECTNESS):  對內部String進行同步

4.      DL_SYNCHRONIZATION_ON_UNSHARED_BOXED_PRIMITIVE  (DL, MT_CORRECTNESS):  對封裝的基本類型值進行同步

 

6.21 SynchronizeAndNullCheckField

模式

NP

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.SynchronizeAndNullCheckField

說明

這個檢測器會找出代碼中進行同步操作,然後又檢查是否爲空值的字段。

報告模式

1.      NP_SYNC_AND_NULL_CHECK_FIELD  (NP, MT_CORRECTNESS):  對同一個字段進行同步和空值檢查

 

6.22 SynchronizeOnClassLiteralNotGetClass

模式

WL

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.SynchronizeOnClassLiteralNotGetClass

說明

找出代碼中對getClass方法的結果進行同步操作,而不是對類常量進行同步操作的地方。

報告模式

1.      WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL  (WL, MT_CORRECTNESS):  對getClass同步,而不是對類常量同步

 

6.23 SynchronizingOnContentsOfFieldToProtectedField

模式

ML

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.SynchronizingOnContentsOfFieldToProtectField

說明

這個檢測器會找出代碼中爲了保護某個字段的更新而對這個字段進行同步操作的地方。

報告模式

1.      ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIELD  (ML, MT_CORRECTNESS):  爲了守護這個字段,嘗試對這個字段進行無效的同步操作

 

6.24 VolatileUsage

模式

VO

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.VolatileUsage

說明

找出使用volatile字段時的缺陷模式。

報告模式

1.      VO_VOLATILE_INCREMENT  (VO, MT_CORRECTNESS):  對一個volatile字段的增量操作不是原子性的

2.      VO_VOLATILE_REFERENCE_TO_ARRAY  (VO, MT_CORRECTNESS):  一個指向數組的volatile引用沒有將數組元素當做volatile的

 

6.25 WaitInLoop

模式

No|Wa

速度

缺陷類別

多線程

類型

edu.umd.cs.findbugs.detect.WaitInLoop

說明

這個檢測器會找出代碼中沒有在循環中調用的wait()方法。

報告模式

1.      NO_NOTIFY_NOT_NOTIFYALL  (No, MT_CORRECTNESS):  使用notify()方法,而不是notifyAll()方法

2.      WA_AWAIT_NOT_IN_LOOP  (Wa, MT_CORRECTNESS):  沒有在循環中調用Condition.await()方法

3.      WA_NOT_IN_LOOP  (Wa, MT_CORRECTNESS):  沒有在循環中等待

 

7.       Performance(性能)

7.1 FindUncalledPrivateMethods

模式

UPM

速度

缺陷類別

性能

類型

edu.umd.cs.findbugs.detect.FindUncalledPrivateMethods

說明

這個檢測器會找出從未調用過的私有方法。

報告模式

1.      UPM_UNCALLED_PRIVATE_METHOD  (UPM, PERFORMANCE):  從未調用過的私有方法

 

7.2 HugeSharedStringConstants

模式

HSC

速度

缺陷類別

性能

類型

edu.umd.cs.findbugs.detect.HugeSharedStringConstants

說明

這個檢測器會找出在多個class文件中重複出現的字符串常量。

報告模式

1.      HSC_HUGE_SHARED_STRING_CONSTANT  (HSC, PERFORMANCE):  大量的字符串常量在多個class文件中重複出現

 

7.3 InefficientMemberAccess

模式

IMA

速度

缺陷類別

性能

類型

edu.umd.cs.findbugs.detect.InefficientMemberAccess

說明

當一個類含有私有(private)成員變量和內部類時,這個檢測器會找出試圖寫入這個類的私有成員變量的內部類。在這種情況下,需要使用一個生成存取器方法的特殊編譯器來寫入這個變量。將可見性放寬至受保護的(protected)將會使得這個字段能夠被直接寫入。

報告模式

1.      IMA_INEFFICIENT_MEMBER_ACCESS  (IMA, PERFORMANCE):  內部類的方法訪問宿主類的一個私有成員變量

 

7.4 InefficientToArray

模式

ITA

速度

缺陷類別

性能

類型

edu.umd.cs.findbugs.detect.InefficientToArray

說明

當使用需要一個原型數組作爲參數的toArray()方法將Collection對象轉換爲數組時,這個檢測器會找出代碼中向這個toArray()方法傳遞一個長度爲零的數組實參的地方。

報告模式

1.      ITA_INEFFICIENT_TO_ARRAY  (ITA, PERFORMANCE):  方法通過長度爲零的數組實參調用toArray()方法

 

7.5 NumberConstructor

模式

Bx

速度

缺陷類別

性能

類型

edu.umd.cs.findbugs.detect.NumberConstructor

說明

找出代碼中通過基本類型的實參調用Number類構造器的地方。

報告模式

1.      DM_FP_NUMBER_CTOR  (Bx, PERFORMANCE):  方法調用無效的浮點數Number類構造器,請使用valueOf靜態方法代替

2.      DM_NUMBER_CTOR  (Bx, PERFORMANCE):  方法調用無效的Number構造器,請使用valueOf靜態方法代替

 

7.6 StringConcatenation

模式

SBSC

速度

缺陷類別

性能

類型

edu.umd.cs.findbugs.detect.StringConcatenation

說明

這個檢測器會找出在循環中使用“+”運算符拼接字符串的地方。

報告模式

1.      SBSC_USE_STRINGBUFFER_CONCATENATION  (SBSC, PERFORMANCE):  方法在一個循環中使用“+”運算符拼接字符串

 

7.7 URLProblems

模式

Dm

速度

缺陷類別

性能

類型

edu.umd.cs.findbugs.detect.URLProblems

說明

對java.net.URL調用equals和hashCode方法可以解析域名。結果,這些操作的開銷可能非常高昂,這個檢測器會找出代碼中可能調用此類方法的地方。

報告模式

1.      DMI_BLOCKING_METHODS_ON_URL  (Dm, PERFORMANCE):  URL的equals和hashCode方法正在阻塞

2.      DMI_COLLECTION_OF_URLS  (Dm, PERFORMANCE):  URL的Map和Set可能會導致性能問題

 

7.8 UnnecessaryMath

模式

UM

速度

缺陷類別

性能

類型

edu.umd.cs.findbugs.detect.UnnecessaryMath

說明

這個檢測器會找出代碼中對常數值調用java.lang.Math的靜態方法,而所得結果值也是一個靜態已知的常數值的地方。直接使用常數值的速度更快,有時也更加精確。

報告模式

1.      UM_UNNECESSARY_MATH  (UM, PERFORMANCE):  方法對一個常數值調用Math類的靜態方法

 

7.9 WrongMapIterator

模式

WMI

速度

缺陷類別

性能

類型

edu.umd.cs.findbugs.detect.WrongMapIterator

說明

這個檢測器會找出代碼中通過從一個keySet迭代器取得的一個鍵,訪問Map中相應條目的值的地方。

報告模式

1.      WMI_WRONG_MAP_ITERATOR  (WMI, PERFORMANCE):  使用keySet迭代器無效,請使用entrySet迭代器代替

 

8.       Malicious Code Vulnerability(惡意代碼漏洞)

8.1 DoInsideDoPrivileged

模式

DP

速度

缺陷類別

惡意代碼

類型

edu.umd.cs.findbugs.detect.DoInsideDoPrivileged

說明

找出應當在doPrivileged代碼塊中執行的代碼。

報告模式

1.      DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED  (DP, MALICIOUS_CODE):  應當只能在doPrivileged代碼塊中創建類加載器

2.      DP_DO_INSIDE_DO_PRIVILEGED  (DP, MALICIOUS_CODE):  調用了應當只能在doPrivileged代碼塊中調用的方法

 

8.2 FindReturnRef

模式

EI|EI2|MS

速度

缺陷類別

惡意代碼

類型

edu.umd.cs.findbugs.detect.FindReturnRef

說明

這個檢測器會找出返回可變靜態數據的方法。

報告模式

1.      EI_EXPOSE_REP  (EI, MALICIOUS_CODE):  返回指向可變對象的引用可能會暴露內部表示法

2.      EI_EXPOSE_REP2  (EI2, MALICIOUS_CODE):  結合指向可變對象的引用可能會暴露內部表示法

3.      EI_EXPOSE_STATIC_REP2  (MS, MALICIOUS_CODE):  將一個可變對象存儲在一個靜態字段中可能會暴露內部靜態狀態

4.      MS_EXPOSE_REP  (MS, MALICIOUS_CODE):  返回數組的公有靜態方法可能會暴露內部表示法

 

8.3 MutableStaticFields

模式

MS

速度

缺陷類別

惡意代碼

類型

edu.umd.cs.findbugs.detect.MutableStaticFields

說明

這個檢測器會找出可能會被惡意代碼篡改的靜態字段。

報告模式

1.      MS_CANNOT_BE_FINAL  (MS, MALICIOUS_CODE):  字段不是finale的,不能防止惡意代碼的修改

2.      MS_FINAL_PKGPROTECT  (MS, MALICIOUS_CODE):  字段應當既是final的,又是package或protected的

3.      MS_MUTABLE_ARRAY  (MS, MALICIOUS_CODE):  字段是一個可變數組

4.      MS_MUTABLE_HASHTABLE  (MS, MALICIOUS_CODE):  字段是一個可變哈希表

5.      MS_OOI_PKGPROTECT  (MS, MALICIOUS_CODE):  應當將字段從一個接口中抽出,並且將其設爲package或者protected

6.      MS_PKGPROTECT  (MS, MALICIOUS_CODE):  字段應當是package或protected

7.      MS_SHOULD_BE_FINAL  (MS, MALICIOUS_CODE):  字段不是final的,但應當是final的

8.      MS_SHOULD_BE_REFACTORED_TO_BE_FINAL  (MS, MALICIOUS_CODE):  字段不是final的,但是應當將其重構爲final的

 

9.       Bogus Random Noise(僞隨機噪聲)

9.1 Noise

模式

NOISE

速度

缺陷類別

僞隨機噪聲

類型

edu.umd.cs.findbugs.detect.Noise

說明

這個檢測器會產生一個隨機信號:基於方法執行操作所產生的散列值的警告。這些警告都是僞隨機噪聲,它們是數據挖掘實驗中的一種有用的控制手段,並不是用來發現軟件中的實際缺陷。這個檢測器只是一個用於測試新檢測器的掛鉤。通常,這個檢測器不會處理任何事情。

報告模式

1.      NOISE_FIELD_REFERENCE  (NOISE, NOISE):  字段引用相關的假警告

2.      NOISE_METHOD_CALL  (NOISE, NOISE):  方法調用相關的假警告

3.      NOISE_OPERATION  (NOISE, NOISE):  運算相關的假警告

 

9.2 NoiseNullDeref

模式

NOISE

速度

缺陷類別

僞隨機噪聲

類型

edu.umd.cs.findbugs.detect.NoiseNullDeref

說明

用於空指針解引用的噪聲檢測器。主要作爲警告的有效性或預測能力實驗中的一種有用的控制手段,而不是用來發現代碼中的實際缺陷。

報告模式

1.      NOISE_NULL_DEREFERENCE  (NOISE, NOISE):  空指針解引用相關的假警告

 

10.  Experimental(實驗性)

10.1 FindUnsatisfiedObligation

模式

OBL

速度

缺陷類別

實驗性

類型

edu.umd.cs.findbugs.detect.FindUnsatisfiedObligation

說明

這個檢測器會找出在所有執行路徑中都沒有對使用的I/O流和數據庫資源進行清理的方法。這個檢測器的運行速度較慢。

報告模式

1.      OBL_UNSATISFIED_OBLIGATION  (OBL, EXPERIMENTAL):  方法可能未能成功清理流或資源

2.      OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE  (OBL, EXPERIMENTAL):  在處理異常時,方法可能未能成功清理流或資源

 

10.2 LostLoggerDueToWeakReference

模式

LG

速度

缺陷類別

實驗性

類型

edu.umd.cs.findbugs.detect.LostLoggerDueToWeakReference

說明

這個檢測器會找出在OpenJDK 1.6下行爲不同的代碼,OpenJDK使用弱引用來維持日誌記錄器。

報告模式

1.      LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE  (LG, EXPERIMENTAL):  OpenJDK中的弱引用具有導致日誌記錄器丟失的風險

 

10.3 TestASM

模式

TEST

速度

缺陷類別

實驗性

類型

edu.umd.cs.findbugs.detect.TestASM

說明

這個檢測器是一個代碼示例,示範如何使用ASM字節碼分析框架編寫一個FindBugs檢測器。

報告模式

1.      TESTING  (TEST, EXPERIMENTAL):  測試

 

10.4 TestingGround

模式

TEST

速度

缺陷類別

實驗性

類型

edu.umd.cs.findbugs.detect.TestingGround

說明

這個檢測器僅僅是一個用於測試新檢測器的鉤子。通常,這個檢測器不會做任何事情。

報告模式

1.      TESTING  (TEST, EXPERIMENTAL):  測試

 

10.5 TestingGround2

模式

TEST

速度

缺陷類別

實驗性

類型

edu.umd.cs.findbugs.detect.TestingGround2

說明

這個檢測器僅僅是一個用於測試新檢測器的鉤子。通常,這個檢測器不會做任何事情。

報告模式

1.      TESTING  (TEST, EXPERIMENTAL):  測試

 

11.  Security(安全性)

11.1 CrossSiteScripting

模式

HRS|PT|XSS

速度

缺陷類別

安全性

類型

edu.umd.cs.findbugs.detect.CrossSiteScripting

說明

這個檢測器會找出明顯的跨站點腳本漏洞。

報告模式

1.      HRS_REQUEST_PARAMETER_TO_COOKIE  (HRS, SECURITY):  HTTP的cookie形成於不受信任的輸入

2.      HRS_REQUEST_PARAMETER_TO_HTTP_HEADER  (HRS, SECURITY):  HTTP響應分割漏洞

3.      PT_ABSOLUTE_PATH_TRAVERSAL  (PT, SECURITY):  servlet中的絕對路徑遍歷

4.      PT_RELATIVE_PATH_TRAVERSAL  (PT, SECURITY):  servlet中的相對路徑遍歷

5.      XSS_REQUEST_PARAMETER_TO_JSP_WRITER  (XSS, SECURITY):  JSP反射跨站點腳本漏洞

6.      XSS_REQUEST_PARAMETER_TO_SEND_ERROR  (XSS, SECURITY):  錯誤頁面中的servlet反射跨站點腳本漏洞

7.      XSS_REQUEST_PARAMETER_TO_SERVLET_WRITER  (XSS, SECURITY):  servlet反射跨站點腳本漏洞

 

11.2 FindSqlInjection

模式

SQL

速度

缺陷類別

安全性

類型

edu.umd.cs.findbugs.detect.FindSqlInjection

說明

這個檢測器會通過數據流分析檢查執行SQL語句的方法調用,找出那些沒有使用常量字符串作爲實參的方法調用。

報告模式

1.      SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE  (SQL, SECURITY):  傳遞給SQL語句執行方法的參數是非常量字符串

2.      SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING  (SQL, SECURITY):  一條準備好的語句是由一個非常量字符串生成的

 

11.3 DumbMethodInvocations

模式

Dm|DMI

速度

缺陷類別

安全性

類型

edu.umd.cs.findbugs.detect.DumbMethodInvocations

說明

這個檢測器會找出傳遞給方法的錯誤參數(例如,substring(0))。

報告模式

1.      DMI_CONSTANT_DB_PASSWORD  (Dm, SECURITY):  數據庫密碼的硬編碼常量

2.      DMI_EMPTY_DB_PASSWORD  (Dm, SECURITY):  空的數據庫密碼

3.      DMI_HARDCODED_ABSOLUTE_FILENAME  (DMI, STYLE):  代碼含有指向一個絕對路徑名的硬編碼引用

4.      DMI_USELESS_SUBSTRING  (DMI, STYLE):  調用substring(0)方法會返回原始值

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章