hyddd 原创,转载请说明 ! <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

   FindBugs 是一个专门分析 JAVA 代码问题的静态代码扫描工具,它是由一位马里兰大学的博士写的,官方网站是: http://findbugs.sourceforge.net/index.html ,里面有 FindBugs 工具的下载,并且也包含了那位博士写的关于静态代码分析引擎的一些论文,不过偶还没看。 FindBugs 可以发现的问题包括:多线程竞争问题,性能问题,安全问题,代码规范 ...... 这些下面我都会详细介绍 :> ,如果想了解更多关于其他语言的静态代码扫描工具信息,可以参考《 [hyddd安全性测试笔记2]淡静态代码分析工具 》。

.FindBugs 的使用

  先说说 FindBugs 的使用, FindBugs 它提供两种工具形式,一种是界面形式的工具,如下图:

   <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

  另外一种是以 Eclipse 插件的形式提供的:

  

  个人比较喜欢插件的形式,方便~!

  下面简单介绍 FindBugs 插件的使用:

   1. 右键项目 Pop Menu >Find Bugs >Find Bugs ,如图:

  

   2. FindBugs 插件的 3 个功能 WorkSpace 导出,如图:

  

   (1). Bug Explorer :这里显示的是用 FindBugs 对这个项目扫描的结果。现在只扫出了一个类型的 BUG ,同时这个类型的 BUG 数量为 1( 见图中括号 ) 。继续打开 [DLS]Dead store to local variable ,选择其中一项,右键单击,选择 Pop Menu 中的 “Show Bug Details” ,我们便会跳转到 Bug Details 这个 WorkSpace

  

   (2).Bug Details :这里是对 BUG 问题的描述,包括: Bug 类别及程度, Bug 的定位,对 Bug 的解释。

  

  这里这个 Bug 类别是 Dodgy ,程度是中等;双击下面会自动定位 BUG 的位置;最下面是这个 BUG 的解释,可以根据里面的提示去修改代码 :>

   (3).Bug User Annotations :记录一些自己添加的评注。

.FindBugs Bug 类型及实例代码:

   FindBugs BUG 的解释在官网有详细的说明: http://findbugs.sourceforge.net/bugDescriptions.html#IS2_INCONSISTENT_SYNC 。虽然有说明,但说明一般比较简短,而且没有 Demo 代码,有时候还真没明白它说什么意思 :< 所以在这里我打算整理一下之前看过的资料,把问题和解决方案记录下来:

Bad practice :

[Hight]

[Medium]

[M B DE] Method might ignore exception

Correctness :

[Hight]

[H C EC] equals() used to compare array and nonarray

[Medium]

[M B Eq] Class defines compareTo(...) and uses Object.equals()

Experimental :

[Medium]

Internationalization :

......

Malicious code vulnerability :

[Medium]

Multithreaded correctness :

[Medium]

[M M IS] Inconsistent synchronization 追加说明

Performance :

[Medium]

Security :

[Medium]

[M S XSS] Servlet reflected cross site scripting vulnerability

Dodgy :   

[Medium]

[M D ICAST] Result of integer multiplication cast to long

.......

-----------------------------------------------------------------

. 参考文档

1.http://blog.csdn.net/axzywan/archive/2008/11/16/3312009.aspx

2.http://www.cnitblog.com/weitom1982/archive/2006/03/31/8367.html

3.http://www.ibm.com/developerworks/cn/java/j-jtp06294/

4.http://leewinq.javaeye.com/blog/283813