本文介绍 Findbugs,一个开源的eclipse代码检查工具:它可以简单高效全面地帮助我们发现程序代码中存在的bug,bad smell等,且会提供简单的修改意见,供我们重构时进行参考。
这可以一定程度上降低code review工作量,提高review效率,可以培养我们的编码意识与水平,形成好习惯,提高开发编码能力!
一起来GET这个好用的检查工具!
Findbugs是在Java程序中查找bug的程序,它查找bug模式的实例,也就是可能出错的代码实例,注意Findbugs是检查java字节码,也就是*.class文件。
准确的说,它是寻找代码缺陷的:我们写的不好可以优化的地方,它能检查出来。
例如:未关闭的数据库连接,缺少必要的null check,多余的 null check,多余的if后置条件,相同的条件分支,错误的使用了"==",重复的代码块等等。
而且我们还可以自己配置检查规则(做哪些检查,不做哪些检查),实现你自己独有的校验规则。
Findbugs的一些特点
1) 着眼于寻找代码中的缺陷,这就与其他类似工具有些区别了,它检测直接操作类文件(class文件)而不是源代码。
2) FindBugs可以通过命令行、各种构建工具(如Ant、Maven等)、独立的Swing GUI或是以Eclipse和NetBeans IDE插件的方式来运行。
3) 它的输出结果既可以是XML,也可以是文本形式。
4) 开发者可以通过多种方式来使用FindBugs,最常见的是在新编写模块的代码分析 / 对现有代码进行大范围的分析。
5) 不注重style及format,注重检测真正的bug及潜在性能问题,尽可能抑制误检测(false positives)的发生。
1.安装
下载地址:
http://downloads.sourceforge.net/project/findbugs/findbugs%20eclipse%20plugin/1.3.9/edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090821.zip?use_mirror=ncu
1.下载edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090821.zip;
2.解压到如:"E:MyEclipse6.5eclipsefeatures"与"E:MyEclipse6.5eclipseplugins"下;
3.复制到eclipsedropins,然后插件就安装成功了
4.重启MyEclipse;
5.FindBugs视图: Window->ShowView->Other->FindBugs;
6.或者打开eclipse->window->Preferences,搜索findbugs, 若能找到配置项, 表示安装成功
2.如何配置
1 Run Automatically开关
当此项选中后,FindBugs将会在你修改Java类时自动运行,如你设置了Eclipse自动编译开关后,当你修改完Java文件保存,FindBugs就会运行,并将相应的信息显示出来。
2 Detector Configuration选择项
在这里你可以选择所要进行检查的相关的Bug Pattern条目,你可以根据需要选择或去掉相应的 检查条件。
3 Minimum priority to report选择项
选择哪个级别的信息进行显示,有Low、Medium、High三个选择项可以选择,类似于Log4J的级别设置 :
High: 只显示High级别的提示信息
Medium:只显示Medium和High级别的提示信息
Low:显示所有级别的提示信息
4 配套的Bug解释模式
3.如何使用
- 选择指定的包或者类进行findbug,此时findbugs会遍历指定的包或者类,进行分析,找出代码bug,然后集中显示在 find bugs的bugs explorer 中
- 添加findbugs explorer (eclipse 左下角)
- bugs explorer 添加完毕后,我们就可以查看刚刚找到的bugs了
找出的bug有3种颜色
黑色的虫:bug分类
红色的虫:严重bug发现后必须修改代码
橘黄色的虫:潜在警告性bug 尽量修改
双击bug项目就可以在右边编辑窗口自动打开相关代码文件并连接到代码片段。 点击行号旁边的小臭虫图标后在eclipse下方输出区将提供详细的bug描述,以及修改建议等信息。可以根据此信息进行修改。
4.举个实际操作例子
Bug: Possible null pointer dereference of orderPattern id: NP_NULL_ON_SOME_PATH, type: NP, category: CORRECTNESS
There is a branch of statement that, if executed, guarantees that a null value will be dereferenced, which would generate a NullPointerException when the code is executed. Of course, the problem might be that the branch or statement is infeasible and that the null pointer exception can't ever be executed; deciding that is beyond the ability of FindBugs.
解释:
方法中可能存在空指针引用
解决方法:
增加字段order为空的判断
来源:网易工程师-徐可愉
看到这里,你GET到这个静态代码检查工具的使用方法了吗~有任何问题欢迎留言交流!
如果觉得这篇文章有帮助到你的话,欢迎转发、收藏,有想看的内容或者建议,敬请留言!
独家整理了一些最新Java实用学习资料,包含大厂面经分享、模拟试题、和视频干货,需要的同学欢迎私信我噢!
Java 日记本,每日存档超实用的技术干货学习笔记,每天陪你进步一点点~