`

【转】Eclipse插件开发之FindBugs插件

 
阅读更多

Findbugs是一个在java程序中查找bug的程序,它查找bug模式的实例,也就是可能出错的代码实例,注意Findbugs是检查java字节码,也就是*.class文件。

其实准确的说,它是寻找代码缺陷的,很多我们写的不好的地方,可以优化的地方,它都能检查出来。例如:未关闭的数据库连接,缺少必要的null check,多余的 null check,多余的if后置条件,相同的条件分支,重复的代码块,错误的使用了"==",建议使用StringBuffer代替字符串连加等等。而且我们还可以自己配置检查规则(做哪些检查,不做哪些检查),也可以自己来实现独有的校验规则(用户自定义特定的bug模式需要继承它的接口,编写自己的校验类,属于高级技巧)。

一、安装方法

详情见:http://findbugs.cs.umd.edu/eclipse

If you have previously installed a version of the FindBugs plugin prior to mid-May, 2006, then you should remove it first. Simply remove the de.tobject.findbugs_0.0.n directory from Eclipse's plugins directory.

To install the FindBugs plugin:

1. In Eclipse, click on Help -> Software Update -> Find and Install...

2. Choose the Search for new features to install option, and click Next.

3. Click New Remote Site.

4. Enter the following:

* Name: FindBugs update site

* URL: one of the following (note: no final slash on the url)

o http://findbugs.cs.umd.edu/eclipse for official releases

o http://findbugs.cs.umd.edu/eclipse-candidate for candidate releases and official releases

o http://findbugs.cs.umd.edu/eclipse-daily for all releases, inculding developmental ones and click OK.

5. "FindBugs update site" should appear under Sites to include in search.

Click the checkbox next to it to select it, and click Finish.

6. You should see FindBugs Feature under Select features to install.

(You may have to click on one or two triangles to make it visible in the tree.)

Select the checkbox next to it and click next.

7. Select the I accept option to accept the license and click Next.

8. Make sure the location is correct where you're installing it. The default (your workspace) should be fine. Click Finish.

9. The plugin is not digitally signed. Go ahead and install it anyway.

二、使用方法

本文主要介绍在Eclipse中使用的情况

FindBugs是一个可以在Java程序中发现Bugs的程序。

它是专门用来寻找处于“Bug Patterns”列表中的代码的。

Bug Patterns指很有可能是错误的代码的实例。

打开Bug Details视图

Windows => Show View => Other… => FindBugs => BugDetails

Bug Details视图

 

在Package Explorer或Navigator视图中,选中你的Java项目,右键,可以看到“Find Bugs”菜单项,子菜单项里有“Find Bugs”和“Clear Bug Markers”两项内容,如下图所示:

 

我们建立一个简单的测试文件Test.java 内容如下:

 

public class Test 

{

private String[] name;

public String[] getName()

{

return name;

}

 

public void setName(String[] name)

{

this.name = name;

}

}

 

我们点中“Find Bugs”,运行时会出现如下进度框:

运行结束后可以在Problems中看到增加了如下的警告信息内容

FindBugs运行后的警告信息内容不仅在Problems视图中显示,而且将标记在源代码标记框中,在源代码编辑器中我们可以看到警告标识,如下图:

警告标识

 

当光标指向你的警告信息的代码上面时,就会有相应的错误提示信息,与Eclipse本身的错误或警告信息提示类似。

选中Problems视图里出现的相应问题,就会在代码编辑器里切换到相应的代码上去,方便根据相应的提示信息进行代码的修改。

代码编辑器

 

 

在Problems视图里,选中相应的问题条目,右键,在弹出的菜单中,可以看到“Show Bug Details”,如下图所示:

Problems视图里

 

点中它,会切换到Bug Details视图上去,显示更加详细的提示信息。

当然,在代码编辑窗口中,点击带有警告提示信息的图标时,也会自动切换到Bud Details窗口去,查看详细的警告信息,如下图所示。

警告信息

 

根据这里详细的信息,你可以得到FindBugs为什么会对你的代码报警告信息,及相应的处理办法,根据它的提示,你可以快速方便地进行代码修改。

详细的信息

 

 

根据提示,我们将代码修改成如下,再运行就不会报有警告信息了。

 

public class Test 

{

private String[] name;

public String[] getName()

{

String[] temp = name;

return temp;

}

 

public void setName(String[] name)

{

String[] temp = name;

this.name = temp;

}

}

配置FindBugs

选择你的项目,右键 => Properties => FindBugs =>

查看更多精彩图片

 

可以配置的信息包括如上图所示的四个选项的相关设置:

1. Run FindBugs Automatically开关

当此项选中后,FindBugs将会在你修改Java类时自动运行,如你设置了Eclipse自动编译开关后,当你修改完Java文件保存,FindBugs就会运行,并将相应的信息显示出来。

当此项没有选中,你只能每次在需要的时候自己去运行FindBugs来检查你的代码。

2. Minimum priority to report选择项

这个选择项是让你选择哪个级别的信息进行显示,有Low、Medium、High三个选择项可以选择,很类似于Log4J的级别设置啦。 比如:

你选择了High选择项,那么只有是High级别的提示信息才会被显示。

你选择了Medium选择项,那么只有是Medium和High级别的提示信息才会被显示。

你选择了Low选择项,那么所有级别的提示信息都会被显示。

3. Enable bug categories选择项

在这里是一些显示Bug分类的选择:

Correctness关于代码正确性相关方面的

Performance关于代码性能相关方面的

Internationalization关于代码国际化相关方面的

Multithreaded correctness关于代码多线程正确性相关方面的

Style关于代码样式相关方面的

Malicious code vulnerability关于恶意破坏代码相关方面的

比如:如果你把Style的检查框去掉不选择中它,那么与Style分类相关的警告信息就不会显示了。其它的类似。

4. Select bug patterns to check for选择项

在这里你可以选择所要进行检查的相关的Bug Pattern条目

可以从Bug codes、Detector name、Detector description中看到相应的是要检查哪些方面的内容,你可以根据需要选择或去掉相应的 检查条件。

 

三、详细说明

Findbugs是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。Findbugs自带检测器,其中有60余种Bad practice,80余种Correctness,1种 Internationalization,12种Malicious code vulnerability,27种Multithreaded correctness,23种Performance,43种Dodgy。

Bad practice 坏的实践

一些不好的实践,下面列举几个:

HE 类定义了equals(),却没有hashCode();或类定义了equals(),却使用

Object.hashCode();或类定义了hashCode(),却没有equals();或类定义了hashCode(),却使用Object.equals();类继承了equals(),却使用Object.hashCode()。

SQLStatement 的execute方法调用了非常量的字符串;或Prepared Statement是由一个非常量的字符串产生。

DE 方法终止或不处理异常,一般情况下,异常应该被处理或报告,或被方法抛出。

 

Correctness 一般的正确性问题

可能导致错误的代码,下面列举几个:

NP 空指针被引用;在方法的异常路径里,空指针被引用;方法没有检查参数是否null;null值产生并被引用;null值产生并在方法的异常路径被引用;传给方法一个声明为@NonNull的null参数;方法的返回值声明为@NonNull实际是null。

Nm 类定义了hashcode()方法,但实际上并未覆盖父类Object的hashCode();类定义了tostring()方法,但实际上并未覆盖父类Object的toString();很明显的方法和构造器混淆;方法名容易混淆。

SQL方法尝试访问一个Prepared Statement的0索引;方法尝试访问一个ResultSet的0索引。

UwF所有的write都把属性置成null,这样所有的读取都是null,这样这个属性是否有必要存在;或属性从没有被write。

 

Internationalization 国际化

当对字符串使用upper或lowercase方法,如果是国际的字符串,可能会不恰当的转换。

Malicious code vulnerability 可能受到的恶意攻击

如果代码公开,可能受到恶意攻击的代码,下面列举几个:

FI 一个类的finalize()应该是protected,而不是public的。

MS属性是可变的数组;属性是可变的Hashtable;属性应该是package protected的。

Multithreaded correctness 多线程的正确性

多线程编程时,可能导致错误的代码,下面列举几个:

ESync空的同步块,很难被正确使用。

MWN错误使用notify(),可能导致IllegalMonitorStateException异常;或错误的

使用wait()。

No 使用notify()而不是notifyAll(),只是唤醒一个线程而不是所有等待的线程。

SC 构造器调用了Thread.start(),当该类被继承可能会导致错误。

 

Performance 性能问题

可能导致性能不佳的代码,下面列举几个:

DM方法调用了低效的Boolean的构造器,而应该用Boolean.valueOf(…);用类似

Integer.toString(1) 代替new Integer(1).toString();方法调用了低效的float的构造器,应该用静态的valueOf方法。

SIC如果一个内部类想在更广泛的地方被引用,它应该声明为static。

SS 如果一个实例属性不被读取,考虑声明为static。

UrF如果一个属性从没有被read,考虑从类中去掉。

UuF如果一个属性从没有被使用,考虑从类中去掉。

 

Dodgy 危险的

具有潜在危险的代码,可能运行期产生错误,下面列举几个:

CI 类声明为final但声明了protected的属性。

DLS对一个本地变量赋值,但却没有读取该本地变量;本地变量赋值成null,却没有读取该本地变量。

ICAST 整型数字相乘结果转化为长整型数字,应该将整型先转化为长整型数字再相乘。

INT没必要的整型数字比较,如X <= Integer.MAX_VALUE。

NP 对readline()的直接引用,而没有判断是否null;对方法调用的直接引用,而方法可能返回null。

REC直接捕获Exception,而实际上可能是RuntimeException。

ST 从实例方法里直接修改类变量,即static属性。

 

总结

此插件的功能很不错,可以帮助我们提升Java代码的编写能力,写出更加安全可靠的代码。建议使用或加在Ant里进行持续构建。

现在,你可以马上拿出你已经开发的一个项目,检查一下你的代码有没有问题了。

分享到:
评论

相关推荐

    findbugs eclipse插件

    **findbugs eclipse插件** 是一个非常重要的工具,主要用于帮助开发者在Eclipse集成开发环境中发现潜在的代码问题和错误。FindBugs是一款静态代码分析工具,它可以分析Java代码,找出可能存在的bug、不良编程习惯...

    eclipse插件findbugs

    总的来说,Eclipse 插件 FindBugs 是一个强大的代码质量检测工具,它可以帮助开发人员在编码阶段就发现潜在的问题,从而提高软件的质量和可靠性。通过深入学习和使用 FindBugs,开发者可以更好地理解和优化他们的...

    eclipse插件findBugs

    "Eclipse插件FindBugs"是一个用于静态代码分析的强大工具,旨在帮助开发者在运行程序之前发现潜在的bug和代码质量问题。Eclipse是一个广泛使用的Java集成开发环境(IDE),而FindBugs插件则为其增添了一个重要的功能...

    findbugs 最新eclipse插件

    总的来说,使用Findbugs最新Eclipse插件能够提升代码质量,降低软件缺陷,提高开发效率,尤其对于大型企业如华为,这类工具的使用是确保软件工程规范性和稳定性的重要手段。通过深入理解和充分利用这个插件,开发者...

    findbugs应用eclipse的插件

    findbugs 代码检查 eclipse插件 3.0.0版本

    Eclipse FindBugs插件安装指南

    通过集成 FindBugs 插件,Eclipse 可以在开发过程中自动检测 Java 代码中的潜在错误,帮助开发者提高代码质量和程序稳定性。正确地安装和配置 FindBugs 插件不仅能够提高开发效率,还能减少后期调试的成本。此外,...

    eclipse中findbugs插件

    FindBugs插件是将FindBugs工具集成到Eclipse中的一个扩展,使得用户在开发过程中可以方便地检查代码问题。 安装FindBugs插件的过程相对简单。首先,你需要下载`edu.umd.cs.findbugs.plugin.eclipse_3.0.1.20150306-...

    eclipse findbugs 插件

    总的来说,Eclipse FindBugs插件是Java开发不可或缺的工具,它通过静态分析提供有价值的反馈,帮助开发者遵循最佳实践,避免常见的编程陷阱。通过正确安装和配置,开发者可以充分利用这个插件提升开发效率和软件质量...

    详解eclipse插件findbugs新规则的开发过程

    《详解Eclipse插件FindBugs新规则的开发过程》 在软件开发中,代码质量是衡量项目健康度的重要指标之一。FindBugs是一款强大的静态代码分析工具,它能够检测Java代码中的潜在错误,帮助开发者在运行时之前发现并...

    checkstyle和findBugs插件 eclipse插件

    本文将详细介绍两个重要的Eclipse插件:Checkstyle和FindBugs。 1. Checkstyle Checkstyle是一款静态代码分析工具,用于检测Java源代码中的潜在问题和不符合编码规范的地方。通过定义一套检查规则,Checkstyle可以...

    eclipse插件 findBugs 最新版

    **Eclipse插件FindBugs详解** FindBugs是一款强大的静态代码分析工具,专为Java开发者设计,用于在代码执行前检测潜在的错误和不良编程习惯。它通过深入解析字节码来查找可能的问题,而无需实际运行程序。Eclipse...

    eclipse插件findbugs(两个版本)

    FindBugs插件是Eclipse中的一个扩展,它可以集成到开发环境中,实时分析项目源代码,找出可能存在的错误、漏洞和性能问题。这些错误可能包括空指针异常、资源泄露、并发问题等。通过使用FindBugs,开发者可以在编写...

    findbugs 代码检查 eclipse插件 3.0.0版本

    http://sourceforge.jp/projects/sfnet_findbugs/downloads/findbugs%20eclipse%20plugin/3.0.0/edu.umd.cs.findbugs.plugin.eclipse_3.0.0.20140629-84d758f.zip/ 安装方法:直接解压后放到eclipse/plugin目录下...

    android eclipse 插件 findbugs 3.0 linux

    **Android与Eclipse插件FindBugs 3.0在Linux环境中的应用** FindBugs是一款强大的静态代码分析工具,专用于检测Java程序中的潜在错误和不良编程实践。在Android开发环境中,它作为Eclipse插件,能为开发者提供一个...

    eclipse插件FindBugs错误分析说明

    Eclipse插件FindBugs是一个静态代码分析工具,它通过扫描Java代码,检测程序中的潜在bug、代码异味以及不符合编码规范的地方。以下是一些常见FindBugs错误的解释和修改建议。 1. EC_UNRELATED_TYPESBug 错误描述:...

    Eclipse插件_FindBugs

    安装方法: 下载文件后,解压edu.umd.cs.findbugs.plugin.eclipse_1.3.5.20080913内文件至Eclipse安装目录下的plugins文件夹,重启Eclipse。

    eclipse代码质量检测插件findbugs1.3.9

    这个文件是一个Eclipse插件的更新站点文件,包含了FindBugs的所有组件。 2. **在Eclipse中安装** - 打开Eclipse,进入“Help” -&gt; “Install New Software”。 - 在“Work with”下拉框中选择“Add”,输入插件的...

Global site tag (gtag.js) - Google Analytics