我在听Java Posse播客的时候听到了FindBugs™。由于Hibernate Annotations和Hibernate EntityManager都即将发布,我决定试一试。
FindBugs™基本上是一个静态代码分析器,它通过一些模式识别来尝试在您的代码中找到错误。我过去曾经使用过静态和动态代码分析器,并对它们的误报率(将非错误视为错误)以及它们的设置过程复杂性相当失望。FindBugs是一个令人耳目一新的体验。
关于它的有趣之处在于,好吧,有几个有趣之处
- 设置和运行都非常简单
- 误报率出奇地低
- 它是在字节码级别工作的,因此您不需要有源代码(稍后讨论)
设置和运行
我没有阅读文档,只是下载了软件包并运行了.bat文件。点击几下,我就在分析Hibernate Annotations和Hibernate EntityManager了。不需要复杂的Ant集成(您可以用,但不是必须的),不需要复杂的IDE依赖(您可以用,但不是必须的),不需要复杂的命令行需要您阅读手册(您可以用,呃,您应该用,但不是必须的)。提供的GUI运行得相当顺畅,即使有一个包过滤功能会非常酷(稍后讨论)。
非常低的误报率
通常导致此类产品失败的原因是错误的漏洞报告数量。最终,你会在30分钟内扫描数百条警告,却无暇顾及,最终丢弃整个产品。FindBugs具有非常低的误报率,这非常好。而且如果警告最终被证明是误报,通常有一些值得再次审视你代码的合理理由。我必须承认,我对此感到相当自豪;-) 当然,在HAN和HEM中,我也发现了一些bug和次优结构(不用担心,我已经修复了它们),但远少于我的预期。
在字节码级别进行工作
这可能就是它易于使用(但难以开发)的原因,FindBugs(tm)在字节码级别工作,而不是在源代码级别(如果提供了源代码,它将突出显示源代码行)。所以,指向一个jar或包含你的编译类的目录就足够了。实际上,我所做的是指向我的项目根目录,任务就完成了。
所以,在分析Hibernate Annotations和Hibernate EntityManager时,我最终分析了大量jar文件(哦,过滤器,你在哪里?),我可以告诉你,有些人应该看看FindBugs(tm),这包括许多JDBC驱动程序和一些知名的大公司支持的内嵌数据库;-)
试试吧
它是免费的,设置简单,只需两小时,就能为你节省更多时间。