FindBugs是一個靜態分析工具,在程序不需運行的狀況下,分析class文件,將字節碼與一組缺陷模式進行對比,試圖尋找真正的缺陷或者潛在的性能問題。本文檔主要詳細說明FindBugs 2.0.3版本中各項檢測器的做用,該版本共有156個缺陷檢測器,分爲11個類別。java
1. No Category(無類別)正則表達式
1.1 BuildInterproceduralCallGraph數據庫
模式數組 |
-安全 |
速度cookie |
快數據結構 |
缺陷類別多線程 |
-併發 |
類型app |
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)方法會返回原始值 |
原文:http://blog.csdn.net/yang1982_0907/article/details/18606171