FindBugs在项目中的应用
目录
1 FINDBUGS 是什么?
2 使用FINDBUGS的意义
4 BUGS示例
4.1 检测器:DC_DOUBLECHECK
4.2 检测器:DE_MIGHT_IGNORE
4.3 检测器:找出 HASH EQUALS 不匹配
4.4 检测器:NULL 指针对 NULL 的解引用(DEREFERENCE)和冗余比较
5 FINDBUGS安装与运行
6 参考資料
1 FindBugs 是什么?
FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。在编译期预测出运行期代码缺陷。
2 使用FindBugs的意义
FindBugs承诺无需开发人员费劲就能找出代码中已有的缺陷。当然,如果有多年的编写经验,就会知道这些承诺并不是一定能兑现。尽管如此,好的静态分析工具仍然是工具箱中的无价之宝。
FindBugs所能主要包括:
- 指出隐患代码
- 纠正错误逻辑
- 纠正不良风格
- 提高程序性能
代码质量工具的一个问题是它们容易为开发人员提供大量但并非真正问题的问题——即 伪问题(false positives)。出现伪问题时,开发人员要学会忽略工具的输出或者放弃它。FindBugs 的设计者 David Hovemeyer 和 William Pugh 注意到了这个问题,并努力减少他们所报告的伪问题数量。与其他静态分析工具不同,FindBugs 不注重样式或者格式,它试图只寻找真正的缺陷或者潜在的性能问题。
3 执行规则
略
4 Bugs示例
4.1 检测器:DC_DOUBLECHECK
//DC_DOUBLECHECK
class Foo {
private Helper helper = null;
public Helper getHelper() {
if (helper == null)
helper = new Helper();
return helper;
}
// other functions and members...
}
//DC_DOUBLECHECK
class Foo {
private Helper helper = null;
public synchronized Helper getHelper() {
if (helper == null)
helper = new Helper();
return helper;
}
// other functions and members...
}
4.2 检测器:DE_MIGHT_IGNORE
// DE_MIGHT_IGNORE
jp.co.softbrain.stc.document.download.DBToFile.downLoadFile
try{
ServletOutputStream out = resp.getOutputStream();
out.println(e.toString());
out.flush();
out.close();
throw e;
} catch (Exception ee) {}
4.3 检测器:找出 hash equals 不匹配
这个检测器寻找与 equals() 和 hashCode() 的实现相关的几个问题。这两个方法非常重要,因为几乎所有基于集合的类—— List、Map、Set 等都调用它们。一般来说,这个检测器寻找两种不同类型的问题——当一个类:重写对象的 equals() 方法,但是没有重写它的 hashCode 方法,或者相反的情况时。
1 String b= "bob";
2 b.replace('b', 'p');
3 if(b.equals("pop"))
这个错误很常见。在第 2 行,程序员认为他已经用 p 替换了字符串中的所有 b。确实是这样,但是他忘记了字符串是不可变的。所有这类方法都返回一个新字符串,而从来不会改变消息的接收者。
4.4 检测器:Null 指针对 null 的解引用(dereference)和冗余比较
这个检测器查找两类问题。它查找代码路径将会或者可能造成 null 指针异常的情况,它还查找对 null 的冗余比较的情况。例如,如果两个比较值都为 null,那么它们就是冗余的并可能表明代码错误。FindBugs 在可以确定一个值为 null 而另一个值不为 null 时,检测类似的错误,如清单 2 所示:
1 Person person = aMap.get("bob");
2 if (person != null) {
3 person.updateAccessTime();
4 }
5 String name = person.getName();
5 FindBugs安装
名称
|
备注
|
Findbugs |
http://prdownloads.sourceforge.net/findbugs/findbugs-1.3.9.zip?download |
|
|
6 参考資料
[1] FindBugs - Find Bugs in Java Programs(original site)
http://findbugs.sourceforge.net/
[2] FindBugs Pattern説明
http://www.limy.org/program/java/findbug_patterns.html
[3] FindBugs手册(日語)
http://www.simeji.com/findbugs/doc/manual_ja/
分享到:
相关推荐
我们用它来检查源代码中出现的伪问题,以期尽可能在项目的初始阶段将代码问题解决。本文主要介绍Findbugs的eclipse插件的应用。 对应的版本是:Findbugs (0.0.16);eclipse (3.1) <br>概要 FindBugs 是一个...
Lombok项目是一个Java库,它会自动插入您的编辑器和构建工具中,从而使您的Java更加生动有趣。Compose是用于定义和运行多容器Docker应用程序的工具。 Checkstyle是一种开发工具,可帮助程序员编写符合编码标准的Java...
图 1 显示了分析一个匿名项目的结果(为防止可怕的犯罪,这里不给出它的名字): 在FindBugs的GUI中,需要先选择待扫描的.class文件(FindBugs其实就是对编译后的class进行扫描,藉以发现一些隐藏的bug。)。如果你...
Android Gradle Java多模块模板 这演示了在具有Android应用程序模块,Android库模块和Java模块的多模块构建中运行源分析工具(PMD,Findbugs,Checkstyle,Lint和Jacoco)。建立和运行该项目使用和Android Build构建...
findbugs-plugin.zip,用于j2ee开发和大型项目的工作应用程序findbugs插件seta findbugs插件
Gradle静态分析插件 Gradle插件可在不同的Android,Java或Kotlin项目中轻松应用相同的静态分析工具设置。 支持因此使用此插件时,构建速度的开销为零!描述Gradle通过一组内置插件支持许多流行的静态分析...
这些项目还可以用于通过FSB测试FindBugs。 其他易受攻击的Java应用程序 这是出于脆弱目的而构建的项目列表。 这些可用于培训或演示目的。 :warning_selector: 确保安全部署它们。 运行以下任何应用程序都可能使您...
本地配置文件,每个Module 生成的iml 文件,但是我们每次add,commit 都会不小心把它们添加上去,而gitignore 就是解决这种痛点的,如果你不想提交的文件,就可以在创建项目的时候将这个文件中添加即可,将一些通用...
针对部署在 Google App Engine 上的应用进行集成测试 JMeter 性能测试 使用 Emma 的代码覆盖率 本地构建和测试的设置 在运行 Maven 脚本之前,您必须设置 GAE 项目 ID 和版本。 复制gae.properties.example文件并将...
带有Spring MVC的RESTful API 该项目是使用Spring ... 应用程序运行后,您可以转到File > Open然后通常在$ {project_root} /build/reports/spotbugs/main.xml内选择findbugs报告文件(.xml)。可用端点公司( /companie
一个未命名为Speedster的... GUI默认情况下在以下位置打开: 如何运行测试: mvn软件包将运行所有JUnit测试。 / Findbugs,您实在太虚弱了\为此类工作而努力。 / \ 0__0 \ (oo)\_______ (__)\ )e ||\____/| ||
样品Android应用程序,我们在使用作为新的Android项目的参考。 它演示了我们在为Android平台开发时使用的架构,工具和指南( ) 最佳做法参考: 库和工具包括: 支持库 RecyclerViews和CardViews 和 活动巴士 使用...
Find Security Bugs是用于Java Web应用程序安全审核的插件。 网址: : 主要开发商 来自 来自 杰出贡献 注射污染分析的重大改进和重构。 创建用于硬编码密码和加密密钥的检测器。 与污点分析相关的改进和错误...
项目截图 更新日志 V1.0.0 初步完成整个App的开发。 V1.1.0 优化gradle配置文件结构 优化冷启动速度 优化RxJava生命周期管理 修正错误 添加retrolambda依赖 添加Checksytle,Findbugs,PMD和Android Lint等代码检测...
个最佳分数(被破坏的行数)保存在一个文件中,以便能够持久化,从而能够后验显示。 一个简单的命令行界面是可以接受的并且足够了。 如果您愿意,也可以使用图形库。 将非常重视代码的质量、对象设计和具有明确合同...
个最佳分数(被破坏的行数)保存在一个文件中,以便能够持久化,从而能够后验显示。 一个简单的命令行界面是可以接受的并且足够了。 如果您愿意,也可以使用图形库。 将非常重视代码的质量、对象设计和具有明确合同...
开箱即用,只需应用插件,您将获得: 改善了构建性能。 Spotbug和PMD将忽略对自动生成的Android文件( R.class和BuildConfig.class )的更改 Android Lint任务已重新配置为检测最新时间并缓存结果 更好的PMD和...