像clang-tidy或cppcheck之类的工具与klocwork相比如何?

时间:2019-07-12 12:06:20

标签: static-analysis cppcheck clang-static-analyzer clang-tidy klocwork

这些工具之间有根本区别吗?毕竟,klocwork相对昂贵,而其他的是免费的吗?两者都遵循一些规则进行静态代码分析。

规则质量是否存在差异?它仅取决于规则吗?你有什么经验?

4 个答案:

答案 0 :(得分:2)

无论是在检查程序的深度上还是在缺陷跟踪和假阳性抑制方面,您都可以得到所需的回报。 cppcheck和Clang静态分析器值得运行,即使在良好的代码库中,也可以找到相当数量的浅薄但严重的错误。 (我们首先运行Clang分析器,在https://github.com/jonreid/XcodeWarnings的帮助下将设置文件调到最大。cppcheck偶尔会发现它遗漏的一些错误,但字符相似。)

    Klocwork及其竞争对手Coverity都在C / C ++中发现了更深的错误,有时在其分析深度上令人吃惊。但是,在过去的十年中,Coverity已被接管,并且在C / C ++检查器中进展甚微。但它们仍然值得运行。 (他们的JVM检查器不是。)我最近没有使用过Klocwork,但它们也不再独立。 (有关更多详细信息,请参阅我的Dobbs博士的文章,http://www.drdobbs.com/testing/deploying-static-analysis/240003801

(pablo285,Klocwork和Coverity都有文档齐全的API,可让您编写自己的检查器。)

答案 1 :(得分:1)

LLVM有一个称为Clang static analyzer的静态分析工具。

Clang静态分析器和cppcheck是开源的(允许您编写自己的检查/修改现有检查),而klockwork是专有的(具有用于编写自己的检查的API)。

至于检查的质量-您必须自己尝试,我试图根据事实而非观点来回答这个问题。但是,没有什么可以阻止您使用多个静态分析工具。

Clang-tidy稍有不同,它称自己为“线性”工具,尽管它可以用于静态分析,但它还为发现的某些缺陷提供了自动修复程序。内部clang-tidy使用抽象语法树表示您的代码。为了构建此AST,代码必须可由clang编译,这在某些代码库中可能是(可能是主要的)缺点。

有关提供自动修复程序的整洁检查列表,请参见this answer

答案 2 :(得分:0)

我相信clang-tidy或cppcheck引擎会逐行进行分析。 Klocwork引擎则进行程序间分析。 Klocwork可以检测文件相关的问题以及大多数其他工具无法检测到的问题。 Klocwork在发现关键检测(例如内存泄漏,缓冲区溢出,NULL异常,死锁,并发问题等)方面非常强大。

我们评估了多个静态代码分析器,并以Klocwork结尾。

我会告诉您为什么我们选择Klocwork而不是其他任何SCA工具,

  1. 检测潜在漏洞的检查器数量。 Klocwork有 超过1000多个检查程序来检测编码缺陷/问题。
  2. Klocwork可以在开发人员桌面上工作。因此,它使代码错误 开发时免费。 (它具有以下功能: 好)
  3. klocwork具有可用于Visual Studio,Eclipse, 基于Intellij IDEA,Wind River,CCS和Eclipse的IDE。 Klocwork有 它自己的IDE。 (如果您使用的是其他IDE, Klocwork插件支持,您可以使用Klocwork IDE。 Klocwork IDE可以 与您拥有的任何编辑器或IDE一起使用)
  4. Klocwork支持检查几乎所有行业标准,例如Misra, Autosar,CERT,CWE,DISA-STIG,OWASP等。,
  5. 您可以在Klocwork中编写自己的检查程序来维护/检查您的 内部编码准则。
  6. 发现漏洞问题的有效性。
  7. 报告和指标(100多种报告格式和400多种指标)
  8. 过滤问题–删除报告中的第三方代码,创建 模块报告,团队报告等。
  9. 快速-尽管他们基于您的本机构建设置创建AST Klocwork引擎仍然快速有效。
  10. 自动化–自动化–自动化。 Klocwork构建可以是 自动化,因为它具有丰富的命令行工具。另外,Klocwork还具有 可用于Jenkins和Teamcity的直接插件。
  11. 简单部署–客户端服务器体系结构
  12. 文档– Klocwork的文档和演示视频是 在线可用(开放)。您只要打开Goog​​le并说“ Klocwork C 和C ++检查器列表”,您将获得Klocwork检查器的列表 有适当的解释。
  13. 支持– Klocwork支持团队非常人性化。
  14. 许可-简单的许可。没有隐藏的费用。

我想说,对Klocwork进行免费评估并在您的项目中对其进行测试。我相信你会喜欢的。

答案 3 :(得分:0)

是的,clang-tidy或cppcheck与klocwork之间存在根本的区别。

Klocwork包装器将监视您的构建并根据您的编译器名称构建设置(包括定制的系统调用)创建构建规范文件。使用此构建规范文件Klocwork进行过程间分析,并在后端创建抽象语法3。那么它将尝试覆盖100%的代码和100%的路径。这样Klocwork分析将更加准确,并且可以检测代码中的实际缺陷。

Klocwork也可以检测数据流问题。