您使用什么工具进行静态代码分析?

您使用什么工具进行静态代码分析?

What tools do you use for static code analysis?

关于循环复杂性的问题使我对静态代码分析有了更多的思考。 分析代码的复杂性和一致性有时会很有用,我想开始做更多的事情。 您建议(每种语言)使用哪些工具进行此类分析? 维基百科提供了大量工具,但是人们以前尝试过哪些工具?

编辑:正如David指出的那样,当涉及基于C / UNIX的工具时,这并不是一个尚未完全解决的问题。


我一直在为我的Objective-C iPhone项目(iOS应用程序)建立一个Hudson持续集成(CI)生成系统,并编译了各种各样的工具,这些工具可用于在生成过程中分析我的项目:

  • Clang静态分析器:免费的,最新的独立工具,比Xcode 4中包含的Clang版本捕获更多的问题。Active项目。 -访问http://clang-analyzer.llvm.org

  • Doxygen:免费的文档生成工具,还可以生成类依赖关系图。活动项目-访问http://www.doxygen.nl

  • HFCCA(无头循环复杂度分析器):免费的Python脚本来计算代码复杂度,但没有头文件和预处理器。支持Hudson / Jenkins构建的XML格式输出。活动项目。 -访问http://code.google.com/p/headerfile-free-cyclomatic-complexity-analyzer

  • CLOC(计数代码行):免费工具来计数文件,代码行,注释和空白行。支持差异化,因此您可以看到内部版本之间的差异。活动项目。 -访问http://cloc.sourceforge.net

  • SLOCcount(代码计数的源代码行):一个免费的工具,可以对代码行进行计数并估算与项目相关的成本和时间。似乎没有激活。 -访问http://sourceforge.net/projects/sloccount和http://www.dwheeler.com/sloccount

  • AnalysisTool:免费的代码分析工具,可测量代码复杂性并生成依赖关系图。不活跃。似乎不能与Xcode 4一起使用,但我希望它能正常工作。 -访问http://www.karppinen.fi/analysistool


对于C和Objective-C,您还可以使用LLVM / Clang静态分析器。

它是开源的并且正在积极开发中。


对于.Net,我们使用NDepend。它是一个很棒的工具,可以集成到构建中(我们使用CCNet)。

http://www.ndepend.com/

HTH。


对于C ++,我使用CppCheck。看来工作正常。


显然,答案取决于编程语言。 UNO非常适合C程序。

@Thomas Owens:我想你是说夹板。


如果您正在寻找基于C / UNIX的工具,还请参见选择静态代码分析工具的问题。


Checkstyle,Findbugs和PMD在Java中都可以很好地工作。我目前对NetBeans中运行的PMD感到非常满意。它具有一个相当简单的GUI,用于管理您要运行的规则。在一个文件,整个包或整个项目上运行检查器也非常容易。


我在Eclipse中经常使用PMD插件。它非常好,而且可配置。如果您正在寻找更多的样式执行器,则CheckStyle也很好。


我的管理员真的很便宜,所以我只能使用真正便宜的工具:

1)CCCC(C / C ++代码计数器):与行数有关的各种结果(与注释行,圈复杂度,信息流等相对)
2)Semian:我尝试过的最快的代码重复查找器。
3)LOC Metrix:不是很有用,但可以帮助阐明观点。


我们使用Palm的Coverity Prevent进行C和C ++代码分析,并且在发现代码中的一些隐藏错误方面做得非常好。它还发现了很多不太可能遇到的问题,但是很容易在工具生成的代码数据库中将其标记为"无法解决"或"不是问题"。它很昂贵,但是公司偶尔会在开源项目上运行,并向维护者提供报告。如果您想了解更多有关我们的经验,他们会在他们的网站上提供有关我们使用该产品的白皮书。


我们对C代码使用Programming Research的QAC。工作正常。

最近,我们一直在谈论签出一些更高级的静态/动态代码分析器,例如Coverity's Prevent或GrammaTech的分析工具。

他们声称不仅可以进行静态分析,还可以发现运行时错误等。一个主要卖点是应该减少误报。


Lint是我在上一个职位上使用过的唯一工具。情况还不错,它建议的大多数内容都是不错的收获,有些没有什么意义。只要您没有适当的流程来确保没有皮棉错误或警告,那么捕获一些其他隐藏的错误很有用。


我已经在多种语言中使用了相当多的开源和商业静态分析工具,并且我发现总体讨论符合称为技术债务的概念(本文将对此进行详细介绍)。

不过,为了快速解答,以下是我最喜欢的每种语言:

  • Java:Google CodePro Analytix和Checkstyle
  • .NET:FxCop和StyleCop
  • C / C ++:McCabe IQ

我唯一使用过这些工具之一的就是Split(C编程语言)。我认为这是有帮助的,但我绝不是超级用户,我认为我几乎不了解它可以做什么。


推荐阅读