visual studio实现代码度量与分析:圈复杂度,可维护性指数,继承深度,类耦合度,代码行数

-- visual studio实现代码分析与度量:圈复杂度,可维护性指数,继承深度,类耦合度,代码行数--持续更新
【官网】:https://learn.microsoft.com/zh-cn/visualstudio/code-quality/code-metrics-values?view=vs-2022

应用场景

在研发团队中,一些代码质量的量化管理和监控一直是一个难题。 同时软件的复杂性也增加了使代码可靠和可维护的难度。 代码度量是一组软件度量值,使开发人员可以更好地了解他们正在开发的代码。 开发人员利用代码度量可以了解应修改哪些类型和/或方法或对其进行更全面的测试。 开发团队可确定潜在风险、了解项目的当前状态以及在软件开发过程中跟踪进度

基础资源

建议visual studio 2017或以上.

使用须知

.NET 代码质量分析器包括几个代码度量分析器规则: CA1501 CA1502 CA1505 CA1506 这些规则默认处于禁用状态,但你可以从“解决方案资源管理器”或在 EditorConfig 文件中启用它们。 例如,若要启用规则 CA1502 作为警告,EditorConfig 文件将包含以下条目:

配置步骤


A)为什么要有代码度量.

现代软件程序越来越强大也越来越复杂,这同时也使代码可靠和可维护的难度增加。 代码度量是一组软件度量值,使开发团队可以更好地了解他们正在开发的代码质量。 开发人员利用代码度量可以了解应修改哪些类型和/或方法或对其进行更全面的测试和优化重构。 开发团队也可以确定潜在风险、了解项目的当前状态以及在软件开发过程中的质量管理进度。

研发团队可使用 Visual Studio (建议vs2017以上)生成代码度量数据,以衡量其托管代码的复杂性和可维护性。 可为整个解决方案或单个项目生成代码度量数据。

B)代码度量的指标说明。


  • 可维护性指数 - 计算介于 0 到 100 之前的指数值,它表示维护代码的相对难易程度。 较高的值表示可维护性更高。 颜色编码评级可用于快速标识代码中的故障点。 绿色评级介于 20 到 100 之间,表示代码可维护性良好。 黄色评级介于 10 到 19 之间,表示代码可维护性适中。 红色评级是介于 0 到 9 之间的评级,表示可维护性低。 有关详细信息,请参阅可维护性指数的范围和含义

最初计算代码度量的方法如下所示:Maintainability Index = 171 - 5.2 * ln(Halstead Volume) - 0.23 * (Cyclomatic Complexity) - 16.2 * ln(Lines of Code)

使用此公式意味着值的范围是从 171 到无限负数。 当代码趋向于 0 时,显然很难维护代码,并且值为 0 的代码和为某个负值的代码之间的差异没什么用处。 由于负数的用处很低,并且我们希望让指标尽可能清晰,我们决定将所有 0 或更小的指数都视为 0,然后重新定义 171 或定义成更小的范围,即 0 到 100。 出于此原因,我们使用的公式是:

Maintainability Index = MAX(0,(171 - 5.2 * ln(Halstead Volume) - 0.23 * (Cyclomatic Complexity) - 16.2 * ln(Lines of Code))*100 / 171)

除此之外,我们还决定了对阈值采取保守策略。 理想情况是,如果指数显示为红色,我们可以十分确定地表示代码存在问题。 由此阈值情况如下所示:

对于阈值,我们决定将这个 0-100 的范围分解为 80-20,以维持干扰的低级别,并且只标记可疑的代码。 我们使用了以下阈值:

          0-9 = 红色 

          10-19 = 黄色

           20-100 = 绿色

  • 圈复杂度 - 度量代码的结构化复杂度。 通过计算程序流中不同代码路径的数目来得到该值。 具有复杂控制流的程序需要进行更多测试才能实现良好的代码覆盖率,而且可维护性较低。 有关详细信息,请参阅 气旋复杂性

  • 继承深度 - 指示彼此继承、一直继承到基类的不同类的数量。 继承深度类似于类耦合,因为基类中的更改可能会影响其任何继承的类。 此数字越大,继承越深入,基类修改导致中断性变更的可能性就越大。 就继承深度而言,较小的值更适合,而较大的值则不适合。 有关详细信息,请参阅 继承深度

  • 类耦合 - 通过参数、本地变量、返回类型、方法调用、泛型实例化或模板实例化、基类、接口实现、在外部类型上定义的字段和特性修饰来度量与唯一类的耦合度。 良好的软件设计决定类型和方法应具有高内聚和低耦合度。 高耦合度表明一个设计由于与其他类型有许多相互依存关系而难以重用和维护。 有关详细信息,请参阅类耦合

  • 源代码行 - 表示源文件中存在的源代码行(包括空行)的确切数目。 此度量从 Visual Studio 2019 版本 16.4 和 Microsoft.CodeAnalysis.Metrics (2.9.5) 开始可用。

  • 可执行代码行 - 表示可执行代码行或操作的大致数目。 这是对可执行代码中操作数的计数。 此度量从 Visual Studio 2019 版本 16.4 和 Microsoft.CodeAnalysis.Metrics (2.9.5) 开始可用。 该值通常与上一个度量代码行(即在旧模式下使用的基于 MSIL 指令的度量)接近。


C)如何生成代码度量分析数据?

可以通过三种法生成代码度量数据:



D)如何改变代码度量的规则集合?


.NET 代码质量分析器包括几个代码度量分析器规则:

这些规则默认处于禁用状态,但你可以从“解决方案资源管理器”或在 EditorConfig 文件中启用它们。 例如,若要启用规则 CA1502 作为警告,EditorConfig 文件将包含以下条目:

C#复制
dotnet_diagnostic.CA1502.severity = warning

常见问题

快速入门

参考资料