这些工具之间有根本区别吗?毕竟klocwork比较贵,其他的都是免费的?两者都在遵循一些规则后进行静态代码分析。
规则的质量是否存在差异?它只取决于规则吗?你的经验是什么?
这些工具之间有根本区别吗?毕竟klocwork比较贵,其他的都是免费的?两者都在遵循一些规则后进行静态代码分析。
规则的质量是否存在差异?它只取决于规则吗?你的经验是什么?
无论是在检查器的深度,还是在缺陷跟踪和误报抑制方面,您都能得到您所付出的。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,可让您编写自己的检查器。)
LLVM 有一个名为Clang 静态分析器的静态分析工具。
Clang 静态分析器和 cppcheck 是开源的(允许您编写自己的检查/修改现有的检查),而 klockwork 是专有的(有一个 API 可以编写自己的检查)。
至于检查的质量 - 你必须自己尝试,我试图根据事实而不是意见来做出这个答案。不过,没有什么能阻止您使用多个静态分析工具。
Clang-tidy 有点不同,它称自己为“linter”工具,虽然它可以用于静态分析,但它还为它可以找到的一些缺陷提供自动修复。在内部 clang-tidy 使用抽象语法树来表示您的代码。为了构建这个 AST,代码必须能够被 clang 编译,这在某些代码库中可能是一个(可能是主要的)缺点。
有关提供自动修复的 clang-tidy 检查列表,请参阅此答案。
是的,clang-tidy 或 cppcheck 与 klocwork 相比存在根本区别。
Klocwork 包装器将监视您的构建并根据您的编译器名称构建设置(包括自定义系统调用)创建构建规范文件。使用此构建规范文件 Klocwork 进行过程间分析并在后端创建抽象语法三。然后它将尝试覆盖 100% 的代码和 100% 的路径。所以 Klocwork 分析会更准确,它可以检测出代码中真正的缺陷。
Klocwork 也可以检测数据流问题。
我相信 clang-tidy 或 cppcheck 引擎会逐行分析。另一方面,Klocwork 引擎进行程序间分析。Klocwork 可以检测文件相关问题以及大多数其他工具无法检测到的问题。Klocwork 在查找内存泄漏、缓冲区溢出、NULL 异常、死锁、并发问题等关键检测方面非常强大。
我们评估了多个静态代码分析器并以 Klocwork 结束。
我会告诉你为什么我们选择 Klocwork 而不是任何其他 SCA 工具,
我想说,对 Klocwork 进行免费评估并在您的项目中进行测试。我相信你会喜欢的。