栏目:JAVA 基础(<--点此查看更多)Java 数据类型|类|对象|封装|继承|多态等特性
  • 在什么情况下会用到 FindBugs ?

  • Tue Mar 12 01:09:17 CST 2013 编程者 我要收藏(...) 评论 ...
  • FindBugs 静态检查工具的使用场景
  • 开发阶段

    当Developer完成了某一部分功能模块开发的时候(这通常是指代码撰写完成,并已debug通过之后),可藉由FindBugs对该模块涉及的java文件进行一次扫描,以发现一些不易察觉的bug或是效能问题。交付新版的时候,开发团队可以跑一下FindBugs,除掉一些隐藏的Bug。FindBugs得出的报告可以作为该版本的一个参考文档一并交付给测试团队留档待查。

    在开发阶段使用FindBugs,一方面开发人员可以对新版的品质更有信心,另一方面,测试人员藉此可以把更多的精力放在业务逻辑的确认上面,而不是花大量精力去进一些要在特殊状况下才可能出现的BUG(典型的如Null Pointer Dereference)。从而可以提高测试的效率。

    维护阶段

    这里指的是系统已经上线,却发现因为代码中的某一个bug导致系统崩溃。在除掉这个已暴露的bug之后,为了快速的找出类似的但还未暴露的 bug,可以使用FindBugs对该版的代码进行扫描。当然,在维护阶段使用FindBugs往往是无奈之举,且时间紧迫。此外,如果本来在新版交付的时候就使用过FindBugs的话,往往意味着这种bug是FindBugs还无法检测出的。这也是FindBugs局限的地方。

    FindBugs出到目前的版本,功能已经相当强大,不过也有待完善的地方。从实际使用来看,有一些隐藏的bug并不能靠FindBugs直接发现。那么,可不可以撰写一个新的 Detector,来发现这种将一个未初始化的reference传来传去而形成的潜在的bug呢?理论上来讲,应该是可以的。这个 Detector目前还未实现。哪位如果有兴趣的话,可以参考FindBugs, Part 2: Writing custom detectors(扩展阅读)这篇文章,帮忙实现这个Detector。实现一个新的Detector,便可以检测出一种新型的bug,这样不知又可以帮开发人员省去多少人工检查的时间,功德无量啊。

    FindBugs也不能发现非java的Bug。对于非java撰写的代码,如javascript,SQL等等,要找出其中可能的bug,FindBugs是无能为力的。当然,javascript中的bug似乎还不至于使系统崩溃,而SQL中的bug往往又跟业务逻辑相关,只要测试仔细一些应该是可以发现的。

    FindBugs不过是一个工具。作为开发人员,当然首先要在编程的时候努力避免引入bug,而不要依赖于某个工具来为自己把关。不过由于代码的复杂性,一些隐藏的bug确实很难靠咱们的肉眼发现。这时,应用一些好的工具或许就可以帮你发现这样的bug。这便是FingBug存在的价值。

  • 信息来源:http://baike.baidu.com (举报这篇文章)
  • 好评(...) 中评(...) 差评(...)