在上一篇文章中,我们列举了一些资源关闭需要考虑的特殊场景,并且预告了会在这篇放出火线和其他开源产品横向的扫描结果对比报告,包括Sonar、Infer、PMD和Findbugs(由于Lint没有针对资源关闭的规则,未加入对比)。
我们将资源关闭场景进行了细化和拆分,以保证代码扫描过程中既能检测出已有的问题,同时也不会对正确的写法产生误报。目前共计30个场景。
废话不多说,先上结果:
PMD
对比报告中使用的PMD版本为目前最新版本PMD5.6.1。
PMD是业界老牌的开源静态代码扫描产品,于2002年发布了第一个版本,至今已有15年的积淀。它的优点是支持多种语言的静态扫描,同时由于其将源代码转化为抽象语法树进行分析的引擎特点,扫描速度快。但是也是由于引擎的特点,限制了它应对更加深入的检查需求,目前还难以满足。
所以大家可以看到上面的结果中,PMD针对很多问题都无法成功检出。
Findbugs
对比报告中使用的Findbugs版本为目前最新版本Findbugs3.0.1。
Findbugs也是业界老牌的开源静态代码扫描产品,同时也应该是知名度较高的一款产品。我从官网上只能追踪到最早2004年的BUG反馈,说明Findbugs的积淀和PMD不相上下。Findbugs只支持Java代码扫描,但是它的引擎技术是解析源码编译后的class文件,专业术语为控制流图和数据流分析技术。所以它能做的事情相比较PMD而言深度上更胜一筹。
在结果对比中可以看到,Findbugs针对资源关闭先后推出了两代规则,分别使用了不同的静态扫描技术(详情可点击)。这表明Findbugs的开发者也发现资源关闭问题并不是一个简单的问题,它的场景复杂性以及实现的难度都超乎想象。(为什么复杂?请回顾静态代码扫描系列文章第四篇;有哪些复杂场景?请回顾静态代码扫描系列文章第五篇。)
从以上的结果对比也能看出,即使Findbugs出了两代规则,也没有很好的解决资源关闭的问题。同时由于Findbugs开发者的退休老去,项目已经两年多没有更新版本,未来令人担忧。
我们在不断改进火线的过程中,已经收到了很多同学的反馈和建议。从大家的反馈中,我们发现了大家不同的需求,有希望火线支持IOS扫描的、有希望支持最近大火的语言Kotlin扫描的、也有希望针对圈复杂度和覆盖率进行统计的需求等等。作为火线的开发,我非常想满足所有人的所有需求。可是目前火线受制于某些原因,还没有足够多的人力以快速支持所有人的期望。我的想法是这样的,先集中力量解决大部分人共同的痛点;同时,希望大家能够多多反馈,反馈邮箱g-qtest-fankui@360(PS:我们领导也能看到反馈),用来帮助我们火线争取更多的资源来更快的发展。
不论是PMD、Findbugs、Sonar还是Infer,不管是开源还是商业产品,在静态代码扫描的领域,中国一直在国外的身后追赶。我们希望有一天,中国能有一款产品让国外的产品刮目相看,我们希望,这款产品是——火线。
本文发布于:2024-01-28 14:58:44,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17064251298234.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |