评估应用程序代码的质量通常是一个主观过程。 这就是为什么我们转向代码指标—定量测量为我们的应用程序代码提供有价值的见解的原因。 开发人员可以利用代码指标来了解代码的质量,了解潜在的问题,并确定需要重构哪些类型和方法以提高质量。
静态代码分析工具用于测量应用程序中的代码质量,而无需执行应用程序。 .Net有许多静态代码分析工具。 其中包括FxCop,StyleCop,ReSharper,CodeIt.Right,NDepend等。本文讨论了如何使用NDepend可视化代码质量并采取措施改善代码质量。
什么是NDepend,为什么要使用它?
NDepend是一个静态代码分析器,可与Visual Studio很好地集成在一起,并为确定代码质量提供了宝贵的指标。 NDepend以列表,矩阵,图形,树形图和图表的形式显示这些指标。 连同这些指标,NDepend可以分析您的代码并针对大型规则数据库报告违规情况。
NDepend保存每个分析的结果,因此您可以在改善代码覆盖率或代码质量之后比较结果。 它既可以作为独立应用程序运行,也可以作为Visual Studio中的扩展运行。 而且,您可以利用NDepend Azure DevOps扩展功能将NDepend与Azure中的项目集成。
以下是NDepend的一些引人注目的功能:
- 大量的代码规则以检查是否合规
- 许多用于查看代码指标的图表
- 与Visual Studio 2010、2012、2013、2015和2017完美集成
- 使您能够探索模块之间的依赖关系
- 提供CQLinq(通过LINQ进行代码查询)以自定义分析
- 测量代码覆盖率
- 识别难以维护的代码并估算技术债务
- 创建趋势图
NDepend入门
要开始使用NDepend,您需要下载并安装它的副本。 您可以从此处下载NDepend的试用版 。 它将打包为.zip文件。
解压缩NDepend安装程序.zip文件后,您将在其中找到以下文件:
- NDepend.Console-用于与构建过程集成
- NDepend.PowerTools —开源静态分析器的集合
- NDepend.VisualStudioExtension.Installer —为NDepend安装Visual Studio扩展
- VisualNDepend — NDepend的GUI客户端
您可以通过以下两种方式之一安装NDepend的Visual Studio扩展:
- 运行NDepend.VisualStudioExtension.Installer
- 运行VisualNDepend,然后选择“安装Visual Studio Extension”
一旦安装了Visual Studio Extension for NDepend,就可以在Visual Studio IDE中利用指标,规则,报告,图形,分析器结果和工具。 您还可以利用Visual NDepend来分析解决方案和项目,而不必启动Visual Studio。
NDepend的Visual Studio扩展可通过Visual Studio 2017用于Visual Studio2010。请注意,我将其与Visual Studio 2017一起使用。
使用NDepend分析源代码
要开始分析源代码,可以单击“分析VS解决方案和VS项目”。 可用的其他选项是“分析文件夹中的.Net程序集”,“分析一组.Net程序集”和“比较2个版本的代码库”。 最后一个选项可让您比较两个版本-一个不错的功能!
为了简单起见,我将在这里使用我最近一篇文章中的源代码(“ 如何在ASP.Net Core中使用Lamar ”)。 单击“分析VS解决方案和VS项目”后,将显示一个新窗口,如下图1所示。

图1:选择一个或多个要分析的Visual Studio解决方案或项目。
现在,您可以单击“浏览”并指定您要NDepend分析的项目的解决方案文件。

图2:选择要分析的VS解决方案。
最后,单击“分析单个.Net程序集”以开始分析,如下图3所示。

图3:分析.Net程序集。
这将对所选项目运行代码分析。 分析完成后,NDepend将显示一个带有以下选项的窗口:
- 查看NDepend仪表板
- 显示NDepend交互式图
- 浏览器NDepend代码规则
- 关闭对话框
让我们选择查看NDepend仪表板。 输出如下所示:

图4:NDepend仪表板。
NDepend向您显示代码行,有关类型,债务的信息,源代码中的注释,覆盖范围信息,方法复杂性,质量门以及已违反的规则以及其他问题。
NDepend功能
依赖图和依赖矩阵
NDepend还向您显示了代码的依赖图和依赖矩阵。 前者提供了项目中依赖关系的图形视图,而后者则提供了对名称空间和类型的依赖关系组织的代码的表格视图。
趋势图
趋势图在仪表板中可用。 这些图表提供了有关项目源代码质量如何随时间变化的预览。 您还可以创建自己的自定义趋势图。

图5:NDepend中的趋势图。
圈复杂度
循环复杂度是对源代码中线性独立路径的定量度量,可以帮助您了解程序的复杂度并提高代码覆盖率。 您可以利用NDepend分析应用程序代码中的圈复杂度。 您可以在本文中了解有关圈复杂度的更多信息 。

图6:在NDepend中测量圈复杂度。
使用CQLinq查询
CQLinq是NDepend最引人注目的功能之一。 CQLinq使您可以使用LINQ查询.Net代码。 您可以利用CQLinq查询代码债务,问题,规则和质量门。

图7:运行中的NDepend的CQLinq!
让我们看一个例子。 以下CQLinq查询显示循环复杂度大于20的非抽象方法的方法名称和循环复杂度,按循环复杂度值的降序排列。
from m in Application.Methods
where m.CyclomaticComplexity >= 20 && !m.IsAbstract
orderby m.CyclomaticComplexity descending
select new { m, m.CyclomaticComplexity }
这是CQLinq查询的另一个示例。 该代码在执行时将显示具有100多行代码的方法的名称。
from m in Methods where m.NbLinesOfCode > 100 select m
要了解有关CQLinq的更多信息,可以在此处参考NDepend文档 。
NDepend是一个静态代码分析工具,可以为您提供有关应用程序代码的宝贵见解。 您可以将NDepend作为独立应用程序运行,也可以集成在Visual Studio中。 尽管NDepend不是免费的,但考虑到其强大的功能,其价格合理,并且可用于所有最新版本的Visual Studio。
如果您想要学习NDepend的大量资源,我强烈推荐Eric Dietrich编写的Pluralsight课程“ 实用NDepend ”。
From: https://www.infoworld.com/article/3373847/measure-the-quality-of-your-net-code-with-ndepend.html