Visual Studio 2008中代码分析中代码度量功能

翻译自:

http://blogs.msdn.com/fxcop/archive/2007/10/03/new-for-visual-studio-2008-code-metrics.aspx

Visual Studio 2008 引入了一项新的功能,代码度量(Code Metrics),来帮助程序员找出那些复杂而不可维护的代码。

下面是针对一个虚构的应用程序做的代码度量:

从上面的运行结果可以看出,主要有五方面的度量指标,下面来分别讲解。

类型间耦合度(Class Coupling)

针对左边的每一个层次,这个度量值表示这个层次的项依赖于其他类型的个数。统计数量排除了基本数据类型和其他内建类型,比如Int32, String或者Object。

数值越高,这个项受其他依赖项的变化影响越大。数值越低,表明本项被重用的可能性越大。下图表示如何计算耦合度数值:

如图所示,Account与另外两个类型耦合,Address和Order,所以耦合度是2.但是, Country不依赖于任何其他类型,所以耦合度是0.

继承的深度(Depth of Inheritance)

在类型这个层次,继承的深度表明在继承树上,有多少个类型在这个类型之上。比如,一个类型直接从Object派生,则继承深度为1。

在命名空间和项目层次上,继承深度是它所包含的所有类型中继承深度的最大值。继承深度不考虑接口的实现深度。

继承深度越大,可能带来“过度设计”的问题,测试和维护的难度都会加大。

下面是继承深度的计算方法:

如图所示,在上面的继承关系中,ListControl和Label的继承深度为3,而Component的继承深度为1.

圈复杂度(Cyclomatic Complexity)

针对每个层次,本度量值表示代码中独立路径的总数。统计方法就是简单地计算决策点的数量,决策点包括if代码块,switch的case语句,do, while, foreach 和for loops。

这个度量值也很好的表明了要达到全覆盖测试时,需要的单元测试的数量。 

通常来说,这个度量值越小越好。

下面介绍复杂度的计算原理:

代码行数(Lines of Code)

针对每个层次,本度量值表示可执行的代码的总行数,不包括空格,注释,括号,成员申明以及类型、命名空间本身占用的行。

通常来说,行数越少越好,呵呵。

下面是代码行数的计算方法:

可维护性指数(Maintainability Index)

在成员和类型层次,用0到100之间的一个数值来表明成员或者类型的可维护性。

在命名空间和程序集层次,可维护性指数是它包括的所有类型的指数的平均值。本指数基于很多其他的度量值,包括霍尔斯特德量 (Halstead Volume,霍尔斯特德提出的关于软件科学的理念,并引入物理领域的分析方法提出的一个计算软件复杂度的概念,通过分析操作符和操作数得出。),圈复杂度和代码行数。

数值越低,表明代码可维护性越差。

可维护性指数通过不同的图标来直观的表明某个项的可维护性,如下表:

        图标        可维护性水平             取值范围

    绿色        可维护性高               20<=可维护性指数<=100

    黄色        可维护性中等             10<=可维护性指数<=19

    红色        可维护性低                0<=可维护性指数<=9

这些指示标记让问题一目了然,方便解决。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章