`
donsun
  • 浏览: 31704 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

FindBugs缺陷类型统计分析(部分)

阅读更多

FindBugs缺陷类型统计分析(部分)

 

目录

1 正确性警告(CORRECTNESS WARNINGS )    4
1.1 AM: CREATES AN EMPTY JAR FILE ENTRY    4
1.2 AM: CREATES AN EMPTY ZIP FILE ENTRY    4
1.3 BC: IMPOSSIBLE CAST    4
1.4 BC: INSTANCEOF WILL ALWAYS RETURN FALSE    5
1.5 BIT: INCOMPATIBLE BIT MASKS    5
1.6 BIT: INCOMPATIBLE BIT MASKS    6
1.7 BIT: INCOMPATIBLE BIT MASKS    6
1.8 BIT: BITWISE OR OF SIGNED BYTE VALUE    7
1.9 BOA: CLASS OVERRIDES A METHOD IMPLEMENTED IN SUPER CLASS ADAPTER WRONGLY    8
1.10 CN: CLASS IMPLEMENTS CLONEABLE BUT DOES NOT DEFINE OR USE CLONE METHOD    8
1.11 CN: CLONE METHOD DOES NOT CALL SUPER.CLONE()    8
1.12 CO: ABSTRACT CLASS DEFINES COVARIANT COMPARETO() METHOD    9
1.13 CO: COVARIANT COMPARETO() METHOD DEFINED    10
1.14 DE: METHOD MIGHT DROP EXCEPTION    10
1.15 DE: METHOD MIGHT IGNORE EXCEPTION    11
1.16 DLS: OVERWRITTEN INCREMENT    11
1.17 NP: POSSIBLE NULL POINTER DEREFERENCE DUE TO RETURN VALUE OF CALLED METHOD    12
1.18 NP: METHOD CALL PASSES NULL FOR UNCONDITIONALLY DEREFERENCED PARAMETER    12
1.19 NP: METHOD CALL PASSES NULL FOR UNCONDITIONALLY DEREFERENCED PARAMETER    13
1.20 NP: NON-VIRTUAL METHOD CALL PASSES NULL FOR UNCONDITIONALLY DEREFERENCED PARAMETER    13
1.21 NP: STORE OF NULL VALUE INTO FIELD ANNOTATED NONNULL    13
1.22 NP: READ OF UNWRITTEN FIELD    13
1.23 NS: QUESTIONABLE USE OF NON-SHORT-CIRCUIT LOGIC    14
1.24 NM: CLASS DEFINES EQUAL(); SHOULD IT BE EQUALS()?    14
1.25 NM: CONFUSING METHOD NAMES    14
1.26 NM: CLASS DEFINES HASHCODE(); SHOULD IT BE HASHCODE()?    15
1.27 NM: CLASS DEFINES TOSTRING(); SHOULD IT BE TOSTRING()?    15
1.28 NM: APPARENT METHOD/CONSTRUCTOR CONFUSION    15
1.29 NM: VERY CONFUSING METHOD NAMES    16
1.30 ODR: METHOD MAY FAIL TO CLOSE DATABASE RESOURCE    16
1.31 ODR: METHOD MAY FAIL TO CLOSE DATABASE RESOURCE ON EXCEPTION    17
1.32 OS: METHOD MAY FAIL TO CLOSE STREAM    18
1.33 OS: METHOD MAY FAIL TO CLOSE STREAM ON EXCEPTION    18
1.34 QBA: METHOD ASSIGNS BOOLEAN LITERAL IN BOOLEAN EXPRESSION    19
1.35 QF: COMPLICATED, SUBTLE OR WRONG INCREMENT IN FOR-LOOP    19
1.36 RC: SUSPICIOUS REFERENCE COMPARISON    20
1.37 RCN: REDUNDANT COMPARISON OF NON-NULL VALUE TO NULL    20
1.38 RCN: REDUNDANT COMPARISON OF TWO NULL VALUES    21
1.39 RCN: REDUNDANT NULLCHECK OF VALUE KNOWN TO BE NON-NULL    21
1.40 RCN: REDUNDANT NULLCHECK OF VALUE KNOWN TO BE NULL    21
1.41 RCN: NULLCHECK OF VALUE PREVIOUSLY DEREFERENCED    21
1.42 RE: INVALID SYNTAX FOR REGULAR EXPRESSION    22
1.43 RE: "." USED FOR REGULAR EXPRESSION    22
1.44 RR: METHOD IGNORES RESULTS OF INPUTSTREAM.READ()    22
1.45 RR: METHOD IGNORES RESULTS OF INPUTSTREAM.SKIP()    23
1.46 RV: RANDOM VALUE FROM 0 TO 1 IS COERCED TO THE INTEGER 0    23
1.47 RV: METHOD CHECKS TO SEE IF RESULT OF STRING.INDEXOF IS POSITIVE    23
1.48 RV: METHOD DISCARDS RESULT OF READLINE AFTER CHECKING IF IT IS NONNULL    23
1.49 RV: REMAINDER OF 32-BIT SIGNED RANDOM INTEGER    24
1.50 RV: METHOD IGNORES RETURN VALUE    24
1.51 SA: SELF ASSIGNMENT OF FIELD    24
2 国际化警告(INTERNATIONALIZATION WARNINGS )    24
2.1 DM: METHOD INVOKES DUBIOUS STRING.TOUPPERCASE() OR STRING.TOLOWERCASE; USE THE LOCALE PARAMETERIZED VERSION INSTEAD    25
3 多线程正确性警告(MULTITHREADED CORRECTNESS WARNINGS )    25
3.1 RU: INVOKES RUN ON A THREAD (DID YOU MEAN TO START IT INSTEAD?)    25
3.2 SC: CONSTRUCTOR INVOKES THREAD.START()    25
3.3 SP: METHOD SPINS ON FIELD    26
3.4 SWL: METHOD CALLS THREAD.SLEEP() WITH A LOCK HELD    26
3.5 TLW: WAIT WITH TWO LOCKS HELD    26
3.6 UG: UNSYNCHRONIZED GET METHOD, SYNCHRONIZED SET METHOD    27
3.7 UL: METHOD DOES NOT RELEASE LOCK ON ALL PATHS    27
3.8 UL: METHOD DOES NOT RELEASE LOCK ON ALL EXCEPTION PATHS    28
3.9 UW: UNCONDITIONAL WAIT IN METHOD    28
3.10 VO: A VOLATILE REFERENCE TO AN ARRAY DOESN'T TREAT THE ARRAY ELEMENTS AS VOLATILE    28
3.11 WS: CLASS'S WRITEOBJECT() METHOD IS SYNCHRONIZED BUT NOTHING ELSE IS    29
3.12 WA: CONDITION.AWAIT() NOT IN LOOP IN METHOD    29
3.13 WA: WAIT NOT IN LOOP IN METHOD    29
4 安全脆弱代码警告(MALICIOUS CODE VULNERABILITY WARNINGS )    30
4.1 EI: METHOD MAY EXPOSE INTERNAL REPRESENTATION BY RETURNING REFERENCE TO MUTABLE OBJECT    30
4.2 EI2: METHOD MAY EXPOSE INTERNAL REPRESENTATION BY INCORPORATING REFERENCE TO MUTABLE OBJECT    30
5 性能问题(PERFORMANCE WARNINGS)    30
5.1 DM: METHOD INVOKES DUBIOUS BOOLEAN CONSTRUCTOR; USE BOOLEAN.VALUEOF(...) INSTEAD    30
6 不提倡的风格(STYLE WARNINGS)    31
6.1 BC: QUESTIONABLE CAST TO ABSTRACT    31

 

1 正确性警告(Correctness Warnings )

1.1 AM: Creates an empty jar file entry

 

项目

内容

BugID

AM_CREATES_EMPTY_JAR_FILE_ENTRY

错误范式

ZipEntry zipEntry=new ZipEntry(fileTo);

zipOutputStream.putNextEntry(zipEntry);

zipOutputStream.closeEntry();     

正确范式

ZipEntry zipEntry=new ZipEntry(fileTo);

zipOutputStream.putNextEntry(zipEntry);

// do something

FileInputStream fileInputStream=new FileInputStream(file);

while((n=fileInputStream.read(rgb))>-1)

{

        zipOutputStream.write(rgb,0,n);

}

fileInputStream.close();

// do end

zipOutputStream.closeEntry();

zipOutputStream.close();

描述

建了一个空的 Jar 文件

详细

建了一个空的 Jar 文件,在 putNextEntry() closeEntry() ,没有做任何写入操作。

重要级别

 

 

1.2 AM: Creates an empty zip file entry

 

项目

内容

BugID

AM_CREATES_EMPTY_ZIP_FILE_ENTRY

错误范式

同上

正确范式

同上

描述

同上

详细

同上

重要级别

 

 

1.3 BC: Impossible cast

 

项目

内容

BugID

BC_IMPOSSIBLE_CAST

错误范式

Object obj = new Object();

Vector list = (Vector)obj;

正确范式

 

描述

必然会导致类型转换异常( ClassCastException )的表达式

详细

导致该错误的几种情况:

<!-- [if !supportLists]-->1.  <!-- [endif]-->无公共基类类型进行显示类型转换

<!-- [if !supportLists]-->2.  <!-- [endif]-->纯基类型向派生类显示类型转换

<!-- [if !supportLists]-->3.  <!-- [endif]-->继承链中非公共节点间进行显示类型转换

 

重要级别

 

 

1.4 BC: instanceof will always return false

 

项目

内容

BugID

BC_IMPOSSIBLE_INSTANCEOF

错误范式

public boolean isBusy()

{

        return false;

}

正确范式

 

描述

某个方法始终返回 false

详细

如果有方法始终返回 false ,那么就要考虑到是不是编码的时候有所遗漏或者会导致逻辑错误,需要谨慎对待。

重要级别

 

 

 

1.5 BIT: Incompatible bit masks

 

项目

内容

BugID

BIT_AND

错误范式

public static final int M_SHOW_WINDOW = 0x01;

public static final int M_WINDOW_VISIBLE = 0x11;

 

public boolean isVisible(int mask)

{

       

        if ((mask & M_SHOW_WINDOW) == M_WINDOW_VISIBLE)

        {

                return true;

        }

        else

        {

                return false;

        }

}

正确范式

public static final int M_SHOW_WINDOW = 0x01;

public static final int M_WINDOW_VISIBLE = 0x11;

 

public boolean isVisible(int mask)

{

       

        if ((mask & M_SHOW_WINDOW) == M_SHOW_WINDOW)

        {

                return true;

        }

        else

        {

                return false;

        }

}

描述

不起作用的掩码

详细

当掩码值设置不合理或判断方式错误时会导致掩码值无论为什么都无法满足程序分支遍历要求,可能是设计或编码问题导致,请确认程序逻辑是否正确。

双目“ & ”运算符表达式中包含常量,则这个表达式的值必然小于等于这个常量,如果比较的值为一个大于该常量的另一个常量,则该条件永远不会满足。

重要级别

 

 

1.6 BIT: Incompatible bit masks

 

项目

内容

BugID

BIT_AND_ZZ

错误范式

public static final int M_SHOW_WINDOW = 0x0;

 

public boolean isVisible(int mask)

{

       

        if ((mask & M_SHOW_WINDOW) == M_WINDOW_VISIBLE)

        {

                return true;

        }

        else

        {

                return false;

        }

}

正确范式

public static final int M_SHOW_WINDOW = 0x01;

 

public boolean isVisible(int mask)

{

       

        if ((mask & M_SHOW_WINDOW) == M_WINDOW_VISIBLE)

        {

                return true;

        }

        else

        {

                return false;

        }

}

描述

不起作用的掩码

详细

当掩码值设置不合理或判断方式错误时会导致掩码值无论为什么都无法满足程序分支遍历要求,可能是设计或编码问题导致,请确认程序逻辑是否正确。

0 不能作为功能掩码,否则表达式 (mask & 0) ==0) 始终为真,功能掩码失效。

重要级别

 

 

 

1.7 BIT: Incompatible bit masks

 

项目

内容

BugID

BIT_IOR

错误范式

public static final int M_SHOW_WINDOW = 0x11;

public static final int M_WINDOW_VISIBLE = 0x01;

 

public boolean isVisible(int mask)

{

       

        if ((mask | M_SHOW_WINDOW) == M_WINDOW_VISIBLE)

        {

                return true;

        }

        else

        {

                return false;

        }

}

正确范式

public static final int M_SHOW_WINDOW = 0x01;

public static final int M_WINDOW_VISIBLE = 0x11;

 

public boolean isVisible(int mask)

{

       

        if ((mask | M_SHOW_WINDOW) == M_WINDOW_VISIBLE)

        {

                return true;

        }

        else

        {

                return false;

        }

}

描述

不起作用的掩码

详细

当掩码值设置不合理或判断方式错误时会导致掩码值无论为什么都无法满足程序分支遍历要求,可能是设计或编码问题导致,请确认程序逻辑是否正确。

双目“ | ”运算符表达式中包含常量,则这个表达式的值必然大于等于这个常量,如果比较的值为一个小于该常量的另一个常量,则该条件永远不会满足。

重要级别

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论
5 楼 donsun 2012-03-23  
refar 写道
怎么没了?作者写symbian没饭吃所以写不下去了?

哈哈,写Symbian已经是历史了,现在改写Android了:)
4 楼 donsun 2012-03-23  
哈哈,对不住大家,iteye粘贴表格非常吃力。所以内有耐性就没有贴完。因为都是原创,写起来挺费劲的。
3 楼 蛤蟆仙人 2012-02-01  
详细点的吧 资料太难找
2 楼 baihongsheng 2011-05-24  
Method checks to see if result of String.indexOf is positive

给详细谢谢呗
1 楼 refar 2011-03-28  
怎么没了?作者写symbian没饭吃所以写不下去了?

相关推荐

    checkstyle+pmd+findbugs插件

    StatsCheckstyle.jar可能就是Checkstyle的定制版或者增强版,提供特定的统计分析功能。 PMD则是另一种静态代码分析工具,它的重点在于检测代码中的潜在问题和不良编程习惯。PMD可以找出未使用的局部变量、过长的...

    Idea代码走查工具FindBus使用以及缺陷分析(含插件)

    FindBugs是一个静态分析工具,用于在Java程序中发现可能存在的bug。它通过检查类或者JAR文件,将字节码与一组缺陷模式进行对比以发现可能的问题。FindBugs不注重代码风格和格式,而是专注于检测真正的bug及潜在的...

    Jenkins集成Java 静态代码分析工具调研和引入

    根据统计数据,30%至70%的代码逻辑设计和编码缺陷可以通过静态代码分析来发现并修复。 #### 静态代码分析工具的优势 使用静态代码分析工具的优势在于能够自动执行静态代码分析,快速定位代码中的隐藏错误和缺陷。...

    计算机测试PPT学习教案.pptx

    有许多专门的测试工具被广泛应用,如Stanford大学的Metal用于C/C++,马里兰大学的FindBugs用于Java,以及PMD、Klocwork、CodeSonar、Coverity Prevent等,这些都是针对不同编程语言的静态代码分析工具,用于检测潜在...

    Android软件测试技术分析.pdf

    Findbugs 是一款典型的静态测试工具,可以帮助 Android 程序员在不运行代码的情况下查找代码缺陷,并在检测完毕后生成一份详细的报告,统计代码中的高优先级报警和低优先级报警,对所有报警进行归类,并进行详细...

    SonarQube配置与使用教程V11

    4. **缺乏代码标准**:通过集成工具如 PMD、CheckStyle 和 Findbugs,SonarQube 可以检查代码是否遵循预设的编码规范,提升代码一致性。 5. **注释不足或过多**:适量的注释有助于提高代码可读性,但过多的注释可能...

    代码覆盖率eclipse插件

    代码覆盖率通常包括行覆盖率、分支覆盖率、条件覆盖率等多种类型。行覆盖率是最基础的,表示被执行的代码行数占总代码行数的比例。分支覆盖率则关注条件语句(如if、switch)中的每个分支是否都被执行到。EClemma...

    创业公司移动测试体系,非常详细的移动测试点

    - **测试报告生成**:通过测试工具自动生成详尽的测试报告,包括覆盖率统计、缺陷列表等。 #### 第三方测试服务 除了内部测试外,还可以借助第三方测试服务来获得更广泛的测试覆盖,例如: - **Testin**:提供...

    sonarqube jenkins svn maven代码质量检查.pdf

    2. 潜在的缺陷:使用同样的规则检测工具来识别潜在的代码缺陷,帮助开发者早期发现问题。 3. 糟糕的复杂度分布:SonarQube分析代码的复杂度分布,如过高的文件、类或方法复杂度可能会导致维护困难。 4. 重复代码:...

    jacoco-demo:java demo代码,主要提供 ①jacoco进行对java代码扫描覆盖率统计②sonar进行对java代码漏洞扫描

    它不仅可以进行静态代码分析,检测潜在的代码缺陷、漏洞和坏味道,还可以追踪代码质量趋势,提供改善建议。SonarQube可以与JaCoCo集成,接收其提供的覆盖率报告,进一步丰富代码质量评估。 【sonar进行对java代码...

    Maven 常用插件的详细整理

    Maven 中的 FireBug 检查插件是通过 findbugs-maven-plugin 实现的,该插件提供了对 Java 代码的 FireBug 检查功能,能够检测出代码中的 bug 和缺陷。通过该插件,开发者可以对代码进行 FireBug 检查,提高代码的...

Global site tag (gtag.js) - Google Analytics