Cyclomatic Complexity让我更多地考虑static code analysis。分析代码复杂性和一致性偶尔会有用,我想开始做更多。您建议使用哪种工具(按语言)进行此类分析? Wikipedia有大量工具,但以前有人尝过哪些工具?
编辑:正如大卫所指出的那样,C/UNIX based tools涉及的问题不是一个完全没有问题的问题。
答案 0 :(得分:23)
我已经为我的Objective-C iPhone项目(iOS应用程序)建立了一个Hudson持续集成(CI)构建系统,并编译了一系列可用于在构建期间分析我的项目的工具: / p>
Clang静态分析器:免费的,最新的独立工具,比Xcode 4附带的Clang版本捕获的问题更多。活动项目。 - 访问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 (计算代码行):免费工具来计算文件,代码行,注释和空行。支持diffing,因此您可以看到构建之间的差异。活跃的项目。 - 访问http://cloc.sourceforge.net
SLOCcount (源代码行数):一种免费工具,用于计算代码行数并估算与项目相关的成本和时间。似乎没有活动。 - 访问http://sourceforge.net/projects/sloccount和http://www.dwheeler.com/sloccount
AnalysisTool :免费代码分析工具,可测量代码复杂性并生成依赖关系图。不活跃。似乎不适用于Xcode 4,但我很想让它工作。 - 访问http://www.karppinen.fi/analysistool
答案 1 :(得分:6)
对于C和Objective-C,您还可以使用LLVM / Clang Static Analyzer。
它是开源的,并且正在积极开发中。
答案 2 :(得分:5)
答案 3 :(得分:3)
对于C ++,我使用CppCheck。它似乎工作正常。
答案 4 :(得分:2)
我经常使用Eclipse的PMD插件。它非常好,而且非常易于配置。 CheckStyle也很好,如果你正在寻找更多的风格执行者。
答案 5 :(得分:2)
Checkstyle,Findbugs和PMD在Java中都运行良好。我目前对在NetBeans中运行的PMD非常满意。它有一个相当简单的GUI,用于管理您要运行的规则。在一个文件,整个包或整个项目上运行检查器也非常容易。
答案 6 :(得分:2)
如果您正在寻找基于C / UNIX的工具,请参阅问题Choosing a static code analysis tool。
答案 7 :(得分:2)
显然,答案取决于编程语言。 UNO对C程序有用。
@Thomas Owens:我认为你的意思是Splint。
答案 8 :(得分:1)
Lint是我以前唯一使用的位置。它并不坏,它建议的大多数东西都是好的捕获,有些没有多大意义。只要您没有适当的流程来确保没有lint错误或警告,那么捕获一些隐藏的错误也很有用
答案 9 :(得分:1)
我们使用Programming Research的{{3}}作为我们的C代码。工作正常。
最近,我们一直在讨论检查一些更先进的静态/动态代码分析器,如Coverity的QAC或分析工具Prevent。
他们声称不仅要进行静态分析,还要发现运行时错误等。一个主要卖点是误报率较低。
答案 10 :(得分:1)
我们在Palm上使用Coverity Prevent进行C和C ++代码分析,并且在我们的代码中发现了一些隐藏的错误。它还发现很多不太可能出现问题,但很容易在工具生成的代码数据库中将其标记为“无法修复”或“无问题”。它很昂贵,但该公司偶尔会在开源项目上运行,并向维护人员提供报告。如果您想了解更多有关我们体验的信息,他们的网站上会有a whitepaper about our use of the product。
答案 11 :(得分:1)
我的管理员非常便宜,所以我只能使用非常便宜的工具:
1)CCCC(C / C ++代码计数器):与行数相关的各种结果(与评论行,圈复杂度,信息流,......) 2)Semian:我尝试过的最快的代码复制查找器。 3)LOC Metrix:不是很有用,但可以帮助说明一点。
答案 12 :(得分:0)
我曾经使用其中一种工具的唯一一次是Split(C编程语言)。我认为它很有帮助,但我绝不是一个超级用户,而且我认为我几乎没有触及它可以做什么的表面。
答案 13 :(得分:0)
我在很多语言中使用了很多开源和商业静态分析工具,我发现整体讨论都属于技术债务(which this article goes into detail about)概念的保护范围。
然而,对于快速回答,这是我最喜欢的每种语言: