详解FindBugs的各项检测器 .

FindBugs是一个静态分析工具,在程序不需运行的情况下,分析class文件,将字节码与一组缺陷模式进行对比,试图寻找真正的缺陷或者潜在的性能问题。本文档主要详细说明FindBugs 2.0.3版本中各项检测器的作用,该版本共有156个缺陷检测器,分为11个类别。

1.       No Category(无类别)

1.1 BuildInterproceduralCallGraph


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.BuildInterproceduralCallGraph


说明


构建过程之间的调用图。


报告模式


 

1.2 BuildObligationPolicyDatabase


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.BuildObligationPolicyDatabase


说明


构建由FindUnsatisfiedObligation检测器使用的责任类型和方法的数据库。


报告模式


1.3 CalledMethods


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.CalledMethods


说明


构建在被分析类中调用的所有方法的数据库,供其他检测器使用。


报告模式


1.4 CheckCalls


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.CheckCalls


说明


这个检测器仅仅在FindBugs中调试方法调用解析时使用。不要启用这个检测器。


报告模式


1.5 ExplicitSerialization


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.ExplicitSerialization


说明


通过readObject方法和writeObject方法寻找显式的序列化操作,作为这个类确实已经序列化的证据。


报告模式


1.6 FieldItemSummary


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.FieldItemSummary


说明


这个检测器会产生被存储为字段的所有条目的汇总信息。


报告模式


1.7 FindBugsSummaryStats


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.FindBugsSummaryStats


说明


这个检测器仅仅收集分析过程相关的汇总统计信息。


报告模式


1.8 FunctionThatMightBeMistakenForProcedures


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.FunctionsThatMightBeMistakenForProcedures


说明


有些不可变类包含了返回这个类的新实例的方法,当调用这些类实例方法时,人们偶尔会认为这些方法会修改当前的类实例,这个检测器能够找到这样的不可变类。


报告模式


1.9 Methods


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.Methods


说明


构建在被分析类中定义的所有方法的数据库,供其他检测器使用。


报告模式


1.10 NoteAnnotationRetention


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.NoteAnnotationRetention


说明


记录注解保留策略。


报告模式


1.11 NoteCheckReturnValueAnnotations


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.NoteCheckReturnValueAnnotations


说明


寻找用于检查一个方法的返回值的注解。


报告模式


1.12 NoteDirectlyRelevantTypeQualifiers


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.NoteDirectlyRelevantTypeQualifiers


说明


记录与分析方法有关的类型修饰符。


报告模式


1.13 NoteJCIPAnnotation


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.NoteJCIPAnnotation


说明


记录net.jcip.annotations包中的注解。


报告模式


1.14 NoteNonNullAnnotations


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.NoteNonNullAnnotations


说明


检查方法、字段、参数是否具有@NonNull注解。当在一个应当只能使用非NULL值的上下文环境中使用了一个可能为NULL的值,那么FindNullDeref检测器会使用这些信息生成警告


报告模式


1.15 NoteNonNullReturnValues


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.NoteNonnullReturnValues


说明


分析应用程序中所有的方法,以便于确定哪个方法总是返回非NULL的值。


报告模式


1.16 NoteSuppressedWarnings


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.NoteSuppressedWarnings


说明


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


报告模式


1.17 ReflectiveClasses


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.ReflectiveClasses


说明


尝试确定哪些类具有指向它们自己的.class对象的常量引用。


报告模式


1.18 TestDataflowAnalysis


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.TestDataflowAnalysis


说明


这是一种内部检测器,只有在测试数据流分析时才会使用。默认情况下,请不要启用这个检测器。


报告模式


1.19 TrainFieldStoreTypes


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.TrainFieldStoreTypes


说明


TrainFieldStoreTypes检测器会分析存储在字段中的类型,并且会将它们存储在一个数据库中。这个数据库会在稍后的分析中用到,它能够使得分析更加精确。这个检测器的速度较慢。


报告模式


1.20 TrainLongInstantParams


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.TrainLongInstantfParams


说明


构建参数数据库,这些参数的长度为64位,用于描述从标准基准时间到现在的时间长度,单位为毫秒。


报告模式


1.21 TrainNonNullAnnotations


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.TrainNonNullAnnotations


说明


TrainNonNullAnnotations检测器可以收集@NonNull和@PossiblyNull注解,并且可以将它们存储在数据库文件中。这个检测器的速度较快。


报告模式


1.22 TrainUnconditionalDerefParams


模式


-


速度



缺陷类别


-


类型


edu.umd.cs.findbugs.detect.TrainUnconditionalDerefParams


说明


TrainUnconditionalParamDerefs检测器可以确定哪些方法可以无条件解引用参数,并且可以将它们存储在一个文件中。生成的文件可以在后续的检测中使用,它可以改善NULL解引用检测器的精确度。因为这只是一连串检测中的一个环节,所以不会报告任何警告。这个检测器的速度较慢。


报告模式


2.       Bad Practice(坏习惯)

2.1 BooleanReturnNull


模式


NP


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.BooleanReturnNull


说明


检查是否有返回类型为Boolean,但是却显式返回了NULL值的方法。


报告模式


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

2.2CheckImmutableAnnotation


模式


JCIP


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.CheckImmutableAnnotation


说明


检查被注解为net.jcip.annotations.Immutable或javax.annotation.concurrent.Immutable的类是否违反规则。


报告模式


1.      JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS  (JCIP, BAD_PRACTICE):  不可变类的字段应当是final的

2.3 CloneIdiom


模式


CN


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.CloneIdiom


说明


这个检测器会检查编写的可克隆类是否违反惯用语法。


报告模式


1.      CN_IDIOM  (CN, BAD_PRACTICE):  类实现了Cloneable接口,但是没有定义或使用clone方法

2.      CN_IDIOM_NO_SUPER_CALL  (CN, BAD_PRACTICE):  clone方法没有调用super.clone()方法

3.      CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE  (CN, BAD_PRACTICE):  类定义了clone()方法,但是没有实现Cloneable接口

2.4 ComparatorIdiom


模式


Se


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.ComparatorIdiom


说明


这个检测器会检查编写的实现Comparator接口的类是否违反惯用语法。


报告模式


1.      SE_COMPARATOR_SHOULD_BE_SERIALIZABLE  (Se, BAD_PRACTICE):  比较器类没有实现Serializable接口

2.5 DontCatchIllegalMonitorStateException


模式


IMSE


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.DontCatchIllegalMonitorStateException


说明


这个检测器会检查try-catch代码块是否捕捉IllegalMonitorStateException异常。


报告模式


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

2.6 DontUseEnum


模式


Nm


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.DontUseEnum


说明


检查字段和方法的名称是否是assert或enum,因为它们是Java 5的关键字。


报告模式


1.                  NM_FUTURE_KEYWORD_USED_AS_IDENTIFIER  (Nm, BAD_PRACTICE):  使用的标识符是Java后续版本中的一个关键字

2.                  NM_FUTURE_KEYWORD_USED_AS_MEMBER_IDENTIFIER  (Nm, BAD_PRACTICE):  使用的标识符是Java后续版本中的一个关键字

2.7 DroppedException


模式


DE


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.DroppedException


说明


这个检测器会找出代码中捕捉异常,但是却没有对异常进行任何处理的地方。


报告模式


1.      DE_MIGHT_DROP  (DE, BAD_PRACTICE):  方法可能遗漏异常处理

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

2.8 EmptyZipFileEntry


模式


AM


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.EmptyZipFileEntry


说明


这个检测器会检查是否创建了空白的zip文件项。这个检测器的运行速度中等。


报告模式


1.      AM_CREATES_EMPTY_JAR_FILE_ENTRY  (AM, BAD_PRACTICE):  创建的jar文件项为空

2.      AM_CREATES_EMPTY_ZIP_FILE_ENTRY  (AM, BAD_PRACTICE):  创建的zip文件项为空

2.9 EqualsOperandShouldHaveClassCompatibleWithThis


模式


Eq


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.EqualsOperandShouldHaveClassCompatibleWithThis


说明


检查equals方法,该方法的操作数是一个和定义这个equals方法的类不兼容的类的实例。


报告模式


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

2.10 FinalizerNullFields


模式


FI


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.FinalizerNullsFields


说明


这个检测器会找到将类的字段设置为NULL值的finalize()方法。无论如何,这个检测器都不会帮助到垃圾收集器,将字段设置为NULL值不会产生任何影响。


报告模式


1.      FI_FINALIZER_NULLS_FIELDS  (FI, BAD_PRACTICE):  finalize()方法将字段设置为NULL值

2.      FI_FINALIZER_ONLY_NULLS_FIELDS  (FI, BAD_PRACTICE):  finalize()方法仅将字段设置为NULL值

2.11 FindNonSerializableStoreIntoSession


模式


J2EE


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.FindNonSerializableStoreIntoSession


说明


这个检测器会检查是否将不可序列化的对象(没有实现Serializable接口的类实例)存储至HTTP会话中。


报告模式


1.      J2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_SESSION  (J2EE, BAD_PRACTICE):  将不可序列化对象存储至HttpSession

2.12 FindOpenStream


模式


ODR|OS


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.FindOpenStream


说明


这个检测器会找出退出方法时没有及时关闭的I/O流对象。这个检测器的运行速度较慢。


报告模式


1.      ODR_OPEN_DATABASE_RESOURCE  (ODR, BAD_PRACTICE):  方法未能成功关闭数据库资源

2.      ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH  (ODR, BAD_PRACTICE):  异常发生时,方法未能成功关闭数据库资源

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

4.      OS_OPEN_STREAM_EXCEPTION_PATH  (OS, BAD_PRACTICE):  异常发生时,方法未能成功关闭流

2.13 InheritanceUnsafeGetResource


模式


UI


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.InheritanceUnsafeGetResource


说明


检查this.getClass().getResource(...)方法的使用状况,如果当前类被另一个包中的类扩展时,调用这个方法可能会产生无法预料的结果。


报告模式


1.      UI_INHERITANCE_UNSAFE_GETRESOURCE  (UI, BAD_PRACTICE):  如果扩展这个类,那么使用getResource方法可能是不安全的

2.14 InstantiateStaticClass


模式


ISC


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.InstantiateStaticClass


说明


这个检测器会检查是否创建了静态类的对象,静态类就是只定义静态方法的类。


报告模式


1.      ISC_INSTANTIATE_STATIC_CLASS  (ISC, BAD_PRACTICE):  不需要实例化只提供静态方法的类

2.15 IteratorIdioms


模式


It


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.IteratorIdioms


说明


这个迭代器会检查是否正确定义Iterator类。


报告模式


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

2.16 ReadReturnShouldBeChecked


模式


RR


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.ReadReturnShouldBeChecked


说明


这个检测器会检查代码中忽略返回值的地方是否调用了InputStream.read()方法或InputStream.skip()方法。


报告模式


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

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

2.17 FindRefComparison


模式


DMI|EC|ES|RC


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.FindRefComparison


说明


这个检测器会找出代码中使用==或!=运算符比较两个引用值是否相等的地方,因为这种比较对象引用(例如java.lang.String的对象引用)的方式通常会产生错误。这个检测器的运行速度较慢。


报告模式


1.      DMI_DOH  (DMI, CORRECTNESS):  一个无意义的方法调用

2.      EC_ARRAY_AND_NONARRAY  (EC, CORRECTNESS):  使用equals()方法比较数组类型和非数组类型

3.      EC_BAD_ARRAY_COMPARE  (EC, CORRECTNESS):  对一个数组调用equals()方法,等价于使用==运算符

4.      EC_INCOMPATIBLE_ARRAY_COMPARE  (EC, CORRECTNESS):  使用equals(...)方法比较不兼容的数组

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

6.      EC_UNRELATED_CLASS_AND_INTERFACE  (EC, CORRECTNESS):  调用equals()方法比较不相关的类和接口

7.      EC_UNRELATED_INTERFACES  (EC, CORRECTNESS):  调用equals()方法比较不同的接口类型

8.      EC_UNRELATED_TYPES  (EC, CORRECTNESS):  调用equals()方法比较不同的类型

9.      EC_UNRELATED_TYPES_USING_POINTER_EQUALITY  (EC, CORRECTNESS):  使用指针等式比较不同的类型

10.  ES_COMPARING_PARAMETER_STRING_WITH_EQ  (ES, BAD_PRACTICE):  使用==或!=运算符比较String参数

11.  ES_COMPARING_STRINGS_WITH_EQ  (ES, BAD_PRACTICE):  使用==或!=运算符比较String对象

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

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

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

2.18 FindUnrelatedTypesInGenericContainer


模式


DMI|GC


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.FindUnrelatedTypesInGenericContainer


说明


当调用形参为java.lang.Object类型的范型集合方法时,这个检测器会检查使用的实参是否与集合形参相关。不要将不相关类型的实参放在集合中。例如,如果foo是List<String>类型的,bar是StringBuffer类型的,那么调用foo.contains(bar)方法只会返回false。这个检测器运行速度较快。


报告模式


1.      DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVES  (DMI, CORRECTNESS):  集合不应当包含它们

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

3.      DMI_VACUOUS_SELF_COLLECTION_CALL  (DMI, CORRECTNESS):  对集合的空调用

4.      GC_UNCHECKED_TYPE_IN_GENERIC_CALL  (GC, BAD_PRACTICE):  范型调用中的未选择类型

5.      GC_UNRELATED_TYPES  (GC, CORRECTNESS):  范型形参和方法实参之间没有关联

2.19 IncompatMask


模式


BIT


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.IncompatMask


说明


这个检测器会检查可疑的位逻辑运算表达式。


报告模式


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

2.      BIT_AND_ZZ  (BIT, CORRECTNESS):  检查代码中是否有表达式((...) & 0) == 0

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

4.      BIT_SIGNED_CHECK  (BIT, BAD_PRACTICE):  检查代码中是否有带符号的位运算

5.      BIT_SIGNED_CHECK_HIGH_BIT  (BIT, CORRECTNESS):  检查代码中是否有带符号的位运算

2.20 Naming


模式


Nm


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.Naming


说明


这个检测器会寻找代码中是否有可疑的方法命名。


报告模式


1.      NM_BAD_EQUAL  (Nm, CORRECTNESS):  类定义了equal(Object)方法,它应当是equals(Object)吗?

2.      NM_CLASS_NAMING_CONVENTION  (Nm, BAD_PRACTICE):  类名应当以大写字母开头

3.      NM_CLASS_NOT_EXCEPTION  (Nm, BAD_PRACTICE):  类没有派生于Exception类,虽然它的名字很像异常

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

5.      NM_FIELD_NAMING_CONVENTION  (Nm, BAD_PRACTICE):  字段名应当以小写字母开头

6.      NM_LCASE_HASHCODE  (Nm, CORRECTNESS):  类定义了hashcode()方法,它应当是hashcode()吗?

7.      NM_LCASE_TOSTRING  (Nm, CORRECTNESS):  类定义了toString()方法,它应当是toString()吗?

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

9.      NM_METHOD_NAMING_CONVENTION  (Nm, BAD_PRACTICE):  方法名应当以小写字母开头

10.  NM_SAME_SIMPLE_NAME_AS_INTERFACE  (Nm, BAD_PRACTICE):  类名不应当屏蔽已实现接口的简单名

11.  NM_SAME_SIMPLE_NAME_AS_SUPERCLASS  (Nm, BAD_PRACTICE):  类名不应当屏蔽父类的简单名

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

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

14.  NM_WRONG_PACKAGE  (Nm, CORRECTNESS):  由于错误的参数封装,方法没有覆盖父类中的方法

15.  NM_WRONG_PACKAGE_INTENTIONAL  (Nm, BAD_PRACTICE):  由于错误的参数封装,方法没有覆盖父类中的方法(但可能是有意的)

2.21 FindHEmismatch


模式


Co|Eq|HE


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.FindHEmismatch


说明


这个检测器会检查代码中的hashCode()和equals()方法的定义是否有问题。


报告模式


1.      CO_ABSTRACT_SELF  (Co, BAD_PRACTICE):  抽象类定义了共变的compareTo()方法

2.      CO_SELF_NO_OBJECT  (Co, BAD_PRACTICE):  定义了共变compareTo()方法

3.      EQ_ABSTRACT_SELF  (Eq, BAD_PRACTICE):  抽象类定义了共变的compareTo()方法

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

5.      EQ_DOESNT_OVERRIDE_EQUALS  (Eq, STYLE):  类没有覆盖父类中的equals方法

6.      EQ_DONT_DEFINE_EQUALS_FOR_ENUM  (Eq, CORRECTNESS):  为枚举类型定义了共变equals()方法

7.      EQ_OTHER_NO_OBJECT  (Eq, CORRECTNESS):  定义的equals()方法没有覆盖equals(Object)方法

8.      EQ_OTHER_USE_OBJECT  (Eq, CORRECTNESS):  定义的equals()方法没有覆盖Object.equals(Object)方法

9.      EQ_SELF_NO_OBJECT  (Eq, BAD_PRACTICE):  定义了共变equals()方法

10.  EQ_SELF_USE_OBJECT  (Eq, CORRECTNESS):  定义了共变equals()方法,继承于Object.equals(Object)方法

11.  HE_EQUALS_NO_HASHCODE  (HE, BAD_PRACTICE):  类定义了equals()方法,但是没有定义hashCode()方法

12.  HE_EQUALS_USE_HASHCODE  (HE, BAD_PRACTICE):  类定义了equals()方法,并且使用Object.hashCode()方法

13.  HE_HASHCODE_NO_EQUALS  (HE, BAD_PRACTICE):  类定义了hashCode()方法,但是没有定义equals()方法

14.  HE_HASHCODE_USE_OBJECT_EQUALS  (HE, BAD_PRACTICE):  类定义了hashCode()方法,并且使用Object.equals()方法

15.  HE_INHERITS_EQUALS_USE_HASHCODE  (HE, BAD_PRACTICE):  类继承了equals()方法,并且使用Object.hashCode()方法

16.  HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_CLASS  (HE, CORRECTNESS):  签名声明在哈希结构中使用不可哈希化的类

17.  HE_USE_OF_UNHASHABLE_CLASS  (HE, CORRECTNESS):  在一个哈希数据结构中使用没有hashCode()方法的类

2.22 FindNullDeref


模式


NP|RCN


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.FindNullDeref


说明


这个检测器会找出代码中可能发生空指针异常的地方。它还会找出对空引用值的多余的比较。这个检测器运行速度较慢。


报告模式


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

2.      NP_ALWAYS_NULL_EXCEPTION  (NP, CORRECTNESS):  方法中的异常路径上的空指针解引用

3.      NP_ARGUMENT_MIGHT_BE_NULL  (NP, CORRECTNESS):  方法没有检查NULL实参

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

5.      NP_CLOSING_NULL  (NP, CORRECTNESS):  调用一个总是NULL的值的close()方法

6.      NP_DEREFERENCE_OF_READLINE_VALUE  (NP, STYLE):  没有进行判空检查就对readLine()方法的结果解引用

7.      NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT  (NP, BAD_PRACTICE):  equals()方法没有检查NULL实参

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

9.      NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH  (NP, CORRECTNESS):  异常路径上的NULL值肯定会被解引用

10.  NP_NONNULL_PARAM_VIOLATION  (NP, CORRECTNESS):  调用方法时,将NULL传递给一个非NULL形参

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

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

13.  NP_NULL_ON_SOME_PATH_EXCEPTION  (NP, CORRECTNESS):  方法中的异常路径上的可能的空指针解引用

14.  NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE  (NP, STYLE):  由于被调用方法的返回值可能为空,所以可能会有空指针解引用

15.  NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE  (NP, STYLE):  可能是不可达分支路径上的可能的空指针解引用

16.  NP_NULL_PARAM_DEREF  (NP, CORRECTNESS):  调用方法时,将NULL传递给一个非NULL形参

17.  NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS  (NP, CORRECTNESS):  调用方法时,将NULL传递给一个非NULL形参

18.  NP_NULL_PARAM_DEREF_NONVIRTUAL  (NP, CORRECTNESS):  调用非虚方法时,将NULL传递给一个非NULL形参

19.  NP_STORE_INTO_NONNULL_FIELD  (NP, CORRECTNESS):  将NULL值存储在被声明为@NonNull的字段中

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

21.  RCN_REDUNDANT_COMPARISON_OF_NULL_AND_NONNULL_VALUE  (RCN, STYLE):  非NULL值和NULL值之间的多余比较

22.  RCN_REDUNDANT_COMPARISON_TWO_NULL_VALUES  (RCN, STYLE):  两个NULL值之间的多余比较

23.  RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE  (RCN, STYLE):  对已知非NULL的值进行多余的判空检查

24.  RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE  (RCN, STYLE):  对已知NULL的值进行多余的判空检查

25.  RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE  (RCN, CORRECTNESS):  对前面已经解引用的值进行多余的判空检查

2.23 FormatStringChecker


模式


FS|USELESS_STRING


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.FormatStringChecker


说明


检查不正确的格式化字符串。


报告模式


1.      VA_FORMAT_STRING_BAD_ARGUMENT  (FS, CORRECTNESS):  格式化字符串的占位符与传递的实参不兼容

2.      VA_FORMAT_STRING_BAD_CONVERSION  (FS, CORRECTNESS):  提供实参的类型与格式指定符不匹配

3.      VA_FORMAT_STRING_BAD_CONVERSION_FROM_ARRAY  (USELESS_STRING, CORRECTNESS):  使用格式化字符串无效地格式化数组

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

5.      VA_FORMAT_STRING_EXPECTED_MESSAGE_FORMAT_SUPPLIED  (FS, CORRECTNESS):  在可预料的风格格式之处提供消息格式

6.      VA_FORMAT_STRING_EXTRA_ARGUMENTS_PASSED  (FS, CORRECTNESS):  传递的实参个数多于在格式化字符串中实际使用的个数

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

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

9.      VA_FORMAT_STRING_NO_PREVIOUS_ARGUMENT  (FS, CORRECTNESS):  没有前面的格式化字符串参数

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

2.24 MethodReturnCheck


模式


RV


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.MethodReturnCheck


说明


这个检测器会找出代码中调用带有返回值的方法,但是可疑地忽略掉方法返回值的地方。


报告模式


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

2.      RV_EXCEPTION_NOT_THROWN  (RV, CORRECTNESS):  创建并丢弃异常,而不是抛出异常

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

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

5.      RV_RETURN_VALUE_IGNORED_INFERRED  (RV, STYLE):  方法忽略返回值,这样可以么?

2.25 OverridingEqualsNotSymmetrical


模式


Eq


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.OverridingEqualsNotSymmetrical


说明


检查代码中覆盖一个父类equals方法的equals方法,找出其中等值关系可能不是对称的。


报告模式


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

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

3.      EQ_COMPARING_CLASS_NAMES  (Eq, CORRECTNESS):  equals方法比较类的名称,而不是类的对象

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

5.      EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC  (Eq, CORRECTNESS):  equals方法覆盖父类的equals方法,可能不是对称的

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

2.26 DumbMethods


模式


BC|BIT|Dm|DMI|Bx|

INT|NP|

RV|SW


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.DumbMethods


说明


这个检测器会找到代码中调用无意义方法的地方,例如调用无参数的String构造器。


报告模式


1.      BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS  (BC, BAD_PRACTICE):  equals方法不应当假定它的参数类型

2.      BIT_ADD_OF_SIGNED_BYTE  (BIT, CORRECTNESS):  对有符号的字节值进行按位加的运算

3.      BIT_IOR_OF_SIGNED_BYTE  (BIT, CORRECTNESS):  对有符号的字节值进行按位或的运算

4.      DMI_ANNOTATION_IS_NOT_VISIBLE_TO_REFLECTION  (Dm, CORRECTNESS):  没有使用运行时保留时,不能使用反射机制检查注解是否存在

5.      DMI_ARGUMENTS_WRONG_ORDER  (DMI, CORRECTNESS):  反向方法参数

6.      DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE  (DMI, CORRECTNESS):  使用没有精确表示的double值构建BigDecimal对象

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

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

9.      DMI_DOH  (DMI, CORRECTNESS):  一个无意义的方法调用

10.  DMI_FUTILE_ATTEMPT_TO_CHANGE_MAXPOOL_SIZE_OF_SCHEDULED_THREAD_POOL_EXECUTOR  (Dm, CORRECTNESS):  尝试修改ScheduledThreadPoolExecutor池的最大尺寸是无效的

11.  DMI_LONG_BITS_TO_DOUBLE_INVOKED_ON_INT  (DMI, CORRECTNESS):  对一个int值调用Double.longBitsToDouble方法

12.  DMI_RANDOM_USED_ONLY_ONCE  (DMI, BAD_PRACTICE):  创建Random对象,并且只使用一次

13.  DMI_SCHEDULED_THREAD_POOL_EXECUTOR_WITH_ZERO_CORE_THREADS  (Dm, CORRECTNESS):  创建没有核心线程的ScheduledThreadPoolExecutor

14.  DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED  (Dm, STYLE):  预期传入Runnable的地方却传入Thread

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

16.  DM_BOOLEAN_CTOR  (Dm, PERFORMANCE):  方法调用低效的Boolean构造器,应当使用Boolean.valueOf(...)方法替代

17.  DM_BOXED_PRIMITIVE_FOR_PARSING  (Bx, PERFORMANCE):  使用封装/反封装来解析一个基本类型

18.  DM_BOXED_PRIMITIVE_TOSTRING  (Bx, PERFORMANCE):  方法仅仅为了调用toString方法而分配一个已封装基本类型

19.  DM_CONVERT_CASE  (Dm, I18N):  考虑使用调用方法参数化版本的Locale

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

21.  DM_GC  (Dm, PERFORMANCE):  显式的垃圾收集:极度可疑的代码,除非是性能测试代码

22.  DM_MONITOR_WAIT_ON_CONDITION  (Dm, MT_CORRECTNESS):  监控按条件调用的wait()方法

23.  DM_NEW_FOR_GETCLASS  (Dm, PERFORMANCE):  方法分配一个对象,仅仅为了获得类对象

24.  DM_NEXTINT_VIA_NEXTDOUBLE  (Dm, PERFORMANCE):  为了生成一个随机整数,调用Random对象的nextInt方法,而不是nextDouble方法

25.  DM_RUN_FINALIZERS_ON_EXIT  (Dm, BAD_PRACTICE):  方法调用危险的runFinalizersOnExit方法

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

27.  DM_STRING_TOSTRING  (Dm, PERFORMANCE):  方法对一个String对象调用toString()方法

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

29.  DM_USELESS_THREAD  (Dm, MT_CORRECTNESS):  使用默认为空的run方法创建一个线程

30.  INT_BAD_COMPARISON_WITH_INT_VALUE  (INT, CORRECTNESS):  比较int值和long常量的错误比较方法

31.  INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE  (INT, CORRECTNESS):  比较非负值和负值常量的错误比较方法

32.  INT_BAD_COMPARISON_WITH_SIGNED_BYTE  (INT, CORRECTNESS):  带符号字节值的错误比较方法

33.  INT_BAD_REM_BY_1  (INT, STYLE):  整数余数模1

34.  INT_VACUOUS_BIT_OPERATION  (INT, STYLE):  对整数值进行空的位掩码运算

35.  INT_VACUOUS_COMPARISON  (INT, STYLE):  对整数值进行空的比较运算

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

37.  RV_01_TO_INT  (RV, CORRECTNESS):  0和1之间的随机值被强制转换为整数0

38.  RV_ABSOLUTE_VALUE_OF_HASHCODE  (RV, CORRECTNESS):  计算带符号32位散列码绝对值的错误尝试

39.  RV_ABSOLUTE_VALUE_OF_RANDOM_INT  (RV, CORRECTNESS):  计算带符号随机整数绝对值的错误尝试

40.  RV_REM_OF_HASHCODE  (RV, STYLE):  散列码的余数可能是负数

41.  RV_REM_OF_RANDOM_INT  (RV, STYLE):  32位带符号随机整数的余数

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

2.27 SerializableIdiom


模式


RS|Se|SnVI|WS


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.SerializableIdiom


说明


这个检测器会检查Serializable类实现中的潜在问题。


报告模式


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

2.      SE_BAD_FIELD  (Se, BAD_PRACTICE):  可序列化类中的非暂态不可序列化的实例字段

3.      SE_BAD_FIELD_INNER_CLASS  (Se, BAD_PRACTICE):  不可序列化的类有一个可序列化的内部类

4.      SE_BAD_FIELD_STORE  (Se, BAD_PRACTICE):  不可序列化的值存储在一个可序列化类的实例字段中

5.      SE_INNER_CLASS  (Se, BAD_PRACTICE):  可序列化的内部类

6.      SE_METHOD_MUST_BE_PRIVATE  (Se, CORRECTNESS):  为了能够成功序列化,方法必须是私有的

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

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

9.      SE_NONSTATIC_SERIALVERSIONID  (Se, BAD_PRACTICE):  serialVersionUID不是静态的

10.  SE_NO_SERIALVERSIONID  (SnVI, BAD_PRACTICE):  类实现了Serializable接口,但是没有定义serialVersionUID

11.  SE_NO_SUITABLE_CONSTRUCTOR  (Se, BAD_PRACTICE):  类实现了Serializable接口,但是它的父类没有定义一个空构造器

12.  SE_NO_SUITABLE_CONSTRUCTOR_FOR_EXTERNALIZATION  (Se, BAD_PRACTICE):  类实现了Externalizable接口,但是没有定义一个空构造器

13.  SE_PRIVATE_READ_RESOLVE_NOT_INHERITED  (Se, STYLE):  私有的readResolve方法不会被子类继承

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

15.  SE_READ_RESOLVE_MUST_RETURN_OBJECT  (Se, BAD_PRACTICE):  readResolve方法必须声明为返回Object类型

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

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

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

2.28 FindPuzzlers


模式


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


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.FindPuzzlers


说明


这个检测器会检查Joshua Bloch和Neal Gafter在他们的著作《Programming Puzzlers》中提到的各种小错误。


报告模式


1.      BX_BOXING_IMMEDIATELY_UNBOXED  (Bx, PERFORMANCE):  封装基本类型的值,然后又立即反封装

2.      BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERCION  (Bx, PERFORMANCE):  封装了基本类型的值,然后为了进行基本类型的强制转换,又再次反封装

3.      BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR  (Bx, CORRECTNESS):  反封装基本类型的值,然后强制用于三元运算符

4.      BX_UNBOXING_IMMEDIATELY_REBOXED  (Bx, PERFORMANCE):  反封装已经封装的值,然后又立即重新封装

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

6.      DLS_DEAD_LOCAL_STORE_IN_RETURN  (DLS, STYLE):  返回语句中的无效赋值操作

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

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

9.      DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS  (DMI, BAD_PRACTICE):  由于重用Entry对象,向一个Entry集合添加元素可能会失败

10.  DMI_INVOKING_HASHCODE_ON_ARRAY  (DMI, CORRECTNESS):  对一个数组调用hashCode方法

11.  DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY  (USELESS_STRING, CORRECTNESS):  对一个未命名数组调用toString方法

12.  DMI_INVOKING_TOSTRING_ON_ARRAY  (USELESS_STRING, CORRECTNESS):  对一个数组调用toString方法

13.  EC_BAD_ARRAY_COMPARE  (EC, CORRECTNESS):  对一个数组调用equals()方法等价于使用==运算符

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

15.  ICAST_INTEGER_MULTIPLY_CAST_TO_LONG  (ICAST, STYLE):  将整数乘法运算的结果转换为long型

16.  ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT  (BSHIFT, STYLE):  将无符号右移运算的结果转换为short/byte型

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

18.  IJU_ASSERT_METHOD_INVOKED_FROM_RUN_METHOD  (IJU, CORRECTNESS):  run方法中的JUnit断言将不会被JUnit注意到

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

20.  IM_BAD_CHECK_FOR_ODD  (IM, STYLE):  不能对负数进行奇偶判断

21.  IM_MULTIPLYING_RESULT_OF_IREM  (IM, CORRECTNESS):  一个整数和一次整数取余运算的结果相乘

22.  PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS  (PZ, BAD_PRACTICE):  没有在迭代器中重用条目对象

23.  RV_NEGATING_RESULT_OF_COMPARETO  (RV, BAD_PRACTICE):  对compareTo()/compare()方法的结果进行取反运算

2.29 FindUseOfNonSerializableValue


模式


DMI|J2EE


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.FindUseOfNonSerializableValue


说明


这个检测器会检查在需要使用可序列化对象的上下文中是否使用了不可序列化的对象。


报告模式


1.      DMI_NONSERIALIZABLE_OBJECT_WRITTEN  (DMI, STYLE):  将不可序列化对象写入ObjectOutput

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

2.30 InitializationChain


模式


IC|SI


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.InitializationChain


说明


这个检测器会找出潜在的环状类初始化依赖关系。


报告模式


1.      IC_INIT_CIRCULARITY  (IC, STYLE):  环状初始化

2.      SI_INSTANCE_BEFORE_FINALS_ASSIGNED  (SI, BAD_PRACTICE):  静态初始化程序在所有static final字段被赋值之前创建实例

2.31 NoteUnconditionalParamDerefs


模式


NP


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.NoteUnconditionalParamDerefs


说明


分析应用程序中的所有方法,以便于确定哪些解引用参数是无条件的。这些信息会在稍后的分析中用到,用来找出代码中调用方法,但可能将空值传给这些方法的地方。这个检测器的运行速度较慢。


报告模式


1.      NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT  (NP, BAD_PRACTICE):  equals()方法没有检查参数是否为null

2.      NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE  (NP, STYLE):  参数不能为空值,但是却标记为可为空值

2.32 FindFinalizeInvocations


模式


FI


速度



缺陷类别


坏习惯


类型


edu.umd.cs.findbugs.detect.FindFinalizeInvocations


说明


这个检测器会找到代码中调用finalize()的地方,以及其他和finalize()方法相关的问题。


报告模式


1.      FI_EMPTY  (FI, BAD_PRACTICE):  应当删除空的finalize()方法

2.      FI_EXPLICIT_INVOCATION  (FI, BAD_PRACTICE):  显式调用finalize()方法

3.      FI_MISSING_SUPER_CALL  (FI, BAD_PRACTICE):  finalize()方法没有调用父类的finalize()方法

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

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

6.      FI_USELESS  (FI, BAD_PRACTICE):  除了调用父类的finalize()之外,finalize()方法什么都没做

3.       Correctness(正确性)

3.1 AppendingToAnObjectOutputStream


模式


IO


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.AppendingToAnObjectOutputStream


说明


找出代码中试图向一个对象输出流添加信息的地方。


报告模式


1.      IO_APPENDING_TO_OBJECT_OUTPUT_STREAM  (IO, CORRECTNESS):  试图向一个对象输出流添加信息

3.2 BadAppletConstructor


模式


BAC


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.BadAppletConstructor


说明


某些applet的构造器会调用父类applet中的方法,而父类applet可能依赖于applet存根,这个检测器会找出这些applet构造器。因为这个存根直到调用init()方法时才会初始化,所以构造器中调用的这些方法将会失败。


报告模式


1.      BAC_BAD_APPLET_CONSTRUCTOR  (BAC, CORRECTNESS):  依赖于未初始化AppletStub的错误applet构造器

3.3 BadResultSetAccess


模式


SQL


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.BadResultSetAccess


说明


这个检测器会检查一个结果集的getXXX或setXXX方法,找出字段索引值为0的上述方法调用。因为ResultSet字段的起始索引为1,所以前述的方法调用总是错误的。


报告模式


1.      SQL_BAD_PREPARED_STATEMENT_ACCESS  (SQL, CORRECTNESS):  方法试图通过0索引访问一个预处理语句参数

2.      SQL_BAD_RESULTSET_ACCESS  (SQL, CORRECTNESS):  方法试图通过0索引访问一个结果集字段

3.4 BadSyntaxForRegularExpression


模式


RE


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.BadSyntaxForRegularExpression


说明


这个检测器会找出含有无效语法的正则表达式。


报告模式


1.      RE_BAD_SYNTAX_FOR_REGULAR_EXPRESSION  (RE, CORRECTNESS):  正则表达式使用无效语法

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

3.      RE_POSSIBLE_UNINTENDED_PATTERN  (RE, CORRECTNESS):  正则表达式使用“.”或“|”符号

3.5 BadlyOverriddenAdapter


模式


BOA


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.BadlyOverriddenAdapter


说明


某些类会扩展Adapter类,并且会使用错误的签名覆盖一个Listener方法,这个检测器会找出这些类的代码。


报告模式


1.      BOA_BADLY_OVERRIDDEN_ADAPTER  (BOA, CORRECTNESS):  类错误地覆盖父类Adapter中实现的一个方法

3.6 CheckExpectedWarnings


模式


FB


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.CheckExpectedWarnings


说明


检查@ExpectedWarning和@NoWarning注解。这个检测器仅仅用于测试FindBugs。


报告模式


1.      FB_MISSING_EXPECTED_WARNING  (FB, CORRECTNESS):  FindBugs没有发出预期的或期望的警告

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

3.7 FindFloatMath


模式


FL


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.FindFloatMath


说明


这个检测器会找出代码中使用浮点运算的地方。这个检测器的运行速度中等。


报告模式


1.      FL_MATH_USING_FLOAT_PRECISION  (FL, CORRECTNESS):  方法执行具有浮点精度的运算

3.8 FindMaskedFields


模式


MF


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.FindMaskedFields


说明


这个检测器会检查类的属性字段是否被方法中定义的局部变量遮蔽。


报告模式


1.      MF_CLASS_MASKS_FIELD  (MF, CORRECTNESS):  类定义的字段遮蔽了一个父类的字段

2.      MF_METHOD_MASKS_FIELD  (MF, CORRECTNESS):  方法定义一个隐藏类字段的局部变量

3.9 FindNullDerefsInvolvlingNonShortCircuitEvaluation


模式


NP


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.FindNullDerefsInvolvingNonShortCircuitEvaluation


说明


这个检测器会找到代码中可能发生空指针异常的地方,使用非短路求值会导致不能成功使用常用技巧。


报告模式


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

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

3.10 FindSelfComparison2


模式


SA


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.FindSelfComparison2


说明


这个检测器会找出代码中一个值和它自己进行比较的地方。


报告模式


1.      SA_FIELD_SELF_COMPARISON  (SA, CORRECTNESS):  字段与它自己比较

2.      SA_FIELD_SELF_COMPUTATION  (SA, CORRECTNESS):  对一个字段进行无意义的自我计算(例如x & x)

3.      SA_LOCAL_SELF_COMPARISON  (SA, CORRECTNESS):  局部变量与它自己比较

4.      SA_LOCAL_SELF_COMPUTATION  (SA, CORRECTNESS):  对一个局部变量进行无意义的自我计算(例如x & x)

3.11 FindUninitializedGet


模式


UR


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.FindUninitializedGet


说明


这个检测器会检查构造器中是否读取未初始化的字段。


报告模式


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

3.12 InfiniteLoop


模式


IL


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.InfiniteLoop


说明


检查代码中是否有无限循环


报告模式


1.      IL_INFINITE_LOOP  (IL, CORRECTNESS):  一个明显的无限循环

3.13 InfiniteRecursiveLoop


模式


IL


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.InfiniteRecursiveLoop


说明


检查代码中是否有无限的递归循环。


报告模式


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

2.      IL_INFINITE_RECURSIVE_LOOP  (IL, CORRECTNESS):  一个明显的无限递归循环

3.14 InitializeNonnullFieldsInConstructor


模式


NP


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.InitializeNonnullFieldsInConstructor


说明


找到没有在构造器中写入的非空字段。


报告模式


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

3.15 IntCast2LongAsInstant


模式


ICAST


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.IntCast2LongAsInstant


说明


找出代码中使用32位值描述从标准基准时间到现在的时间长度(以毫秒为单位)的地方。


报告模式


1.      ICAST_INT_2_LONG_AS_INSTANT  (ICAST, CORRECTNESS):  将int型值转换为long型,用于表示绝对时间

3.16 InvalidJUnitTest


模式


IJU


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.InvalidJUnitTest


说明


这个检测器会找出有缺陷的JUnit测试代码。


报告模式


1.      IJU_BAD_SUITE_METHOD  (IJU, CORRECTNESS):  TestCase声明一个错误的suite方法

2.      IJU_NO_TESTS  (IJU, CORRECTNESS):  TestCase中没有测试

3.      IJU_SETUP_NO_SUPER  (IJU, CORRECTNESS):  TestCase定义的setUp方法没有调用super.setUp()方法

4.      IJU_SUITE_NOT_STATIC  (IJU, CORRECTNESS):  TestCase实现一个非静态suite方法

5.      IJU_TEARDOWN_NO_SUPER  (IJU, CORRECTNESS):  TestCase定义的tearDown方法没有调用super.tearDown()方法

3.17 QuestionableBooleanAssignment


模式


QBA


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.QuestionableBooleanAssignment


说明


这个检测器会找出代码中将布尔字面值简单的赋值给变量的条件表达式。


报告模式


1.      QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT  (QBA, CORRECTNESS):  方法在布尔表达式中赋值布尔字面值

3.18 ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass


模式


UR


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass


说明


检查父类构造器中调用的方法是否正确。


报告模式


1.      UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR  (UR, CORRECTNESS):  父类构造器调用未初始化的字段读取方法

3.19 RepeatedConditionals


模式


RpC


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.RepeatedConditionals


说明


这个检测器会找出代码中包含重复条件测试的地方,例如(x == 5 || x == 5)。


报告模式


1.      RpC_REPEATED_CONDITIONAL_TEST  (RpC, CORRECTNESS):  重复条件测试

3.20 ResolveAllReferencece


模式


VR


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.ResolveAllReferences


说明


检查代码中所有的引用调用是否已解析。


报告模式


1.      VR_UNRESOLVABLE_REFERENCE  (VR, CORRECTNESS):  类引用未能识别的类或方法

3.21 SuperfluousInstanceOf


模式


SIO


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.SuperfluousInstanceOf


说明


这个检测器会找出代码中本该静态确定类型,但却使用instanceof运算符进行类型检查的地方。


报告模式


1.      SIO_SUPERFLUOUS_INSTANCEOF  (SIO, CORRECTNESS):  使用instanceof运算符进行不必要的类型检查

3.22 SuspiciousThreadInterrupted


模式


STI


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.SuspiciousThreadInterrupted


说明


这个检测器会找出从一个非静态上下文中调用的Thread.interrupted()方法。如果调用的是Thread.currentThread().interrupted()方法,那么这会是一次无效的操作,只要使用Thread.interrupted()即可。然而,如果是对一个任意的线程对象调用这个方法,那么非常有可能发生错误,因为总是对当前线程调用interrupted()方法。


报告模式


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

2.      STI_INTERRUPTED_ON_UNKNOWNTHREAD  (STI, CORRECTNESS):  对线程实例调用静态的Thread.interrupted()方法

3.23 UncallableMethodOfAnonymousClass


模式


UMAC


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.UncallableMethodOfAnonymousClass


说明


这个检测器会检查具有方法定义的匿名内部类,找出那些包含想要覆盖但又没有覆盖父类方法的方法的匿名内部类。


报告模式


1.      UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS  (UMAC, CORRECTNESS):  匿名类含有无法调用的方法定义

3.24 VarArgsProblems


模式


VA


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.VarArgsProblems


说明


找出由Java 1.5的可变参数引起的问题。


报告模式


1.      VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG  (VA, CORRECTNESS):  将基本类型数组传递给预期接收可变数量对象实参的方法

3.25 CheckTypeQualifiers


模式


TQ


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.CheckTypeQualifiers


说明


检查变量是否违反由JSR-305类型的修饰符注解所指定的属性。


报告模式


1.      TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED  (TQ, CORRECTNESS):  变量在不能带有一个类型修饰符的地方却带有这个类型修饰符

2.      TQ_COMPARING_VALUES_WITH_INCOMPATIBLE_TYPE_QUALIFIERS  (TQ, CORRECTNESS):  比较不兼容的类型修饰符所修饰的变量

3.      TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALWAYS_SINK  (TQ, STYLE):  将需要带有类型修饰符的变量标记为未知

4.      TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEVER_SINK  (TQ, STYLE):  将不需要带有类型修饰符的变量标记为未知

5.      TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK  (TQ, CORRECTNESS):  变量可能不带有一个类型修饰符,但使用时却总是需要它带有这个类型修饰符

6.      TQ_MAYBE_SOURCE_VALUE_REACHES_NEVER_SINK  (TQ, CORRECTNESS):  变量可能带有一个类型修饰符,但使用时却禁止它带有这个类型修饰符

7.      TQ_NEVER_VALUE_USED_WHERE_ALWAYS_REQUIRED  (TQ, CORRECTNESS):  在需要变量带有一个类型修饰符的地方,却将这个变量注解为从不带有这个类型修饰符

8.      TQ_UNKNOWN_VALUE_USED_WHERE_ALWAYS_STRICTLY_REQUIRED  (TQ, CORRECTNESS):  变量在需要带有类型修饰符的地方却没有带有这个类型修饰符

3.26 FindBadCast2


模式


BC|NP


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.FindBadCast2


说明


这个检测器会通过数据流分析找出错误的对象引用转换。


报告模式


1.      BC_BAD_CAST_TO_ABSTRACT_COLLECTION  (BC, STYLE):  可疑的抽象集合类型转换

2.      BC_BAD_CAST_TO_CONCRETE_COLLECTION  (BC, STYLE):  可疑的实体集合类型转换

3.      BC_IMPOSSIBLE_CAST  (BC, CORRECTNESS):  不可能的转换

4.      BC_IMPOSSIBLE_DOWNCAST  (BC, CORRECTNESS):  不可能的向下转换

5.      BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY  (BC, CORRECTNESS):  不可能的toArray()结果向下转换

6.      BC_IMPOSSIBLE_INSTANCEOF  (BC, CORRECTNESS):  instanceof总是会返回false

7.      BC_UNCONFIRMED_CAST  (BC, STYLE):  未检查/未确认的类型转换

8.      BC_UNCONFIRMED_CAST_OF_RETURN_VALUE  (BC, STYLE):  未检查/未确认的方法返回值类型转换

9.      BC_VACUOUS_INSTANCEOF  (BC, STYLE):  instanceof总是会返回true

10.  NP_NULL_INSTANCEOF  (NP, CORRECTNESS):  检查一个已知的空值是哪种类型的实例

3.27 FindDeadLocalStores


模式


DLS|IP


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.FindDeadLocalStores


说明


这个检测器会找出赋值之后从来没有使用过的局部向量。这个检测器的运行速度中等。


报告模式


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

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

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

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

5.      DLS_DEAD_STORE_OF_CLASS_LITERAL  (DLS, CORRECTNESS):  死存储类常量

6.      IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN  (IP, CORRECTNESS):  没有读取传入方法的参数,但是覆写了这个参数

3.28 FindFiledSelfAssignment


模式


SA


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.FindFieldSelfAssignment


说明


这个检测器会找出代码中通过读取一个字段的值来为同一个字段赋值的地方。


报告模式


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

2.      SA_LOCAL_DOUBLE_ASSIGNMENT  (SA, STYLE):  双重赋值的局部变量

3.29 FindFloatEquality


模式


FE


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.FindFloatEquality


说明


找出代码中的浮点数判等表达式。这个检测器的运行速度较快。


报告模式


1.      FE_FLOATING_POINT_EQUALITY  (FE, STYLE):  浮点数的相等性测试

2.      FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER  (FE, CORRECTNESS):  注定失败的NaN相等性测试

3.30 FindLocalSelfAssignment2


模式


SA


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.FindLocalSelfAssignment2


说明


这个检测器会找出代码中自我赋值的局部变量。


报告模式


1.      SA_LOCAL_SELF_ASSIGNMENT  (SA, STYLE):  局部变量自我赋值

2.      SA_LOCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD  (SA, CORRECTNESS):  局部变量自我赋值,而不是赋值给字段

3.31 FindSelfComparison


模式


SA


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.FindSelfComparison


说明


这个检测器会找出代码中取值进行自我比较的地方。


报告模式


1.      SA_FIELD_DOUBLE_ASSIGNMENT  (SA, STYLE):  字段双重赋值

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

3.      SA_FIELD_SELF_COMPUTATION  (SA, CORRECTNESS):  字段无意义的自我计算(例如x & x)

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

5.      SA_LOCAL_SELF_COMPUTATION  (SA, CORRECTNESS):  变量无意义的自我计算(例如x & x)

3.32 IDivResultCastToDouble


模式


ICAST


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.IdivResultCastToDouble


说明


这个检测器会找出代码中将整数除法的结果转换为double型的地方。通常,有意义的操作应当是将int型操作数转换为double型,然后再执行除法运算。


报告模式


1.      ICAST_IDIV_CAST_TO_DOUBLE  (ICAST, STYLE):  将整数除法的结果转换为double或float型

2.      ICAST_INT_CAST_TO_DOUBLE_PASSED_TO_CEIL  (ICAST, CORRECTNESS):  将整数值转换为double类型,然后传给Math.ceil方法

3.      ICAST_INT_CAST_TO_FLOAT_PASSED_TO_ROUND  (ICAST, CORRECTNESS):  将int型值转换为float型,然后传给Math.round方法

3.33 witchFallThrough


模式


SF


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.SwitchFallthrough


说明


这个检测器会找出存在跨越分支问题的switch语句。


报告模式


1.      SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH  (SF, CORRECTNESS):  由于switch语句跨越分支引起的死存储

2.      SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH_TO_THROW  (SF, CORRECTNESS):  由于switch语句跨越分支抛出异常引起的死存储

3.      SF_SWITCH_FALLTHROUGH  (SF, STYLE):  发现switch语句中的一个case分支跨越到下一个case分支中

4.      SF_SWITCH_NO_DEFAULT  (SF, STYLE):  发现switch语句缺少默认的case分支

3.34 UnreadFields


模式


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


速度



缺陷类别


正确性


类型


edu.umd.cs.findbugs.detect.UnreadFields


说明


这个检测器会找出代码中从未被读取过值的字段。


报告模式


1.      NP_UNWRITTEN_FIELD  (NP, CORRECTNESS):  读取没有写入过的字段

2.      NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD  (NP, STYLE):  读取没有写入过的public或protected字段

3.      SIC_INNER_SHOULD_BE_STATIC  (SIC, PERFORMANCE):  应当是一个静态内部类

4.      SIC_INNER_SHOULD_BE_STATIC_ANON  (SIC, PERFORMANCE):  可以重构为一个具名静态内部类

5.      SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS  (SIC, PERFORMANCE):  可以重构为一个静态内部类

6.      SIC_THREADLOCAL_DEADLY_EMBRACE  (SIC, CORRECTNESS):  非静态内部类和本地线程产生死锁

7.      SS_SHOULD_BE_STATIC  (SS, PERFORMANCE):  未读字段:这个字段应当是静态的吗?

8.      ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD  (ST, STYLE):  在实例方法中写入静态字段

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

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

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

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

13.  UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR  (UwF, STYLE):  在构造器中没有初始化字段,稍后也没有进行判空操作就解引用这个字段

14.  UWF_NULL_FIELD  (UwF, CORRECTNESS):  字段一直被设为空

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

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

4.       Dodgy Code(危险代码)

4.1 BadUseOfReturnValue


模式


RV


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.BadUseOfReturnValue


说明


找出代码中在确定函数的返回值为非空之后,就直接将其丢弃不使用的地方。


报告模式


1.      RV_CHECK_FOR_POSITIVE_INDEXOF  (RV, STYLE):  方法检查String.indexOf方法的结果是否是正数

2.      RV_DONT_JUST_NULL_CHECK_READLINE  (RV, STYLE):  方法检查readLine的结果是非空值之后,直接丢弃这个结果

4.2 CallToUnsupportedMethod


模式


Dm


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.CallToUnsupportedMethod


说明


这个检测器会找出代码中调用不支持方法的地方。


报告模式


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

4.3 CheckRelaxingNullnessAnnotation


模式


NP


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.CheckRelaxingNullnessAnnotation


说明


检查覆盖方法是否对返回值放宽@Nonnull的限制或者对参数放宽@CheckForNull的限制。


报告模式


1.      NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION  (NP, STYLE):  方法对参数收紧空值性注解

2.      NP_METHOD_RETURN_RELAXING_ANNOTATION  (NP, STYLE):  方法对返回值放宽空值性注解

4.4 ConfusedInheritance


模式


CI


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.ConfusedInheritance


说明


这个检测器会找出声明了受保护(protected)成员的final类。因为final类是不能被继承的,所以对其成员使用受保护访问是不正确的。应当将访问方法修改为公开的(public)或私有的(private),以此表示这个字段的正确含义。这是由于改变了这个类的用途而导致的,没有完全将所有的类改变为新的范型。


报告模式


1.      CI_CONFUSED_INHERITANCE  (CI, STYLE):  声明受保护字段的final类

4.5 ConfusionBetweenInheritedAndOuterMethod


模式


IA


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.ConfusionBetweenInheritedAndOuterMethod


说明


找到代码中继承方法和外层方法之间的潜在混淆。


报告模式


1.      IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTER_METHOD  (IA, STYLE):  潜在的二义性继承方法或外层方法调用

4.6 DuplicateBranches


模式


DB


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.DuplicateBranches


说明


这个检测器会检查if/else或switch语句中是否有两个具有相同代码的分支,这种情况会降低测试的有用性。这通常是由于复制粘贴两条分支时造成的,会导致其中一条分支的逻辑不正确。


报告模式


1.      DB_DUPLICATE_BRANCHES  (DB, STYLE):  方法含有使用相同代码的两条分支

2.      DB_DUPLICATE_SWITCH_CLAUSES  (DB, STYLE):  方法含有使用相同代码的两条switch子句

4.7 FindBadForLoop


模式


QF


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.FindBadForLoop


说明


这个检测器会找出代码中不正确的for循环。


报告模式


1.      QF_QUESTIONABLE_FOR_LOOP  (QF, STYLE):  for循环中含有复杂的、难以捉摸的或错误的增量

4.8 FindCircularDependencies


模式


CD


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.FindCircularDependencies


说明


这个检测器会找出类之间的环状依赖关系。


报告模式


1.      CD_CIRCULAR_DEPENDENCY  (CD, STYLE):  测试类之间的环状依赖关系

4.9 FindNonSerializableValuePassedToWriteObject


模式


DMI


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.FindNonSerializableValuePassedToWriteObject


说明


这个检测器会找出代码中将不可序列化对象传递给一个ObjectOutput对象的writeObject方法的地方。


报告模式


1.      DMI_NONSERIALIZABLE_OBJECT_WRITTEN  (DMI, STYLE):  将不可序列化对象写入ObjectOutput

4.10 FindNonShortCircuit


模式


NS


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.FindNonShortCircuit


说明


这个检测器会找出代码中使用非短路布尔运算符(使用|和&,而不是||和&&)的可疑之处。


报告模式


1.      NS_DANGEROUS_NON_SHORT_CIRCUIT  (NS, STYLE):  使用非短路逻辑运算符的潜在危险

2.      NS_NON_SHORT_CIRCUIT  (NS, STYLE):  非短路逻辑运算符的可疑使用

4.11 FindUselessControlFlow


模式


UCF


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.FindUselessControlFlow


说明


这个检测器会找出代码中无效的控制流语句。


报告模式


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

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

4.12 InconsistentAnnotations


模式


NP


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.InconsistentAnnotations


说明


这个检测器会找出代码中直接应用于方法参数的类型修饰符和这些方法参数的实际使用之间的不一致性。


报告模式


1.      NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE  (NP, STYLE):  参数必须是非空的,但是却标记为可为空值

4.13 LoadOfKnownNullValue


模式


NP


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.LoadOfKnownNullValue


说明


检查代码中加载明知为空的值的地方。


报告模式


1.      NP_LOAD_OF_KNOWN_NULL_VALUE  (NP, STYLE):  加载已知为空的值

4.14 MultithreadedInstanceAccess


模式


MTIA


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.MultithreadedInstanceAccess


说明


这个检测器会找出实现Struts框架时的潜在问题。


报告模式


1.      MTIA_SUSPECT_SERVLET_INSTANCE_FIELD  (MTIA, STYLE):  类扩展Servlet类,并且使用实例变量

2.      MTIA_SUSPECT_STRUTS_INSTANCE_FIELD  (MTIA, STYLE):  类扩展Struts的Action类,并且使用实例变量

4.15 PreferZeroLengthArrays


模式


PZLA


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.PreferZeroLengthArrays


说明


这个检测器会找出返回值要么是数组,要么是空引用的方法。通常,当需要返回一个空引用时,返回一个长度为零的数组比较好。


报告模式


1.      PZLA_PREFER_ZERO_LENGTH_ARRAYS  (PZLA, STYLE):  考虑返回一个长度为零的数组,而不是返回空引用

4.16 PublicSemaphores


模式


PS


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.PublicSemaphores


说明


这个检测器会找出使用wait()、notify()、notifyAll()等方法进行同步操作的公有类。这样会将同步的实现方法作为这个类的公共信息暴露出来。这个类的客户程序可能会使用这个类的实例对象作为它自己的同步化对象,从而对基本实现造成严重破坏。


报告模式


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

4.17 RedundantInterfaces


模式


RI


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.RedundantInterfaces


说明


这个检测器会找出声明实现的接口和父类实现的接口相同的类。如果父类实现了一个接口,那么子类也会实现这个接口,所以这是一种多余实现。


报告模式


1.      RI_REDUNDANT_INTERFACES  (RI, STYLE):  这个类和父类实现的接口相同

4.18 RuntimeExceptionCapture


模式


REC


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.RuntimeExceptionCapture


说明


当代码块中没有任何代码抛出异常时,这个检测器会找出捕捉异常的catch子句。


报告模式


1.      REC_CATCH_EXCEPTION  (REC, STYLE):  没有抛出异常,但却捕捉异常

4.19 UselessSubclassMethod


模式


USM


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.UselessSubclassMethod


说明


这个检测器会找出实现在父类中定义的方法的子类,子类仅仅通过将参数原封未动地传递给父类方法来实现这个方法。这些方法都是可以被移除的。


报告模式


1.      USM_USELESS_ABSTRACT_METHOD  (USM, STYLE):  抽象方法已经在已实现的接口中定义

2.      USM_USELESS_SUBCLASS_METHOD  (USM, STYLE):  方法过分地委托给父类方法

4.20 XMLFactoryBypass


模式


XFB


速度



缺陷类别


危险代码


类型


edu.umd.cs.findbugs.detect.XMLFactoryBypass


说明


这个检测器会找出XML接口实现的直接分配。这样会使代码依赖于一种特定的实现,而不是使用提供的工厂模式来创建这些对象。


报告模式


1.      XFB_XML_FACTORY_BYPASS  (XFB, STYLE):  方法直接分配XML接口的一种特定实现

5.       Internationalization(国际化)

5.1 DefaultEncodingDetector


模式


Dm


速度



缺陷类别


国际化


类型


edu.umd.cs.findbugs.detect.DefaultEncodingDetector


说明


检查将byte转换为String(或者String转换为byte)的方法调用是否使用用户默认的平台编码。这样的方法调用会导致应用程序的行为可能会随着平台的不同而改变。


报告模式


1.      DM_DEFAULT_ENCODING  (Dm, I18N):  信任默认编码

6.       Multithreaded Correctness(多线程正确性)

6.1 AtomicityProblem


模式


AT


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.AtomicityProblem


说明


找到一个并发抽象上的不会原子性执行的操作(例如get/put方法)序列。


报告模式


1.      AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION  (AT, MT_CORRECTNESS):  对并发抽象的调用序列可能不是原子性的

6.2 DontIgnoreResultOfPutIfAbsent


模式


RV


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.DontIgnoreResultOfPutIfAbsent


说明


检查如果putIfAbsent方法的结果被忽略,那么作为第二个参数传入的值没有被重用。


报告模式


1.      RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED  (RV, MT_CORRECTNESS):  忽略putIfAbsent方法的返回值,重用传入putIfAbsent方法的参数值

6.3 FindDoubleCheck


模式


DC


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.FindDoubleCheck


说明


这个检测器会找出代码中双重检查锁定的实例。


报告模式


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

6.4 FindEmptySynchronizedBlock


模式


ESync


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.FindEmptySynchronizedBlock


说明


这个检测器会找出代码中空白的同步代码块。


报告模式


1.      ESync_EMPTY_SYNC  (ESync, MT_CORRECTNESS):  空白的同步代码块

6.5 FindInconsistentSync2


模式


IS|MSF


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.FindInconsistentSync2


说明


这个检测器会找出代码中通过一种相对于锁定而言不一致的方式访问字段的地方。这个检测器的运行速度较慢。


报告模式


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

2.      IS_FIELD_NOT_GUARDED  (IS, MT_CORRECTNESS):  没有预防对字段的并发访问

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

6.6 FindJSR166LockMonitorenter


模式


JLM


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.FindJSR166LockMonitorenter


说明


这个检测器会找出代码中在JSR166锁上执行的普通同步。这个检测器的运行速度中等。


报告模式


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

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

3.      JML_JSR166_CALLING_WAIT_RATHER_THAN_AWAIT  (JLM, MT_CORRECTNESS):  对util.concurrent抽象使用监控风格的wait方法

6.7 FindMismatchedWaitOrNotify


模式


MWN


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.FindMismatchedWaitOrNotify


说明


不能对当前被锁定的对象调用wait()、notify()、notifyAll()等方法,这个检测器会找出代码中对当前被锁定对象调用这些方法的地方。这个检测器的运行速度中等。因为这个检测器仍然在开发之中,会产生很多错误的结果,所以一般不使用这个检测器。


报告模式


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

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

6.8 FindNakedNotify


模式


NN


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.FindNakedNotify


说明


这个检测器会找出代码中看起来没有修改可变对象状态的notify()方法调用。


报告模式


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

6.9 FindRunInvocations


模式


Ru


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.FindRunInvocations


说明


这个检测器会找出代码中对Thread.run()方法的调用。这个检测器的运行速度较快。


报告模式


1.      RU_INVOKE_RUN  (Ru, MT_CORRECTNESS):  调用一个线程对象的run方法(实际上你是想启动这个线程吗?)

6.10 FindSleepWithLockHeld


模式


SWL


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.FindSleepWithLockHeld


说明


这个检测器会找出代码中调用Thread.sleep()方法,同时又保持锁的地方。这个检测器的速度较慢。


报告模式


1.      SWL_SLEEP_WITH_LOCK_HELD  (SWL, MT_CORRECTNESS):  方法调用Thread.sleep()方法,同时又不释放锁

6.11 FindSpinLoop


模式


SP


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.FindSpinLoop


说明


这个检测器会找出代码中自旋读取一个字段的循环(自旋锁)。


报告模式


1.      SP_SPIN_ON_FIELD  (SP, MT_CORRECTNESS):  方法自旋竞争字段

6.12 FindTwoLockWait


模式


TLW


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.FindTwoLockWait


说明


这个检测器会找出代码中调用wait()方法,同时又保持两个(或更多个)锁的地方。这个检测器的运行速度较慢。


报告模式


1.      TLW_TWO_LOCK_WAIT  (TLW, MT_CORRECTNESS):  线程等待,但是同时又保持两个锁

6.13 FindUnconditionalWait


模式


UW


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.FindUnconditionalWait


说明


这个检测器会找出代码中没有在条件代码块或循环代码块中调用的wait()方法。


报告模式


1.      UW_UNCOND_WAIT  (UW, MT_CORRECTNESS):  无条件的等待

6.14 FindUnreleasedLock


模式


UL


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.FindUnreleasedLock


说明


这个检测器会找出代码中已经获得但是退出方法时没有释放的JSR-166(java.util.concurrent)锁。这个检测器的运行速度中等。注意,为了使用这个检测器,你需要在辅助的classpath中导入java.util.concurrent包(或者由它自己分析这个包)。


报告模式


1.      UL_UNRELEASED_LOCK  (UL, MT_CORRECTNESS):  方法在所有执行路径上都没有释放锁

2.      UL_UNRELEASED_LOCK_EXCEPTION_PATH  (UL, MT_CORRECTNESS):  方法在所有异常路径上都没有释放锁

6.15 FindUnsyncGet


模式


UG


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.FindUnsyncGet


说明


这个检测器会检查代码中的get/set方法,找出get方法是非同步而set方法是同步的get/set方法对。


报告模式


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

6.16 LazyInit


模式


LI


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.LazyInit


说明


这个检测器会找出代码中不是volatile,但是延迟字段初始化的字段。这个检测器的运行速度中等。


报告模式


1.      LI_LAZY_INIT_STATIC  (LI, MT_CORRECTNESS):  静态字段的不正确的延迟初始化

2.      LI_LAZY_INIT_UPDATE_STATIC  (LI, MT_CORRECTNESS):  静态字段的不正确的延迟初始化和更新

6.17 MutableLock


模式


ML


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.MutableLock


说明


这个检测器会找出代码中对被修改字段的同步对象读取操作。


报告模式


1.      ML_SYNC_ON_UPDATED_FIELD  (ML, MT_CORRECTNESS):  方法对一个更新字段进行同步操作

6.18 StartInConstructor


模式


SC


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.StartInConstructor


说明


这个检测器会找出启动线程的构造器。


报告模式


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

6.19 StaticCalendarDetector


模式


STCAL


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.StaticCalendarDetector


说明


这个检测器会发出关于java.util.Calendar或java.text.DateFormat类型(及其子类)的静态字段的警报,因为Calendar在使用多线程的情况下是天生不安全的。


报告模式


1.      STCAL_INVOKE_ON_STATIC_CALENDAR_INSTANCE  (STCAL, MT_CORRECTNESS):  调用静态Calendar

2.      STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE  (STCAL, MT_CORRECTNESS):  调用静态DateFormat

3.      STCAL_STATIC_CALENDAR_INSTANCE  (STCAL, MT_CORRECTNESS):  静态Calendar字段

4.      STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE  (STCAL, MT_CORRECTNESS):  静态DateFormat字段

6.20 SynchronizationOnSharedBuiltinConstant


模式


DL


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.SynchronizationOnSharedBuiltinConstant


说明


这个检测器会找出代码中对一个共享内建常量(例如String)进行同步操作的地方。


报告模式


1.      DL_SYNCHRONIZATION_ON_BOOLEAN  (DL, MT_CORRECTNESS):  对Boolean进行同步

2.      DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE  (DL, MT_CORRECTNESS):  对封装的基本类型进行同步

3.      DL_SYNCHRONIZATION_ON_SHARED_CONSTANT  (DL, MT_CORRECTNESS):  对内部String进行同步

4.      DL_SYNCHRONIZATION_ON_UNSHARED_BOXED_PRIMITIVE  (DL, MT_CORRECTNESS):  对封装的基本类型值进行同步

6.21 SynchronizeAndNullCheckField


模式


NP


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.SynchronizeAndNullCheckField


说明


这个检测器会找出代码中进行同步操作,然后又检查是否为空值的字段。


报告模式


1.      NP_SYNC_AND_NULL_CHECK_FIELD  (NP, MT_CORRECTNESS):  对同一个字段进行同步和空值检查

6.22 SynchronizeOnClassLiteralNotGetClass


模式


WL


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.SynchronizeOnClassLiteralNotGetClass


说明


找出代码中对getClass方法的结果进行同步操作,而不是对类常量进行同步操作的地方。


报告模式


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

6.23 SynchronizingOnContentsOfFieldToProtectedField


模式


ML


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.SynchronizingOnContentsOfFieldToProtectField


说明


这个检测器会找出代码中为了保护某个字段的更新而对这个字段进行同步操作的地方。


报告模式


1.      ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIELD  (ML, MT_CORRECTNESS):  为了守护这个字段,尝试对这个字段进行无效的同步操作

6.24 VolatileUsage


模式


VO


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.VolatileUsage


说明


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


报告模式


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

2.      VO_VOLATILE_REFERENCE_TO_ARRAY  (VO, MT_CORRECTNESS):  一个指向数组的volatile引用没有将数组元素当做volatile的

6.25 WaitInLoop


模式


No|Wa


速度



缺陷类别


多线程


类型


edu.umd.cs.findbugs.detect.WaitInLoop


说明


这个检测器会找出代码中没有在循环中调用的wait()方法。


报告模式


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

2.      WA_AWAIT_NOT_IN_LOOP  (Wa, MT_CORRECTNESS):  没有在循环中调用Condition.await()方法

3.      WA_NOT_IN_LOOP  (Wa, MT_CORRECTNESS):  没有在循环中等待

7.       Performance(性能)

7.1 FindUncalledPrivateMethods


模式


UPM


速度



缺陷类别


性能


类型


edu.umd.cs.findbugs.detect.FindUncalledPrivateMethods


说明


这个检测器会找出从未调用过的私有方法。


报告模式


1.      UPM_UNCALLED_PRIVATE_METHOD  (UPM, PERFORMANCE):  从未调用过的私有方法

7.2 HugeSharedStringConstants


模式


HSC


速度



缺陷类别


性能


类型


edu.umd.cs.findbugs.detect.HugeSharedStringConstants


说明


这个检测器会找出在多个class文件中重复出现的字符串常量。


报告模式


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

7.3 InefficientMemberAccess


模式


IMA


速度



缺陷类别


性能


类型


edu.umd.cs.findbugs.detect.InefficientMemberAccess


说明


当一个类含有私有(private)成员变量和内部类时,这个检测器会找出试图写入这个类的私有成员变量的内部类。在这种情况下,需要使用一个生成存取器方法的特殊编译器来写入这个变量。将可见性放宽至受保护的(protected)将会使得这个字段能够被直接写入。


报告模式


1.      IMA_INEFFICIENT_MEMBER_ACCESS  (IMA, PERFORMANCE):  内部类的方法访问宿主类的一个私有成员变量

7.4 InefficientToArray


模式


ITA


速度



缺陷类别


性能


类型


edu.umd.cs.findbugs.detect.InefficientToArray


说明


当使用需要一个原型数组作为参数的toArray()方法将Collection对象转换为数组时,这个检测器会找出代码中向这个toArray()方法传递一个长度为零的数组实参的地方。


报告模式


1.      ITA_INEFFICIENT_TO_ARRAY  (ITA, PERFORMANCE):  方法通过长度为零的数组实参调用toArray()方法

7.5 NumberConstructor


模式


Bx


速度



缺陷类别


性能


类型


edu.umd.cs.findbugs.detect.NumberConstructor


说明


找出代码中通过基本类型的实参调用Number类构造器的地方。


报告模式


1.      DM_FP_NUMBER_CTOR  (Bx, PERFORMANCE):  方法调用无效的浮点数Number类构造器,请使用valueOf静态方法代替

2.      DM_NUMBER_CTOR  (Bx, PERFORMANCE):  方法调用无效的Number构造器,请使用valueOf静态方法代替

7.6 StringConcatenation


模式


SBSC


速度



缺陷类别


性能


类型


edu.umd.cs.findbugs.detect.StringConcatenation


说明


这个检测器会找出在循环中使用“+”运算符拼接字符串的地方。


报告模式


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

7.7 URLProblems


模式


Dm


速度



缺陷类别


性能


类型


edu.umd.cs.findbugs.detect.URLProblems


说明


对java.net.URL调用equals和hashCode方法可以解析域名。结果,这些操作的开销可能非常高昂,这个检测器会找出代码中可能调用此类方法的地方。


报告模式


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

2.      DMI_COLLECTION_OF_URLS  (Dm, PERFORMANCE):  URL的Map和Set可能会导致性能问题

7.8 UnnecessaryMath


模式


UM


速度



缺陷类别


性能


类型


edu.umd.cs.findbugs.detect.UnnecessaryMath


说明


这个检测器会找出代码中对常数值调用java.lang.Math的静态方法,而所得结果值也是一个静态已知的常数值的地方。直接使用常数值的速度更快,有时也更加精确。


报告模式


1.      UM_UNNECESSARY_MATH  (UM, PERFORMANCE):  方法对一个常数值调用Math类的静态方法

7.9 WrongMapIterator


模式


WMI


速度



缺陷类别


性能


类型


edu.umd.cs.findbugs.detect.WrongMapIterator


说明


这个检测器会找出代码中通过从一个keySet迭代器取得的一个键,访问Map中相应条目的值的地方。


报告模式


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

8.       Malicious Code Vulnerability(恶意代码漏洞)

8.1 DoInsideDoPrivileged


模式


DP


速度



缺陷类别


恶意代码


类型


edu.umd.cs.findbugs.detect.DoInsideDoPrivileged


说明


找出应当在doPrivileged代码块中执行的代码。


报告模式


1.      DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED  (DP, MALICIOUS_CODE):  应当只能在doPrivileged代码块中创建类加载器

2.      DP_DO_INSIDE_DO_PRIVILEGED  (DP, MALICIOUS_CODE):  调用了应当只能在doPrivileged代码块中调用的方法

8.2 FindReturnRef


模式


EI|EI2|MS


速度



缺陷类别


恶意代码


类型


edu.umd.cs.findbugs.detect.FindReturnRef


说明


这个检测器会找出返回可变静态数据的方法。


报告模式


1.      EI_EXPOSE_REP  (EI, MALICIOUS_CODE):  返回指向可变对象的引用可能会暴露内部表示法

2.      EI_EXPOSE_REP2  (EI2, MALICIOUS_CODE):  结合指向可变对象的引用可能会暴露内部表示法

3.      EI_EXPOSE_STATIC_REP2  (MS, MALICIOUS_CODE):  将一个可变对象存储在一个静态字段中可能会暴露内部静态状态

4.      MS_EXPOSE_REP  (MS, MALICIOUS_CODE):  返回数组的公有静态方法可能会暴露内部表示法

8.3 MutableStaticFields


模式


MS


速度



缺陷类别


恶意代码


类型


edu.umd.cs.findbugs.detect.MutableStaticFields


说明


这个检测器会找出可能会被恶意代码篡改的静态字段。


报告模式


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

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

3.      MS_MUTABLE_ARRAY  (MS, MALICIOUS_CODE):  字段是一个可变数组

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

5.      MS_OOI_PKGPROTECT  (MS, MALICIOUS_CODE):  应当将字段从一个接口中抽出,并且将其设为package或者protected

6.      MS_PKGPROTECT  (MS, MALICIOUS_CODE):  字段应当是package或protected

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

8.      MS_SHOULD_BE_REFACTORED_TO_BE_FINAL  (MS, MALICIOUS_CODE):  字段不是final的,但是应当将其重构为final的

9.       Bogus Random Noise(伪随机噪声)

9.1 Noise


模式


NOISE


速度



缺陷类别


伪随机噪声


类型


edu.umd.cs.findbugs.detect.Noise


说明


这个检测器会产生一个随机信号:基于方法执行操作所产生的散列值的警告。这些警告都是伪随机噪声,它们是数据挖掘实验中的一种有用的控制手段,并不是用来发现软件中的实际缺陷。这个检测器只是一个用于测试新检测器的挂钩。通常,这个检测器不会处理任何事情。


报告模式


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

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

3.      NOISE_OPERATION  (NOISE, NOISE):  运算相关的假警告

9.2 NoiseNullDeref


模式


NOISE


速度



缺陷类别


伪随机噪声


类型


edu.umd.cs.findbugs.detect.NoiseNullDeref


说明


用于空指针解引用的噪声检测器。主要作为警告的有效性或预测能力实验中的一种有用的控制手段,而不是用来发现代码中的实际缺陷。


报告模式


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

10.  Experimental(实验性)

10.1 FindUnsatisfiedObligation


模式


OBL


速度



缺陷类别


实验性


类型


edu.umd.cs.findbugs.detect.FindUnsatisfiedObligation


说明


这个检测器会找出在所有执行路径中都没有对使用的I/O流和数据库资源进行清理的方法。这个检测器的运行速度较慢。


报告模式


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

2.      OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE  (OBL, EXPERIMENTAL):  在处理异常时,方法可能未能成功清理流或资源

10.2 LostLoggerDueToWeakReference


模式


LG


速度



缺陷类别


实验性


类型


edu.umd.cs.findbugs.detect.LostLoggerDueToWeakReference


说明


这个检测器会找出在OpenJDK 1.6下行为不同的代码,OpenJDK使用弱引用来维持日志记录器。


报告模式


1.      LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE  (LG, EXPERIMENTAL):  OpenJDK中的弱引用具有导致日志记录器丢失的风险

10.3 TestASM


模式


TEST


速度



缺陷类别


实验性


类型


edu.umd.cs.findbugs.detect.TestASM


说明


这个检测器是一个代码示例,示范如何使用ASM字节码分析框架编写一个FindBugs检测器。


报告模式


1.      TESTING  (TEST, EXPERIMENTAL):  测试

10.4 TestingGround


模式


TEST


速度



缺陷类别


实验性


类型


edu.umd.cs.findbugs.detect.TestingGround


说明


这个检测器仅仅是一个用于测试新检测器的钩子。通常,这个检测器不会做任何事情。


报告模式


1.      TESTING  (TEST, EXPERIMENTAL):  测试

10.5 TestingGround2


模式


TEST


速度



缺陷类别


实验性


类型


edu.umd.cs.findbugs.detect.TestingGround2


说明


这个检测器仅仅是一个用于测试新检测器的钩子。通常,这个检测器不会做任何事情。


报告模式


1.      TESTING  (TEST, EXPERIMENTAL):  测试

11.  Security(安全性)

11.1 CrossSiteScripting


模式


HRS|PT|XSS


速度



缺陷类别


安全性


类型


edu.umd.cs.findbugs.detect.CrossSiteScripting


说明


这个检测器会找出明显的跨站点脚本漏洞。


报告模式


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

2.      HRS_REQUEST_PARAMETER_TO_HTTP_HEADER  (HRS, SECURITY):  HTTP响应分割漏洞

3.      PT_ABSOLUTE_PATH_TRAVERSAL  (PT, SECURITY):  servlet中的绝对路径遍历

4.      PT_RELATIVE_PATH_TRAVERSAL  (PT, SECURITY):  servlet中的相对路径遍历

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

6.      XSS_REQUEST_PARAMETER_TO_SEND_ERROR  (XSS, SECURITY):  错误页面中的servlet反射跨站点脚本漏洞

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

11.2 FindSqlInjection


模式


SQL


速度



缺陷类别


安全性


类型


edu.umd.cs.findbugs.detect.FindSqlInjection


说明


这个检测器会通过数据流分析检查执行SQL语句的方法调用,找出那些没有使用常量字符串作为实参的方法调用。


报告模式


1.      SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE  (SQL, SECURITY):  传递给SQL语句执行方法的参数是非常量字符串

2.      SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING  (SQL, SECURITY):  一条准备好的语句是由一个非常量字符串生成的

11.3 DumbMethodInvocations


模式


Dm|DMI


速度



缺陷类别


安全性


类型


edu.umd.cs.findbugs.detect.DumbMethodInvocations


说明


这个检测器会找出传递给方法的错误参数(例如,substring(0))。


报告模式


1.      DMI_CONSTANT_DB_PASSWORD  (Dm, SECURITY):  数据库密码的硬编码常量

2.      DMI_EMPTY_DB_PASSWORD  (Dm, SECURITY):  空的数据库密码

3.      DMI_HARDCODED_ABSOLUTE_FILENAME  (DMI, STYLE):  代码含有指向一个绝对路径名的硬编码引用

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

原文:http://blog.csdn.net/yang1982_0907/article/details/18606171

时间: 2024-10-28 21:52:20

详解FindBugs的各项检测器 .的相关文章

Windows渗透利器之Pentest BOX使用详解(一)

内容概览:                                     知识科普                                    优缺点总结 功能参数详解翻译: 控制台参数详解翻译 setting各项功能参数翻译详解: 基本设置(含外观,字体,标签栏等设置) 启动设置(含任务栏其他等) 特征 综合参数 宏设置 文本管理器 基础信息 知识科普: Pentest Box在2015年发布,具体月份不详.Pentest Box开源项目的创始人是Aditya Agrawa

CentOS 7以yum方式安装zabbix3.2及配置文件详解

一.zabbix简介与环境准备 简介详见 ---> zabbix简介 环境准备: CentOS 7(node7):zabbix-server,web,mysql,agent mariadb:5.5.50 zabbix组件:3.2.1 apache:2.4.6 二.安装与配置 1.安装数据库(mariadb),可直接yum安装 [[email protected] ~]# vim /etc/yum.repos.d/MariaDB.repo [mariadb]  name = MariaDB  ba

Oracle 11g数据库详解(2015-1-18更新)

Oracle 11g数据库详解 整理者:高压锅 QQ:280604597 Email:[email protected] 大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的 1   简介 数据库操作主要有以下几步: 1.  启动.停止数据库 2.  连接.断开数据库 3.  创建.修改.删除数据库用户 4.  表空间 5.  新建.修改.删除表 6.  查询.插入.修改.删除表数据 7.  新建.修改.删除视图 8.  新建.修改.删除存储过程 9.  新建.修改.删除触发

MySQL配置文件mysql.ini参数详解、MySQL性能优化

MySQL配置文件mysql.ini参数详解.MySQL性能优化 my.ini(Linux系统下是my.cnf),当mysql服务器启动时它会读取这个文件,设置相关的运行环境参数. my.ini分为两块:Client Section和Server Section.   Client Section用来配置MySQL客户端参数.   要查看配置参数可以用下面的命令: show variables like '%innodb%'; # 查看innodb相关配置参数 show status like

Yarn 详解

唐 清原, 咨询顾问 简介: 本文介绍了 Hadoop 自 0.23.0 版本后新的 map-reduce 框架(Yarn) 原理,优势,运作机制和配置方法等:着重介绍新的 yarn 框架相对于原框架的差异及改进:并通过 Demo 示例详细描述了在新的 yarn 框架下搭建和开发 hadoop 程序的方法. 读者通过本文中新旧 hadoop map-reduce 框架的对比,更能深刻理解新的 yarn 框架的技术原理和设计思想,文中的 Demo 代码经过微小修改即可用于用户基于 hadoop 新

各种音视频编解码学习详解

各种音视频编解码学习详解 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等.最近因为项目的关系,需要理清媒体的codec,比较搞的是,在豆丁网上看运营商的规范 标准,同一运营商同样的业务在不同文档中不同的要求,而且有些要求就我看来应当是历史的延续,也就是现在已经很少采用了.所以豆丁上看不出所以然,从 wiki上查.中文的wiki信息量有限,很短,而wiki的英文内容内多,删减版

CentOS 5,6 系统启动流程详解

一.linux 组成介绍 1.linux 组成: Linux: kernel+rootfs(根文件系统) kernel: 进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs: 程序和glibc 库:函数集合, function, 调用接口(头文件负责描述) 过程调用: procedure,无返回值 函数调用: function 程序:二进制执行文件 2.内核设计流派: 单内核(monolithic kernel): Linux 把所有功能集成于同一个程序 微内核(micro

5、linux用户和组管理详解

linux用户和组管理 类Unix系统的设计初衷就是为让多用户同时工作,所以也迫使Linux系统有了极强的安全性,在前面安装红帽RHEL7操作系统时还特别要求"设置root用户密码",而root用户是存在于所有类UNIX系统中的"超级用户". 用户管理 root账户介绍(超级管理员) root用户拥有极高的系统所有权,能够管理系统的各项功能,如添加/删除用户,启动/关闭进程,开启/禁用硬件设备等权限.虽然使用root用户工作时不会受到权限的控制,但老话讲"

ASP.NET ViewState详解

ASP.NET ViewState详解[转载] asp.net存储textboxserializationstring服务器 作者:Infinities Loop 概述 ViewState是一个被误解很深的动物了.我希望通过此文章来澄清人们对ViewState的一些错误认识.为了达到这个目的,我决定从头到尾详细的描述一下整个ViewState的工作机制,其中我会同时用一些例子说明我文章中的观点,结论.比如我会用静态控件(declared controls)和动态控件(dynamic contro