一、简介
Findbugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。利用这个工具,就可以在不实际运行程序的情况对软件进行分析。它可以帮助改进代码的质量。
Findbugs提供了方便操作的可视化界面,同时也可以作为Eclipse的一个插件来使用,而我们使用得最多的还是作为Eclipse的插件来使用。
二、使用方法
Findbugs可以通过三种方法使用,可以通过Ant工具,通过Ant提供的Swing操作界面和作为Eclipse的一个插件来使用。
1. Ant工具
Ant是一个很好的Java自动执行工具。
Findbugs官方提供了Ant的findbugs操作方法,我们可以通过这样一个build.xml文件来使用findbugs。
<project name="项目名" default="all">
<property name="findbugs.home" value="findbugs解压路径" />
<path id="findbugs.path">
<fileset dir="findbugs解压路径">
<include name="**/*.jar" />
</fileset>
</path>
<taskdef name="findbugs"
classname="edu.umd.cs.findbugs.anttask.FindBugsTask"
classpathref="findbugs.path" />
<!-- 定义findbugs的home,findbugs的task要使用 -->
<target name="findbugs">
<findbugs home="${findbugs.home}"
output="xml:withMessages" outputFile="生成的文件">
<!-- 以上定义findbugs查找的类路径 -->
<auxClasspath path="${findbugs.home}/lib/findbugs-ant.jar" />
<auxClasspath>
<fileset dir="lib"
includes="*.jar" />
</auxClasspath>
<sourcePath path="源文件路径" />
<class location="生成类路径" />
</findbugs>
</target>
</project>
比如:我这里有一个我放在博客上的项目的findbugs的ant操作的build文件。
<project name="Calendar" default="all">
<property name="findbugs.home" value="../../findbugs-1.3.8" />
<path id="findbugs.path">
<fileset dir="../../findbugs-1.3.8">
<include name="**/*.jar" />
</fileset>
</path>
<taskdef name="findbugs"
classname="edu.umd.cs.findbugs.anttask.FindBugsTask"
classpathref="findbugs.path" />
<!-- 定义findbugs的home,findbugs的task要使用 -->
<target name="findbugs">
<mkdir dir="target/findbugs"/>
<findbugs home="${findbugs.home}"
output="xml:withMessages" outputFile="target/findbugs/calendar-fb.xml">
<!-- 以上定义findbugs查找的类路径 -->
<auxClasspath path="${findbugs.home}/lib/findbugs-ant.jar" />
<auxClasspath>
<fileset dir="lib"
includes="*.jar" />
</auxClasspath>
<sourcePath path="src" />
<class location="target/classes" />
</findbugs>
</target>
</project>
设置好Ant的环境后,在命令中使用ant -f build.xml,或者在Eclipse直接运行build.xml文件,运行后生成了一个xml文件,如果你想用Html的格式查看findbugs的结果,可以把output属性设为:html。这样就可以通过Html来查看findbugs的结果了。
2. 提供的Swing工具
Ant操作是专家级的操作,一般对于Java不是很熟悉的人,写build.xml文件。比起Ant来,使用Findbugs提供的Swing工具会使Findbugs的操作更加简单。运行Findbugs解压包中的bin文件夹下的findbugs.bat文件。
Findbugs的Swing工具初始主界面如下:
在分析项目之前,我们必须要新建一个项目来分析,选择文件->新建
显示新建项目的界面如下图:
然后添加要分析的类包和目录(可以选择编译好的类所在的文件夹,也可以选择生成的jar包),再添加辅助类所在的文件夹和源文件所在的文件夹(java文件所在的文件夹)。再点击完成就可以建立一个要分析的项目。
建立项目后,会自动先自动开始解析项目。
解析后界面:
其中左边是缺陷的树结构列表,点击其中一个Bug,可以在右边的界面中,显示Bugs的源文件以及所在的位置。
2.3 Findbugs Eclipse插件
Eclipse的Findbugs插件,可以将Findbugs集成到Eclipse中使用。
2.3.1 Findbugs的Eclipse插件安装方法
1. 在线安装
安装地址:http://findbugs.cs.umd.edu/eclipse
2. 离线安装
下载Findbugs插件,将它放入Eclipse下的plusin文件夹,然后重启Eclipse
2.3.2 Findbugs的Eclipse插件使用
安装了Findbugs插件后。右击点击你要检查的项目选择【Find Bugs】->【Find Bugs】进行检查。
要查看Findbugs检查出了哪些Bug,可以选择Windows菜单->Show View->Bug Explorer,打开Bug Explorer面板。
如果想要查看某个Bug详细的信息,则可以选择Windows菜单->Open Perspective,然后选择FindBugs就可以打开FindBugs的Properties面板,在这个面板里面可以看到最详尽的Bugs信息。
详细介绍
部成员的共享命名用,省得移动后要改动
Link
文件里的绝对路径而费心费力。
直接拷贝过去就可以使用。
即
XYZ.link
文件的内容如是:
path=../PlugInsNew/XYZ
这样,如果你下载了多个插件就可以如法炮制建立多个
Link
文件,想加载哪个
插件就把哪个插件的
Link
文件放到
%ECLIPSE_HOME%\links
的目录中即
可,使用与管理都很方便,建议千万不要放在默认的安装目录中;
如果你的
%ECLIPSE_HOME%
与此不同,请修改
XYZ.link
文件里的路径
删除,关闭
Eclipse
删除
%ECLIPSE_HOME%\links\XYZ.link
文件即可
删除
%ECLIPSE_HOME%\PlugInsNew\XYZ
整个目录及文件
重新启动
Eclipse
即可
使用
重新启动
Eclipse
后,在
Help => About Eclipse SDK => Plug-in
Details
你可以看到由
“FindBugs Project”
提供的
“FindBugs Plug
-
in”
版本
0.0.17
插件,如下图所示:
FindBugs
的使用方法
FindBugs
是一个可以在
Java
程序中发现
Bugs
的程序。
它是专门用来寻找处于
“Bug Patterns”
列表中的代码的。
Bug Patterns
指很有可能是错误的代码的实例。
目前
FindBugs
最高版本
0.9.4
,
不过更新速度很快的,
你应当经常上去看
看是否有新版本发布。
Eclipse plugin for FindBugs
最高版本
0.0.17
。
系统要求
使用
FindBugs
至少需要
JDK1.4.0
以上版本,
FindBugs
是平台独立的,
可以运行于
GNU/Linux
、
Windows
、
MacOS X
等平台上。
运行
FindBugs
至少需要有
256 MB
内存,
如果你要分析一个很大的项目,
那就需要更加多的内存了。
FindBugs
独立运行和与
Ant
结合的详细操作就不介绍了,可以看官方的
文档
http://findbugs.sourceforge.net/manual/
独立运行的效果图如下:
本文主要介绍在
Eclipse
中使用的情况
打开
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[http://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[http://this.name] =
temp; } }
配置
FindBugs
选择你的项目,右键
=> Properties => FindBugs =>
可以配置的信息包括如上图所示的四个选项的相关设置:
Run FindBugs Automatically
开关
当此项选中后,
FindBugs
将会在你修改
Java
类时自动运行,如你设置了
Eclipse
自动编译开关后,当你修改完
Java
文件保存,
FindBugs
就会运行,
并将相应的信息显示出来。
当此项没有选中,你只能每次在需要的时候自己去运行
FindBugs
来检查你的
代码。
Minimum priority to report
选择项
这个选择项是让你选择哪个级别的信息进行显示,
有
Low
、
Medium
、
High
三
个选择项可以选择,很类似于
Log4J
的级别设置啦。
比如:
你选择了
High
选择项,那么只有是
High
级别的提示信息才会被显示。
你选择了
Medium
选择项,
那么只有是
Medium
和
High
级别的提示信息才会
被显示。
你选择了
Low
选择项,那么所有级别的提示信息都会被显示。
Enable bug categories
选择项
在这里是一些显示
Bug
分类的选择:
Correctness
关于代码正确性相关方面的
Performance
关于代码性能相关方面的
Internationalization
关于代码国际化相关方面的
Multithreaded correctness
关于代码多线程正确性相关方面的
Style
关于代码样式相关方面的
Malicious code vulnerability
关于恶意破坏代码相关方面的
比如:如果你把
Style
的检查框去掉不选择中它,那么与
Style
分类相关的警
告信息就不会显示了。其它的类似。
Select bug patterns to check for
选择项
在这里你可以选择所要进行检查的相关的
Bug Pattern
条目
可以从
Bug codes
、
Detector name
、
Detector description
中看到相应的
是要检查哪些方面的内容,你可以根据需要选择或去掉相应的
检查条件。
总结
此插件的功能很不错,可以帮助我们提升
Java
代码的编写能力,
写出更加
安全可靠的代码。建议使用或加在
Ant
里进行持续构建。
现在,你可以马上拿出你已经开发的一个项目,检查一下你的代码有没有
问题了
部成员的共享命名用,省得移动后要改动
Link
文件里的绝对路径而费心费力。
直接拷贝过去就可以使用。
即
XYZ.link
文件的内容如是:
path=../PlugInsNew/XYZ
这样,如果你下载了多个插件就可以如法炮制建立多个
Link
文件,想加载哪个
插件就把哪个插件的
Link
文件放到
%ECLIPSE_HOME%\links
的目录中即
可,使用与管理都很方便,建议千万不要放在默认的安装目录中;
如果你的
%ECLIPSE_HOME%
与此不同,请修改
XYZ.link
文件里的路径
删除,关闭
Eclipse
删除
%ECLIPSE_HOME%\links\XYZ.link
文件即可
删除
%ECLIPSE_HOME%\PlugInsNew\XYZ
整个目录及文件
重新启动
Eclipse
即可
使用
重新启动
Eclipse
后,在
Help => About Eclipse SDK => Plug-in
Details
你可以看到由
“FindBugs Project”
提供的
“FindBugs Plug
-
in”
版本
0.0.17
插件,如下图所示:
FindBugs
的使用方法
FindBugs
是一个可以在
Java
程序中发现
Bugs
的程序。
它是专门用来寻找处于
“Bug Patterns”
列表中的代码的。
Bug Patterns
指很有可能是错误的代码的实例。
目前
FindBugs
最高版本
0.9.4
,
不过更新速度很快的,
你应当经常上去看
看是否有新版本发布。
Eclipse plugin for FindBugs
最高版本
0.0.17
。
系统要求
使用
FindBugs
至少需要
JDK1.4.0
以上版本,
FindBugs
是平台独立的,
可以运行于
GNU/Linux
、
Windows
、
MacOS X
等平台上。
运行
FindBugs
至少需要有
256 MB
内存,
如果你要分析一个很大的项目,
那就需要更加多的内存了。
FindBugs
独立运行和与
Ant
结合的详细操作就不介绍了,可以看官方的
文档
http://findbugs.sourceforge.net/manual/
独立运行的效果图如下:
本文主要介绍在
Eclipse
中使用的情况
打开
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[http://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[http://this.name] =
temp; } }
配置
FindBugs
选择你的项目,右键
=> Properties => FindBugs =>
可以配置的信息包括如上图所示的四个选项的相关设置:
Run FindBugs Automatically
开关
当此项选中后,
FindBugs
将会在你修改
Java
类时自动运行,如你设置了
Eclipse
自动编译开关后,当你修改完
Java
文件保存,
FindBugs
就会运行,
并将相应的信息显示出来。
当此项没有选中,你只能每次在需要的时候自己去运行
FindBugs
来检查你的
代码。
Minimum priority to report
选择项
这个选择项是让你选择哪个级别的信息进行显示,
有
Low
、
Medium
、
High
三
个选择项可以选择,很类似于
Log4J
的级别设置啦。
比如:
你选择了
High
选择项,那么只有是
High
级别的提示信息才会被显示。
你选择了
Medium
选择项,
那么只有是
Medium
和
High
级别的提示信息才会
被显示。
你选择了
Low
选择项,那么所有级别的提示信息都会被显示。
Enable bug categories
选择项
在这里是一些显示
Bug
分类的选择:
Correctness
关于代码正确性相关方面的
Performance
关于代码性能相关方面的
Internationalization
关于代码国际化相关方面的
Multithreaded correctness
关于代码多线程正确性相关方面的
Style
关于代码样式相关方面的
Malicious code vulnerability
关于恶意破坏代码相关方面的
比如:如果你把
Style
的检查框去掉不选择中它,那么与
Style
分类相关的警
告信息就不会显示了。其它的类似。
Select bug patterns to check for
选择项
在这里你可以选择所要进行检查的相关的
Bug Pattern
条目
可以从
Bug codes
、
Detector name
、
Detector description
中看到相应的
是要检查哪些方面的内容,你可以根据需要选择或去掉相应的
检查条件。
总结
此插件的功能很不错,可以帮助我们提升
Java
代码的编写能力,
写出更加
安全可靠的代码。建议使用或加在
Ant
里进行持续构建。
现在,你可以马上拿出你已经开发的一个项目,检查一下你的代码有没有
问题了