九大顶级静态代码分析工具

Blog
Author:
Dori ExtermanDori Exterman
Published On:
6月 30, 2021
Estimated reading time:
1 minute

C++DevOpsDevSecOps敏捷开发、速度和左移策略,这些话题总是说不完道不尽,但这些也都与静态代码分析工具息息相关。这样看来,静态代码分析的前景不容忽视。

静态代码分析在自动化、安全性和速度方面(至少对比手动检查的速度)的价值是有目共睹的。随着代码膨胀趋势到来,庞大代码库(C++peopleC++)的问题更值得注意。

尽管如此,有些人还是觉得静态代码离热门技术相去甚远。事实上,静态代码分析工具的数量已经开始发展,其中不乏一些 C++ 专用工具。但很多开发者还是将其视为“锦上添花”东西,是奢侈品,而不是必须品。诚然,在整个代码库上运行完整的静态代码分析耗时较长,这也是阻碍静态代码分析的重要因素。

然而,越来越多的开发人员开始意识到,静态代码分析有助于提高产品质量、安全性,甚至缩短上市时间。数据不会说谎,静态代码分析的市场已呈增长趋势。据 MarketWatch 调查,2019 全球静态代码分析软件市场规模为 6 亿 4320 万美元,预计到 2026 年底将达到 17 亿 3940 万美元。这个惊人的增长趋势,也督促着我们赶快去了解顶级 C++ 静态代码分析工具。所以,让我们直入正题。

1. Klocwork (Perforce)

Clocwork logo

谈到 C++ 静态代码分析工具,首当其冲的必然是 Perforce 公司的 Klocwork 工具。在静态代码分析领域,Klocwork 算得上是领头羊,这可能也与其专攻大型代码库的优势相关。Klocwork 1000 多个检查器,对症不同种类代码缺陷,同时用户可定制检查方案。此外,假正例(false positives)与假负例(false negatives)等代码缺陷筛查也是其优势功能(很多工具目前无法做到)。除此之外,Klocwork 可提供差异分析,这个功能并不常见。因此,用户可以大幅节省新代码或修改代码的分析时间。Klocwork 不仅是一个静态代码分析工具,同时也是一个 SAST(静态应用程序安全测试工具),几乎全面覆盖了安全性能方面。此外,它还集成了许多 IDE CI/CD 工具。最关键的是,Klocwork 还与 Incredbuild 深度集成,全马力加速代码分析

2. Cppcheck

Cppcheck logo

Cppcheck 是另一个热门的静态代码分析工具,集开源、免费、跨平台且专用于C C++ 的优势于一身。Cppcheck 最大的特点是易用性,操作简单为它吸引了一大批用户。使用 Cppcheck 时,用户无需做任何调整或修改,这也是初学者爱用 Cppcheck 的主要原因。另外,Cppcheck 的假正率(false positives)较低,这也是这个工具的另一优势。

3. CppDepend (CoderGears)

CppDepend logo

CppDepend 是一个商业的 C++ 静态代码分析工具。有别于其他工具,CppDepend 专注于分析而不是纠错,同时搭建可视化代码库体系结构(例如,正确分层、依赖关系),因此经常作为其他静态代码分析工具的补充。CppDepend 的依赖关系图、趋势监控(监控构建变化)都是很值得深入研究的独特功能。与 Klocwork 一样,CppDepend 也支持用户自定义规则。

4. Parasoft C/C++test

Parasoft logo

Parasoft C/C++test 是流行的 C/C++ 商业测试工具,其中包括静态代码分析工具。Parasoft C/C++test 主要面向企业和嵌入式应用程序(出于安全原因,这些行业通常需要获得静态代码分析工具),以及动态代码分析、单元测试、代码覆盖、运行时分析等功能。在静态代码分析方面,Parasoft 工具的独特之处在其丰富的技术和规则,数量高达 2500 条。此外,Parasoft 还提供认证套件(Qualification Kit)和功能安全认证。不过,Parasoft 真正的价值在于全面性,其代码分析、检测功覆盖了整个周期,包括:分析代码、确定结果优先级和管理结果(包括将结果分配给团队成员)。最近,Parasoft 宣布支持 IAR Systems 针对 Linux for Arm 的构建工具,该工具可帮助开发人员在 Linux 服务器上配置快速、可扩展的 CI/CD 管道。

5. PVS Studio

PVS Studio logo

顶级静态代码分析工具榜单,PVS Studio 必须榜上有名。PVS Studio 作为一个商业工具,专长是深度检测,挖掘一般注意不到的隐藏 bug,如打字错误、复制粘贴错误。此外,PVS Studio 还与流行的 CI 工具集成,如 JenkinsTeamCityAzure DevOps 等。SonarQube 也在其集成列表之内,SonarQube 是一种与静态代码分析工具很类似工具,但它更偏向于检测代码方面。PVS Studio 的另一个独特优势在于其文档内容,包含了超过 700 页的海量信息。如想进一步了解 PVS Studio Incredibuild 的集成内容,请阅读这篇博客

6. Coverity (Synopsys)

Synopsys logo

Coverity 静态分析名气不小。Coverity 主要用于在编写代码时查找错误和弱点,为开发者节省时间,也避免了后续的麻烦。此外,Coverity 还有提供了一个免费的云服务,Coverity Scan,主要针对开源社区。这个功能以准确性、全面性著称,其代码分析较同类工具更为深入,检查器的开发也建立在对 100 多亿行代码的深入分析基础上。

7. Polyspace (MathWorks)

MathWorks logo

Polyspace 是一个静态分析工具,可识别、修复或挖掘潜在的运行时错误(如:除以零),并检查源代码是否遵循 MISRA CMISRA C++ JSF++ 等代码标准。此外,Polyspace 还可以将必须手动审查的未经验证代码突出显示。其广泛用于嵌入式软件领域,尤其是安全性能至上的交通运输领域,如汽车、航空航天和铁路运输领域。

8. Flawfinder

Flawfinder logo

Flawfinder 是由安全专家 David A. Wheeler 开发的免费开源工具。正如其品牌名称代表的含义,Flawfinder 专注定位安全缺陷,并按风险级别排序(风险最高者排在第一位)。Flawfinder 使用直接、简单和快速,备受初学者喜爱。

9. Helix QAC (Perforce)

Helix logo

Helix QAC Perforce 针对 C C++ 开发的另一个出色的代码分析工具,在“严格管制和安全至上行业”中很受欢迎,例如汽车行业。Helix QAC 自动强制执行编码标准,如 MISRA®,以确保代码符合要求。

明智使用工具

以上的任何一种工具都已足够我们进行代码分析,不过,结合几种工具,取长补短也未尝不可。通过组合各种静态代码分析工具,将故障一网打尽,这才是我们的目标。不过,选择一个还是多个工具也各有优劣,因为我们可能会收到相互冲突的信息,同时误报率也会上升。事实上,研究表明,有时单个工具的性能优于最佳工具组合。不过,这也不能否定工具组合的价值。因地制宜,因时制宜,建议大家多进行尝试,看看哪种方式最适合你的环境。

另外,如果你正在考虑代码分析工具,并且想知道哪个(或哪几个)工具最适合,请记得上述讨论的性能问题。静态代码分析,在大多数情况下需要花费大量的时间成本。所以,不难理解,许多开发人员完全跳过了代码分析这一步,或者很少进行代码分析。毕竟,高昂的时间成本会阻碍敏捷开发。

不过在 Incredibuild,我们非常熟悉静态代码分析工具的性能(以及动态代码分析)。为什么?不是因为我们只喜欢静态代码分析工具,也不是因为我们经常使用,而是我们可以对其进行全马力加速,让代码分析更加快速。在加快开发速度的过程中,代码分析工具也能一并使用。上面提到的让开发者望而却步的时间问题,Incredibuild 可以圆满解决,同时也避免了开发人员耗费周末时光进行代码分析的难题(因为运行代码分析可能需要 20 个小时)。总之,Incredibuild 让时间不再是障碍。因此,最佳组合必然是 Incredibuild + 静态代码分析工具。