博客 阅读时间 3 分钟

充分利用 Cppcheck

分享本文
Make the most of CppCheck.

静态代码分析是检测软件源代码中缺陷的过程。静态分析工具可用于检测常见的编码错误;以下是使用它们的一些好处:

  • 让源代码更可读、更易维护。
  • 防止运行时出现意外行为。
  • 优化执行性能。
  • 让代码更安全。

在 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 问题:

cppcheck2

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

cppcheck3

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

cppcheck4

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

cppcheck6

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

cppcheck12

2. 生成问题趋势图

项目中存在问题并不罕见;任何项目都可能有许多问题要解决。然而,我们必须关注项目的质量趋势。确实,如果问题数量随着项目的变更和演进而增加,那是个坏兆头。CppDepend 提供了趋势监控功能来创建趋势图。

趋势图由分析过程中随时间记录的度量值构建而成。默认提供超过 50 个趋势度量,创建自己的趋势度量也很容易。

借助这张趋势图,我们可以监控 Cppcheck 问题的演变:

cppcheck7

3. 生成自定义 HTML 报告

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

cppcheck10

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

cppcheck11

4. 把 Cppcheck 集成到构建流程中

CppDepend 引入了“关键 CQLinq 规则”(Critical CQLinq Rule)的概念。关键规则用于定义绝不能被违反的高优先级规则。借助关键规则,可以在关键规则被违反时中断构建流程。

关键规则就是勾选了关键规则标志的 CQLinq 规则:

在构建过程中,当关键规则被违反时,进程CppDepend.Console.exe会返回非零退出码。利用这一行为,可以在关键规则被违反时中断构建流程。

我们可以轻松定义一条 Cppcheck 关键规则:一旦发现某些类型的 Cppcheck 问题,就中断构建。

小结

CppDepend 对其他静态分析工具持开放态度,您也可以轻松接入自己定制的工具,如此处所述。这样,您就能利用 CppDepend 的所有功能,更好地探索来自知名 C/C++ 静态分析工具的结果。

特别感谢 Daniel 允许我们把他出色的工具嵌入 CppDepend。

分享本文