详解FindBugs的各项检测器
轉自:http://blog.csdn.net/yang1982_0907/article/details/18606171
? ? ? ?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)方法會返回原始值 | ||||
總結
以上是生活随笔為你收集整理的详解FindBugs的各项检测器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一碗馄饨
- 下一篇: 态度和态度改变:影响思维和情绪