
有时人们会提出一个问题,乍一看是关于一件事,但实际上是关于另一件事。 正如他们所说,一个恰当的问题只能解决一半的问题。
前几天,我从
JPoint会议上回来,在该会议上,我们首次引入了用于Java的新型PVS-Studio分析仪。 在过去的几年中,对静态分析的兴趣迅速增长,因此观众对PVS-Studio充满了兴趣。 除了积极的反馈意见,我当然也要反对。 尝试使用PVS-Studio的最常见反对意见是:“来吧,为什么我们要尝试PVS-Studio? 我们使用IntelliJ IDEA,ReSharper,SonarLint和SonarQube。 因此,我们最近启动了PVS-Studio,他发现IntelliJ IDEA突出显示的错误!”
我只是忍不住对此评论写了一条小纸条。 更准确地说,我什至对这个异议有两个答案。 是的,我在这里特别指出了ReSharper,因为这样的问题也适用于我们的C#分析器。 好吧,我会很乐意回答。
首先,我们不会通过复制竞争对手的诊断信息来做PVS-Studio。 不了解本质的盲目复制无济于事。 静态代码分析的价值,其诊断价值不在哪里抛出错误。 还有哪里不应该放弃。 对于我们的每个诊断,当不需要触发时,我们都会有10、20甚至更多的异常。 仅根据文档中的描述从其他产品复制诊断程序,就像尝试使用一张照片建造同一座建筑物。 如果“神使”一下子变得一样,那么体育馆的照片对您有很大帮助吗?
因此,我们从不复制。 “但是您有相同的诊断!” -你说。 当然有 许多错误的观念浮出水面。 这是绝对显而易见的。 但通常,具有相同描述的诊断程序甚至表现不同。
换句话说,如果您使用标题中指示的任何产品,那么在启动PVS-Studio时很可能会发现一堆其他产品未检测到的新错误。 我们客户的经验和检查未完成项目的经验证实了这一点。
其次,即使您使用IntelliJ IDEA,ReSharper和SonarLint / SonarQube,并且它们在您的代码中发现的错误与PVS-Studio相同,那么对于您来说也有个坏消息。 您使用发现错误的工具,确定。 但是,为什么PVS-Studio在您的代码中发现了似乎所有这些工具都发现的bug? 为什么使用“就像PVS-Studio一样可以找到所有内容”的工具时,错误没有得到解决? 也许这些工具允许它们不被编辑?
IntelliJ IDEA,ReSharper和SonarQube的SonarLint都是非常好的工具。 它们是由高素质的团队制造的。 如果您使用它们,那么您所做的一切都正确。 项目上的工程文化水平越高,对业务越有利。
但是,如果所有这些工具“都发现与PVS-Studio相同的错误”,而这些错误仍在代码中,则说明您做错了什么。 实施团队惯例,例如定期使用PVS-Studio。 然后不仅可以发现错误,还可以纠正错误。 PVS-Studio的实施将迫使开发人员纠正错误。 而不仅仅是找到他们。

如果您想与讲英语的读者分享这篇文章,请使用翻译链接:Evgeniy Ryzhkov。
IntelliJ IDEA,ReSharper,SonarLint和SonarQube发现与PVS-Studio相同的错误-那么为什么我们需要PVS-Studio?