Code Diff in CppDepend
使用 CppDepend 掌握源代码差异
本文档说明如何在交互式界面中使用 CppDepend 的构建比较功能。该文档 代码差异报告 说明如何在报告场景中使用 CppDepend 的构建比较功能。
入门视频 (2:30分钟)
了解如何使用 CppDepend 的代码差异功能。
简介
代码演化和代码维护是软件工程最突出的特征之一。
自 2009 年中以来,CppDepend 提供了一些高级的代码演变和代码差异功能。CppDepend 集成到 Visual Studio 中最酷的成果之一是,开发人员现在可以在其自然开发环境中一键使用多种细粒度的代码差异功能。让我们介绍 3 个典型的代码差异场景。
从VisualCppDepend中进行代码差异
例如,可以在 Code Browser 中右键点击一个项目并请求 选择代码已更改的(项目)方法.

这将生成一个 CQLinq 查询,该查询 选择代码已更改的(项目)方法 当然,对于列出的每个方法,可以直接跳转到源代码声明或请求差异比较。

通过搜索面板进行代码变更审查
Search Change 面板实际上只是一个与代码变更相关的 CQLinq 查询生成器。例如,在下面的屏幕截图中,我们可以看到查询 Method + Change + Code was Changed or was Added 生成CQLinq查询:
1from m in Application.Methods23where m.CodeWasChanged() || m.WasAdded()45select new { m, m.NbLinesOfCode }
显示的结果非常适合高效地 代码变更审查:不仅所有代码变更都一目了然地整齐组织,而且对于每个重构的方法,开发人员只需单击一下即可查看源文件中的差异。

Search Change 面板的选项提供了探索差异的各种可能性,包括搜索仅代码(非注释)被修改的代码元素,或仅注释被修改的代码元素,可见性被修改的元素,被添加或删除的元素等等……
一个附加选项是在第三方代码中搜索差异,例如查询哪些库类型不再被使用。
通常,开发人员喜欢编写测试来自动测试重构后的代码和新代码。另一个很棒的附加选项是将差异搜索与测试代码覆盖率结合起来,例如查询代码已更改(即重构过的方法)但实际上未被测试充分覆盖的方法。
从Visual Studio中进行代码差异
正如我们刚才看到的,源代码右键菜单中有一个 CppDepend 菜单,Visual Studio 源代码编辑器中也有一个 CppDepend 菜单。由于 CppDepend 能识别当前在源代码中编辑的代码元素,用户可以例如右键单击一个方法,查看它是否被更改过。如果方法代码确实被更改了,右键 CppDepend 菜单中会出现几个选项。其中一个选项是 比较源文件的旧版本和新版本,这会打开一个文本 diff 应用程序来查看更改

例如这是 VS 2012扩展差异工具 通过点击打开 比较源文件的旧版本和新版本 在 NUnit v2.4.8 对比 v2.5.3 方法 IsPlatformSupported().

回顾上面的第一张截图,您会看到其他几个有趣的选项,包括 在旧源代码中打开我的声明.
需要明确的是,不仅方法变更会被考虑,命名空间、类型和字段的变更也会被考虑。例如,可以右键单击命名空间源代码声明,查询该命名空间中已被重构或添加的类型或方法。
此时您可能想知道 CppDepend/Visual Studio 如何知道用于比较的先前代码版本(即所谓的比较基线)。本文稍后会解释这个概念,让我们跳到第二个代码差异场景。
定义比较基线
在本文前面,我们介绍了以下概念 比较基线。这代表用于进行比较的代码库先前快照版本。通常,比较基线代表生产环境中代码的最新版本。
可以通过菜单指定用于比较的基线: Diff > Define The Two Snapshots to Diff > Define the project's Baseline for Comparison。下面的对话框出现,允许您通过不同选项定义基线。Baseline for Comparison 选项随后会保存在 CppDepend 项目文件中。

最后,任何 diff 工具都可以通过菜单接入 差异 > 源文件比较工具.
