C++ 静态分析工具选型与 CI 集成
June 26, 2021About 3 min
C++ 静态分析工具选型与 CI 集成
给一个 C++ 项目接静态分析,要先回答两个问题:用哪个分析器、报告怎么汇总展示。这篇记一次实际选型的过程和结论——评估了九款工具,最后落在 PVS-Studio 出报告 + SonarQube 做看板这套组合上。
评估维度
挑工具时主要看五点:
- 可靠性——能查出多少真实的错误和风险,直接决定它对代码质量和安全的帮助。
- 扫描方式——是纯文本静态分析,还是要先编译、构建 AST 再分析。后者通常更准,但接入成本更高。
- 扫描速度——出一份报告要多久。
- 可集成性——接到 CI(Jenkins 等)和看板里难不难。
- 是否支持 SonarQube——能不能把报告喂给 SonarQube 统一展示。
候选工具对比
| 工具 | 授权 | 扫描方式 | 关键结论 |
|---|---|---|---|
| CppCheck | 免费开源 | 纯静态分析 | 不做编译,因此查不出编译期错误,可靠性低于会编译的工具;但免费、易集成、支持 SonarQube。 |
| Clang Static Analyzer | 免费开源 | 静态分析 + 编译 | 准确度好;但要把 VS 工程转成 makefile 工程才能用。 |
| Clang-tidy | 免费开源 | 静态分析 + 编译 | 同上,需 Xcode 或 makefile 工程。 |
| Clang Power Tool | 免费,VS 扩展 | 静态分析 + 编译 | 把 Clang-tidy 和 Clang Static Analyzer 整合进 VS,并提供 PowerShell 脚本便于 CI 自动化;但不支持主机平台工程(NX/PS4)。 |
| PVS-Studio | 商业 | 静态分析 + 编译 | 结果比 CppCheck/Clang-tidy/PC-lint 更详细;有 VS 插件可边写边查;支持主机平台(NX/PS4/XB1)。仅企业版支持 SonarQube。 |
| Coverity Scan | 免费(云服务) | 云端服务 | 面向开源社区的免费云端分析,集成 GitHub 和 Travis CI。 |
| Coverity Analyzer | 商业 | 静态分析 + 编译 | 可靠性很高,但非常贵,试用版都难拿到。 |
| PC-lint Plus | 商业 | 静态分析 + 编译 | 没有 VS 插件,集成性差。 |
| Visual Lint | 商业 | 静态分析 + 编译 | 本身是个壳,包了 CppCheck、PC-lint、Vera++、google cpplint 等;其中 PC-lint 还要另外单独买。 |
评级口径:原始评估用 1–5 分(1 最弱、5 最强)。这里只保留能站得住的定性结论,没把每一格的分数照搬——那张评分表本身列错位、不少格子是空的,照抄等于编数字。
最终选型:PVS-Studio + SonarQube
综合下来选了 PVS-Studio 做分析、SonarQube 做汇总看板,接进 Jenkins 的 CI 流程跑真实项目。
为什么是 SonarQube
SonarQube 社区版免费开源。它自己不分析 C++,但可以接收别的分析器产出的报告,统一展示。选它的理由:
- 和 Jenkins 集成简单。
- 看板清晰专业,开发者能直接看到 bug、code smell 等分类。
为什么是 PVS-Studio
PVS-Studio 能检测 C/C++/C# 代码里的 bug 和安全弱点,跨 Windows/Linux/macOS。它做静态分析并产出报告,擅长抓拼写错误和 Copy-Paste 类错误。选它而不是其它工具:
- 支持主机平台工程(NX、PS4、XB1)——Clang Power Tool 不支持,这点对主机项目是硬门槛。
- 分析结果比 CppCheck、Clang-tidy、PC-lint 更详细。
- 有 VS 插件,能边写代码边查。
其它工具被刷掉的原因
- CppCheck:不编译,可靠性不够。
- Clang-tidy:要 Xcode 或 makefile 工程,改造成本高。
- Clang Power Tool:不支持主机工程。
- Coverity:太贵。
- PC-lint:没有 VS 插件。
选型结论和「是否做主机平台」强相关。如果只发 PC,免费的 Clang Power Tool 已经够用;一旦要覆盖 NX/PS4/XB1,能跑主机工程的分析器就剩下不多,PVS-Studio 是其中接入体验最好的。