由马里兰大学Bill Pugh教授开发的FindBugs是一个开源的(LGPL)静态代码分析工具(无需运行就能对代码进行分析的工具),目的是找出Java代码中的常见缺陷。
开发者可以通过多种方式来使用静态代码分析工具,最常见的两个使用场景分别是在新编写模块的代码审查上以及对现有代码进行更大范围的审查上。这两个使用场景其实是有很大区别的。对于前一种情况,开发者通常会检查工具所发现的有疑问的代码,然后去修改代码(即便这个问题对应用本身并没有什么影响时也是如此)。与此相反,在审查已有代码时,由于代码已经处于产品阶段且并没有造成什么明显的问题,开发者在修改之前需要先熟悉一下代码,因此其修改代价就很高了。
FindBugs分析引擎一直在持续地改进,同时在新的1.3.9版中还添加了12个新的检测器。这12个新的检测器是:
* BC_IMPOSSIBLE_DOWNCAST
* BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY
* EC_INCOMPATIBLE_ARRAY_COMPARE
* JLM_JSR166_UTILCONCURRENT_MONITORENTER
* LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE
* NP_CLOSING_NULL
* RC_REF_COMPARISON_BAD_PRACTICE
* RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN
* RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED
* SIC_THREADLOCAL_DEADLY_EMBRACE
* UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR
* VA_FORMAT_STRING_EXPECTED_MESSAGE_FORMAT_SUPPLIED
这些检测器的说明可参看官方网站http://findbugs.sourceforge.net/bugDescriptions.html
自从1.3.9之后FindBugs就开始重点解决第二种情况了。比如说,FindBugs总是将每一种bug模式划分到某个类别中,如正确性、最差实践、性能与国际化等,然后为其指定高、中、低优先级。对于开发者来说,可以通过这种方式从庞大的代码中过滤掉那些不重要的缺陷。
同时FindBugs还提供Eclipse插件,可以同开发环境整合起来。