`
rw8802
  • 浏览: 1163 次
社区版块
存档分类
最新评论

Eclipse 代码检测工具Find bugs使用小结

阅读更多

(转载)

今天代码质量再次强调Java代码提交SVN前要经过findBugs检查,虽然根据菜单我也基本会有findBugs插件,但为了更全面的学习、更高效的利用,我搜索学习了findbugs的用法。

检查原理

Findbugs是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。Findbugs自带检测器,其中有60余种Bad practice,80余种Correctness,1种 Internationalization,12种Malicious code vulnerability,27种Multithreaded correctness,23种Performance,43种Dodgy。我们还可以自己配置检查规则(做哪些检查,不做哪些检查),也可以自己来实现独有的校验规则(用户自定义特定的bug模式需要继承它的接口,编写自己的校验类,属于高级技巧)。

 白盒测试中的静态检查一般是检查编码标准规范,错误列表。编码规范往往团队会根据自己的经验和风格进行设置一些规范。现在很多IDE工具都会在编辑代码的时候实时的提醒是否符合代码风格。错误列表,一般是代码潜在的bug,由于某种代码写法虽然没有语法错误,但是可能存在错误,比如会导致线程死锁。这些都是错误列表应该检查的。静态检查的可操作方式:

 1、代码走查:

  程序员之间可以隔一定的时间抽取代码进行走查。

  走查的时候根据汇总报告,把这些经验汇成列表,作为下次代码走查的依据。

  该方式的特点是,手工、多人讨论、操作简单,但是效率会比较低。

 2、代码扫描

使用软件对我们的代码进行扫描,查找出潜在的问题。现在有许多商业的工具能够进行扫描,比如Parasoft JTest、Software Analyzer、pclint等工具,往往不同的工具会针对不同的语言。当然也有很多开源的工具。在这里java方面主要推荐Findbugs。Findbugs可以在ANT/GUI/ECLIPSE三个环境中运行,同时也可以编写自己的检测器,功能比较完善。我们平时可以收集自己的或者是别人的开发经验,把它做成检测器来完善Findbugs的检测体系。软件扫描的特点是,机器扫描、效率高,但是没不够灵活,扩展比较负责。

Java静态检查工具对比

参考:http://blog.csdn.net/ml5271169588/article/details/6975701

http://www.cnblogs.com/hyddd/archive/2008/12/16/1356310.html

工具

目的

检查项

FindBugs

检查.class

基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug

主要检查bytecode中的bug patterns,如NullPoint空指针检查、没有合理关闭资源、字符串相同判断错(==,而不是equals)等

PMD

检查源文件

检查Java源文件中的潜在问题

主要包括:

空try/catch/finally/switch语句块

未使用的局部变量、参数和private方法

空if/while语句

过于复杂的表达式,如不必要的if语句等

复杂类

CheckStyle

检查源文件

主要关注格式

检查Java源文件是否与代码规范相符

主要包括:

Javadoc注释

命名规范

多余没用的Imports

Size度量,如过长的方法

缺少必要的空格Whitespace

重复代码

使用及配置

摘自:http://developer.51cto.com/art/200906/127165.htm

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

FindBugs是一个可以在Java程序中发现Bugs的程序。它是专门用来寻找处于"Bug Patterns"列表中的代码的。Bug Patterns指很有可能是错误的代码的实例。

打开Bug Details视图Windows => Show View => Other… => FindBugs => BugDetails

在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",如下图所示:

点中它,会切换到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()。

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 危险的

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

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

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

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

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

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

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

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

 

原文地址:http://blog.csdn.net/chenlia/article/details/38295835

分享到:
评论

相关推荐

    eclipse find bugs 插件使用

    ### Eclipse FindBugs 插件使用详解 #### 一、插件安装步骤 **1. 解压文件** 首先,需要解压下载好的`edu.umd.cs.findbugs.plugin.eclipse_2.0.3.20131122-15020.zip`文件。确保解压过程完整无误,所有文件都得以...

    eclipse find bugs插件

    Eclipse FindBugs插件是Java开发者在Eclipse集成开发环境中广泛使用的一款静态代码分析工具。这款插件的主要目标是帮助开发者在代码运行之前找出潜在的错误和问题,从而提高软件质量并减少后期维护的工作量。它通过...

    Find Bugs使用方法

    【Find Bugs 使用方法】 FindBugs 是一款强大的Java代码静态分析工具,旨在帮助开发者提高代码质量和发现潜在的缺陷。通过检查类或JAR文件的字节码,FindBugs 将其与一组预定义的缺陷模式进行对比,从而找出可能...

    find_bugs 工具

    `find_bugs`工具是一款广泛使用的静态代码分析工具,它主要针对Java程序,旨在帮助开发者在编码阶段就发现潜在的错误和不良编程习惯,从而提高软件质量和可维护性。这款工具通过扫描字节码来检测可能存在的问题,而...

    Eclipse-PMD&Findbugs;&Explorer;插件合集

    Eclipse重复检测、代码检测、快速打开文件夹插件,解压后放到eclipse目录下就行了,links里的地址替换成相应本地地址

    bugs_hunter_1.0.2.1

    "Bugs Hunter 1.0.2.1"是一款专为PHP代码审计而设计的工具,旨在帮助开发者和安全专家检测潜在的漏洞,提升代码的安全性。虽然它可能存在一定的误报,但作为辅助手段,其在代码审查过程中的价值不容忽视。 首先,...

    Eclipse集成findBugs步骤.pdf

    6. **使用FindBugs**:选择"Find Bugs"后,Eclipse将分析项目的源代码并显示可能存在的问题。分析结果会在工作台的右侧或底部视图中出现,通常以图标形式显示,形似小虫子,表示潜在的bug。双击这些图标,即可查看...

    Eclipse集成findBugs步骤

    3. **在Eclipse中使用FindBugs** - 重启Eclipse后,打开FindBugs视图。 - 右键点击要检查的工程、包或文件,选择"Find Bugs",然后执行Find Bugs任务。 - 结果会出现在Bug Explorer视图中,按问题类型组织。展开...

    基于SonarQube7.4实现代码规范自动化检测解决方案.docx

    本解决方案使用 SonarQube 7.4 作为核心检测工具,通过 gitlab-ci 和 SonarQube-WebHooks 实现代码规范自动化检测。 主要功能: 1. 代码规范检测:检测代码的可靠性、安全性、可维护性、代码重复率、代码量大小等...

    findbugs_eclipse安装向导

    总结,FindBugs_eclipse插件的安装和使用并不复杂,但其带来的价值是巨大的。通过定期运行FindBugs分析,开发者可以在编码阶段就发现并修复问题,避免在后期测试或生产环境中出现不可预见的错误。因此,熟练掌握并...

    BUGS_1.81.zip

    "BUGS_1.81.zip" 是一个包含BUGS软件1.81版本的压缩文件,这通常意味着它是一个软件发行包,用于分发和安装BUGS的特定更新或版本。BUGS(Bayesian Inference Using Gibbs Sampling)是一款流行的概率编程语言,专门...

    Debug_It!_Find,_Repair,_and_Prevent_Bugs_in_Your_Code

    书中还提到了一些具体的技术细节,比如调试工具的使用、跟踪代码执行和检查变量值,以及如何使用调试器来逐步执行代码并观察其运行时的行为。此外,还提到了如何设置断点来暂停程序的执行,以及如何分析和理解程序的...

    SpotBugs是FindBugs的继任者静态分析的工具用来寻找Java代码中bug

    SpotBugs是一款强大的静态代码分析工具,它是FindBugs项目的接班人,专注于在Java代码中检测潜在的错误和缺陷。静态分析是一种编程实践,它允许开发者在代码执行之前检查程序,无需运行程序就能发现潜在问题。这种...

    Eclipse集成findBugs步骤.doc

    FindBugs是一款强大的静态代码分析工具,它能帮助开发者在代码执行前发现潜在的问题和bug,从而提高代码的质量和稳定性。以下将详细介绍如何在Eclipse环境中集成FindBugs插件。 ### 一、安装FindBugs插件 1. **...

    findbugs(静态代码分析工具)

    1、将下载回来的zip包解压,得到文件夹:edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090821, 将该文件夹拷贝到...3、重启myeclipse,选中项目,右键会出现一个Find Bugs菜单。至此,findbugs插件安装完毕。

    Myeclipse6.5-findBugs插件,及暗转说明

    1, 把下载的压缩包(edu.umd.cs.findbugs....3, 打开eclipse-&gt;window-&gt;Preferences,搜索关键字find bugs,如果能找到配置项,那么表示安装成功。 4,在java文件或者工程上右击,就会看到Find Bugs,点击即可使用。

    POJ1038--Bugs Integrated

    1. 错误检测与修复:可能需要编写程序找出或修复代码中的错误。 2. 数据结构与算法:可能需要利用某种数据结构(如数组、链表、树等)和算法(如排序、搜索等)来处理错误信息。 3. 输入输出处理:根据输入数据,...

Global site tag (gtag.js) - Google Analytics