1

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

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

4

4 回答 4

3

无论是在检查器的深度,还是在缺陷跟踪和误报抑制方面,您都能得到您所付出的。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,可让您编写自己的检查器。)

于 2019-07-13T11:50:55.333 回答
1

LLVM 有一个名为Clang 静态分析器的静态分析工具。

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

至于检查的质量 - 你必须自己尝试,我试图根据事实而不是意见来做出这个答案。不过,没有什么能阻止您使用多个静态分析工具。

Clang-tidy 有点不同,它称自己为“linter”工具,虽然它可以用于静态分析,但它还为它可以找到的一些缺陷提供自动修复。在内部 clang-tidy 使用抽象语法树来表示您的代码。为了构建这个 AST,代码必须能够被 clang 编译,这在某些代码库中可能是一个(可能是主要的)缺点。

有关提供自动修复的 clang-tidy 检查列表,请参阅此答案

于 2019-07-12T12:46:56.070 回答
0

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

Klocwork 包装器将监视您的构建并根据您的编译器名称构建设置(包括自定义系统调用)创建构建规范文件。使用此构建规范文件 Klocwork 进行过程间分析并在后端创建抽象语法三。然后它将尝试覆盖 100% 的代码和 100% 的路径。所以 Klocwork 分析会更准确,它可以检测出代码中真正的缺陷。

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

于 2020-10-26T18:17:42.907 回答
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。(如果您使用 Klocwork 插件不支持的任何其他 IDE,则可以使用 Klocwork IDE。Klocwork IDE 可以与您拥有的任何编辑器或 IDE 一起使用)
  4. Klocwork 支持检查几乎所有行业标准,如 Misra、Autosar、CERT、CWE、DISA-STIG、OWASP 等。
  5. 您可以在 Klocwork 中编写自己的检查器来维护/检查您的内部编码指南。
  6. 发现漏洞问题的有效性。
  7. 报告和指标(100 多种报告格式和 400 多种指标)
  8. 过滤问题——删除报告中的第 3 方代码、创建模块报告、团队报告等,
  9. 快速——尽管他们根据您的本地构建设置创建 AST,但 Klocwork 引擎仍然快速有效。
  10. 自动化——自动化——自动化。Klocwork 构建可以自动化,因为它具有丰富的命令行工具。另外,Klocwork 有可用于 Jenkins 和 Teamcity 的直接插件。
  11. 简单部署——客户端服务器架构
  12. 文档 – Klocwork 的文档和演示视频可在线获取(开放)。您只需打开 google 并说“Klocwork C 和 C++ 检查器列表”,您将获得带有正确解释的 Klocwork 检查器列表。
  13. 支持 – Klocwork 支持团队对用户非常友好。
  14. 许可 – 简单许可。没有隐藏费用。

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

于 2020-06-13T15:45:18.597 回答