问题提出:
当我们编写完代码,做完单元测试等各种测试后就提交正式运行,只能由运行的系统来检测我们代码是否有问题了,代码中隐藏的错误在系统运行的过程中被发现后,然后再来进行相应的修改,那么后期修改的代价就相当高了。
解决方法:
现在有很多java代码分析工具,findbugs中开源项目当中的一个,它可以帮你找到代码中隐藏的一些错误,提升你的代码能力与系统安全可靠性。
安装
jdk:1.5.0 从http://java.sun.com上去下载安装
eclipse:3.1.1 从http://www.eclipse.org 上去下载解压
findbugs:0.9.4 从http://findbugs.sourceforge.net/
官方的文档 http://findbugs.sourceforge.net/manual/
eclipse plugin for findbugs version 0.0.17 从 http://findbugs.sourceforge.net/downloads.html 下载
插件管理技巧
提示:新下载的插件plugin一定不要都放在原始的eclipse目录下去。
- 前提是你已经安装好了eclipse工具了,比如安装在e:/opensource/eclipse/目录下,以下这个目录以%eclipse_home%来进行表示;
- 此时默认的插件是在%eclipse_home%/plugins目录中的;
- 在%eclipse_home%下建立一个pluginsnew的目录;
比如:e:/opensource/eclipse/pluginsnew/ - 你下载了个新的插件,比如叫做:xyz
那么就在%eclipse_home%/pluginsnew/目录下建立xyz目录,目录里面是eclipse目录,eclipse目录包含有features与plugins两个子目录;结构如下图所示:
- 把下载的新插件的文件放在以下相应目录中
%eclipse_home%/pluginsnew/xyz/eclipse/features
%eclipse_home%/pluginsnew/ xyz/eclipse/plugins
- 建立相关的.link的文件
然后在%eclipse_home%/links目录里建立一个xyz.link的文件
内容如是:path=e:/opensource/eclipse/pluginsnew/xyz就一行这样的路径指示而已。
当然,采用相对路径来表示可能更直观一些,方便进行文件整体移动和小组全部成员的共享命名用,省得移动后要改动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 = 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 =>
可以配置的信息包括如上图所示的四个选项的相关设置:
- 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里进行持续构建。
现在,你可以马上拿出你已经开发的一个项目,检查一下你的代码有没有问题了。