推荐工具Findbugs ,基于eclipse插件的:
Findbugs version 1.3.9, released on 16:39:49 EDT, 21 August, 2009. Download links for all FindBugs versions and files are available on the sourceforge download page.
下载安装:
FindBugs tool (standard version with command line, ant, and Swing interfaces)
findbugs-1.3.9.tar.gz
findbugs-1.3.9.zip
findbugs-1.3.9-source.zip
Eclipse plugin for FindBugs version 1.3.9.20090821 (requires Eclipse 3.3 or later)
edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090821.zip
eclipsePlugin-1.3.9.20090821-source.zip
在线安装:
The Eclipse plugin may also be obtained from one of the FindBugs Eclipse plugin update sites:
http://findbugs.cs.umd.edu/eclipse update site for official releases
http://findbugs.cs.umd.edu/eclipse-candidate update site for candidate releases and official releases
http://findbugs.cs.umd.edu/eclipse-daily update site for all releases, including developmental ones
简单介绍
引用
简介:findbugs是一个在java程序中查找bug的程序,它查找bug模式的实例,也就是可能出错的代码实例,注意findbugs是检查java字节码,也就是*.class文件。
自带检测器的介绍:findbugs自带60余种Bad practice,80余种Correntness,1种Internationalization,
12种Malicious code vulnerability,27种Multithreaded correntness,23种Performance,43种Dodgy。
Bad practice坏的实践
一些不好的实践,下面列举几个:
HE:类定义了equals(),却没有hashCode();或类定义了equals(),却使用Object. hashCode();或类定义了hashCode(),却没有equals();或类定义了hashCode(),却使用Object.equals();类继承了equals(),却使用Object.hashCode()。
SQL:Statement的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危险的
具有潜在危险的代码,可能运行期产生错误,下面列举几个:
BC:对抽象集合如List、Set的造型;对具体集合如ArrayList、HashSet的造型;
未检查或无法保证的造型;
CI:类声明为final但声明了protected的属性。
DLS:对一个本地变量赋值,但却没有读取该本地变量;本地变量赋值成null,却没有读取该本地变量。
ICAST:整型数字相乘结果转化为长整型数字,应该将整型先转化为长整型数字再相乘。
INT:没必要的整型数字比较,如X <= Integer.MAX_VALUE。
NP:对readline()的直接引用,而没有判断是否null;对方法调用的直接引用,而方法可能返回null。
REC:直接捕获Exception,而实际上可能时RuntimeException。
ST:从实例方法里直接修改类变量,即static属性。
自定义检测器:findbugs提供了强大的自定义检测器的功能,首先我们应该清楚需要
检查的案例,findbugs的官方文档里并没有详细的介绍如何自定义,那我们只能直接阅读它的源码了,着重阅读BytecodeScanningDetector和ByteCodePatternDetector的子类型,它们可以检测一般类型的问题。Findbugs利用了Byte Code Engineering Library(即BCEL,Apache上的一个开源项目),以实现其检测器,所有的字节码扫描都是基于visitor模式。我们可以参照findbugs自带的检测器的类的源码,去编写一个自定义的检测器代码,编写完后编译成类文件,同时我们还需要提供两个XML文件,Findbugs.xml和message.xml,在Findbugs.xml里指定检测器和实现类,检测器的缩写、类型如快速或慢速,而message文件里则包括了该检测器的描述信息,可能是html的,然后将源文件、类文件和上面两个XML文件打包成jar文件,放在findbugs home的plugin文件夹下,这样我们就可以使用自定义检查器了。
分享到:
相关推荐
### Eclipse FindBugs 插件安装指南 #### 一、引言 在软件开发过程中,确保代码质量至关重要。为了提高代码质量和程序的稳定性,开发者常常借助于静态代码分析工具来帮助发现潜在的问题。FindBugs 正是一款广受...
findbugs2.0.2 eclipse 插件中文版 。 基于 edu.umd.cs.findbugs.plugin.eclipse_2.0.2.20121204 翻译 ,最新版本,火热出炉。 解压开放到 dropins 夹子即可~~~
Eclipse FindBugs是一款强大的静态代码分析工具,它主要用于检测Java代码中的潜在错误和不良编程习惯。这款插件是Eclipse集成开发环境(IDE)的一部分,可以帮助开发者在编写代码阶段就发现并修复问题,从而提高代码...
Eclipse FindBugs插件是Java开发者常用的静态代码分析工具,它能帮助找出代码中潜在的错误和不良实践,从而提高代码质量和可维护性。该插件集成在Eclipse IDE中,通过分析项目的源代码来查找可能的问题,这些问题...
Androidstudio eclipse findbugs插件
findbugs 代码检查 eclipse插件 3.0.0版本
Eclipse插件FindBugs是一个静态代码分析工具,它通过扫描Java代码,检测程序中的潜在bug、代码异味以及不符合编码规范的地方。以下是一些常见FindBugs错误的解释和修改建议。 1. EC_UNRELATED_TYPESBug 错误描述:...
**findbugs eclipse插件** 是一个非常重要的工具,主要用于帮助开发者在Eclipse集成开发环境中发现潜在的代码问题和错误。FindBugs是一款静态代码分析工具,它可以分析Java代码,找出可能存在的bug、不良编程习惯...
在Eclipse中配置FindBugs是一项重要的任务,因为这个工具能帮助开发者发现代码中的潜在问题,提高软件质量。FindBugs是一款静态分析工具,它通过分析Java字节码来查找可能的错误和不良实践,无需运行程序即可进行...
1. **安装与配置**:首先,需要将FindBugs集成到开发环境中,这可以通过Eclipse、IntelliJ IDEA等IDE的插件形式实现,也可以通过命令行工具执行。对于IDE集成,通常只需简单地从市场中下载并安装插件即可。 2. **...
**Eclipse FindBugs 插件详解** Eclipse FindBugs 是一款强大的静态代码分析工具,专为Java开发者设计,用于检测潜在的编程错误和不良实践。它可以在编译时和运行时对代码进行深入分析,帮助提升软件质量和可靠性。...
《Eclipse FindBugs插件详解与应用》 在软件开发过程中,代码质量是至关重要的。为了确保代码的健壮性和可维护性,开发者需要进行严谨的代码审查和错误检测。Eclipse FindBugs插件就是这样一个强大的工具,它能够...
1. **下载FindBugs插件的ZIP文件**:你可以从FindBugs官方网站或者其他可靠的源下载对应版本的ZIP文件,例如“edu.umd.cs.findbugs.plugin.eclipse_3.0.1.20150306”。 2. **解压到Eclipse插件目录**:找到你的...
### 在Eclipse中修改Checkstyle、PMD及FindBugs规则集的方法 #### 一、Checkstyle规则集的修改 **1. 替换Checkstyle规则集** 在Eclipse中更新Checkstyle规则集通常涉及几个步骤: - **备份现有配置**:首先确保...
FindBugs插件是将FindBugs工具集成到Eclipse中的一个扩展,使得用户在开发过程中可以方便地检查代码问题。 安装FindBugs插件的过程相对简单。首先,你需要下载`edu.umd.cs.findbugs.plugin.eclipse_3.0.1.20150306-...
### Eclipse中FindBugs的安装与使用详解 #### 一、FindBugs简介 FindBugs是一款用于检测Java代码潜在缺陷的强大工具。它能够帮助开发者及时发现并修复代码中的问题,提高软件的质量和稳定性。FindBugs支持多种版本...
eclipse findbugs,eclipse findbugs,eclipse findbugs
Eclipse FindBugs插件是Java开发者在Eclipse集成开发环境中广泛使用的一款静态代码分析工具。这款插件的主要目标是帮助开发者在代码运行之前找出潜在的错误和问题,从而提高软件质量并减少后期维护的工作量。它通过...