静态代码分析是检测软件源代码中缺陷的过程。静态分析工具可用于检测常见的编码错误;以下是使用它们的一些好处:
- 让源代码更可读、更易维护。
- 防止运行时出现意外行为。
- 优化执行性能。
- 让代码更安全。
在 C++ 世界里,Cppcheck 是检测 C++ 代码库问题的最流行工具。探索 Cppcheck 结果有几种方式。
- XML 格式:Cppcheck 可以生成 XML 文件,它们可用于创建自定义的 HTML 报告,或被其他工具用来探索分析结果。
- HTML 格式:HTML 报告是展示 Cppcheck 问题的便捷方式;它可以存放在服务器上,与团队共享。
- IDE 插件:有许多 Cppcheck 插件可以直接在 IDE 中查看问题。
几年前,我们为CppDepend添加了导入其他工具结果并在 CppDepend 中查询它们的功能。我们询问了 Cppcheck 的首席开发者 Daniel,是否可以把他的工具集成到 CppDepend 中。他回答说:“一整套工具总比只用 1 个工具好”——所以嵌入他的工具毫无问题。
让我们来探索 CppDepend 为 Cppcheck 用户提供的各种可能:
1. 用 CQLinq 查询问题
使用 CQLinq,可以像查询数据库一样查询问题。例如,您可以获取所有 Cppcheck 问题:

或者获取出现最频繁的问题:

识别问题最多的类也很有用:

前面这条查询很有用,但它并不能准确告诉我们哪些类的质量最差;另一个值得考虑的有用度量是代码行数(NBLinesOfCode)。我们可以修改前面的查询,计算问题数量与代码行数之间的比率。

我们还可以搜索那些被频繁使用且存在问题的办法。这类方法中的缺陷应当被赋予最高的修复优先级。

2. 生成问题趋势图
项目中存在问题并不罕见;任何项目都可能有许多问题要解决。然而,我们必须关注项目的质量趋势。确实,如果问题数量随着项目的变更和演进而增加,那是个坏兆头。CppDepend 提供了趋势监控功能来创建趋势图。
趋势图由分析过程中随时间记录的度量值构建而成。默认提供超过 50 个趋势度量,创建自己的趋势度量也很容易。
借助这张趋势图,我们可以监控 Cppcheck 问题的演变:

3. 生成自定义 HTML 报告
CppDepend 可以在 HTML 报告中追加额外的报告章节,列出一些 CQLinq 查询。在 CQLinq 查询资源管理器面板中,被纳入报告的特定 CQLinq 查询组会用橙色矩形框标出。

而在 HTML 报告中,可以从菜单访问这些新增的章节:

4. 把 Cppcheck 集成到构建流程中
CppDepend 引入了“关键 CQLinq 规则”(Critical CQLinq Rule)的概念。关键规则用于定义绝不能被违反的高优先级规则。借助关键规则,可以在关键规则被违反时中断构建流程。
关键规则就是勾选了关键规则标志的 CQLinq 规则:

在构建过程中,当关键规则被违反时,进程CppDepend.Console.exe会返回非零退出码。利用这一行为,可以在关键规则被违反时中断构建流程。
我们可以轻松定义一条 Cppcheck 关键规则:一旦发现某些类型的 Cppcheck 问题,就中断构建。
小结
CppDepend 对其他静态分析工具持开放态度,您也可以轻松接入自己定制的工具,如此处所述。这样,您就能利用 CppDepend 的所有功能,更好地探索来自知名 C/C++ 静态分析工具的结果。
特别感谢 Daniel 允许我们把他出色的工具嵌入 CppDepend。
