用于增量静态分析代码的工具?

5
有没有免费的工具可以进行增量静态代码分析(适用于SVN,最好是Git)?目前我们正在使用Sonar(我认为是2.12版本),但问题在于需要分析我们项目中的所有代码所需的时间为40-60分钟。而且由于我们有几个分支在不同的子项目上工作,因此我们需要将这个时间乘以几倍。
这就是为什么我正在寻找一种工具,它可以仅从最新提交的代码或在过去X小时/天/任何时间内修改的代码中分析代码。
我找到了Sonar的Cutoff插件,据说可以做到我想要的(仅检查在某个日期之后修改的文件中的代码),但是:
1.我仍然需要检查它是否有效 2.检查它是否支持动态日期更改(这样它只会考虑从最近一天的代码,而不必每天手动更改排除日期)。 3.它似乎得不到很好的支持(上次更新是2010年,它仍然是0.1版本)
如果它只检查最后一次提交的代码,那就太完美了,但我还没有在任何地方看到过它。
此外,作为一个附加问题:在每次提交后运行分析(即使用Hudson Sonar插件)是否是一个好主意,还是应该避免使用?在我的上一个团队中,我们就是这样运行Sonar的,如果我们“破坏了它”(添加了重大/关键的代码),我们会立即收到电子邮件。这非常方便,因为我们知道是谁的问题(根据提交信息)。还是应该较少地进行分析(比如每周一次)?在这种情况下,我将不得不检查Sonar是否能够说出是谁提交了有问题的代码。

你在寻找免费工具吗? - kosa
啊,是的,我忘了提到:它必须是免费的。显然不需要完美,但必须是免费的。 - Mateusz Dymczyk
3个回答

3

由于有许多工具/规则依赖于遍历可能的堆栈来限制误报数量,因此可以用于静态分析的内容很少。 因此,更改一个程序集将要求重新评估调用程序集,这并不像外表看起来那么简单。

为加快静态分析速度,建议投资于内存磁盘或SSD来存储源代码和二进制文件。使用多核机器,拥有足够的内存,并在可能的情况下运行这些工具的x64版本。其中大部分工具首先是I/O有限制,然后才是CPU受限制。通过减少系统的延迟和吞吐量以及减少交换所需的量(通过拥有足够的内存)以进一步减少I/O,可以找到大多数改进。

您还可以使用构建服务器上的“Buddy Build / Validate Shelve Set Build”来卸载构建时间到不同的机器上,这些机器可以在开发人员之间共享。


啊,我真希望能得到你所说的所有/任何设备 :) 目前我只能满足于使用带有截断插件的每日构建。我想这总比没有好。 - Mateusz Dymczyk
试着总结一下如果不投资这些东西你会失去什么,你会惊讶于节省的时间能够快速实现改进。 - jessehouwing

0

我知道我来晚了,但是还有另一个工具可能对你有用:Teamscale

Teamscale连接到您的代码库(例如Git或SVN),并在每次提交后逐步分析您的代码。通过这样做,您可以在提交后几乎立即获得有关新/修复的代码问题的反馈。您还可以查看您的代码的完整历史记录,列出错误的假阳性等等。(完全披露:我是Teamscale开发人员)


0

还有一些静态分析工具:

  1. PMD
  2. Checkstyle
  3. FindBugs

很有可能你会发现它们是 Sonar 的有用替代品。

你没有提到是否使用持续集成工具。可能你需要将其运行起来,以便使用这些工具进行检查。


是的,我们之前使用了所有三个工具,但现在转换为使用 Sonar,它可以完成所有的工作。此外,作为 CI 工具,我们正在使用 Hudson。 - Mateusz Dymczyk
那么也许您只需要减少运行检查的数量? - altern
是的,我已经做了两个改进:首先,我不在Hudson中运行单独的Sonar作业,这将首先以CI方式构建整个应用程序,然后再为Sonar执行一次,而是在其中一个CI之后立即启动Sonar构建。然后我不必运行测试,只分析最新的更改。整个过程现在大约需要10分钟,我认为我会得到更好的结果。 - Mateusz Dymczyk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接