本文挡描述的是
Logiscope——Audit中常用的系统度量元的具体含义。
对每个度量元的解释分为以下几部分:
首先是该度量元的原文名称,后面是该度量元的代号,跟在后面的是Audit质量模型为该度量元设的参考值(用中括号括起。对于这个范围值,我们可以对它进行修改),再往下就是对该度量元含义的具体解释。
下面介绍系统作用域中各个度量元
的具体含义
。注意,下面讨论的所有问题都是站在整个系统(或子系统)的角度上的,这一点对于我们理解这些度量元很重要。
度量元名称:类耦合因素。
解释说明:
该度量元的计算方法为:
类的总数
ap_cof =
(
∑
C
i
与其他的类发生耦合关系的数量
)
/
类的总数
*
(类的总数
—
1
)
i = 1
( 注:Ci表示第i个类 )
当某一个类有以下情形之一时,该类与其他类的耦合关系的数量加一:
1
在该类的类函数中调用了另一个类的成员函数。
2
该类通过友员的方法调用另一个类中的可见或不可见的函数。
3
在该类中调用了另一个类的构造
/
析构函数。
4
该类中将另一个类作为数据成员或作为类函数中的参数。
度量元名称:类函数继承的比率。
解释说明:该度量元是一个比值。
分子为:在系统所有类的成员函数中,由父类继承来的成员函数的数量总和。
分母为:系统所有类的成员函数的总和(包括自己定义的和从父类继承而来的)。
度量元名称:类数据成员继承的比率。
解释说明:
该度量元是一个比值。
分子为:在系统所有类的数据成员中,由父类继承来的数据成员的数量总和。
分母为:系统所有类的数据成员的总和(包括自己定义的和从父类继承而来的)。
度量元名称:类的多态性因素。
解释说明:该度量元是一个比值。
分子为:在系统所有类的成员函数中,重载的函数的数量总和。
分母为:
系统中类的总数
∑(
C
i
中未被重载的成员函数的数量
*
C
i
子类的个数
)
i = 1
( 注:Ci表示第i个类 )
度量元名称:类对其数据成员的保护程度。
解释说明:该度量元是一个比值。
分子为:在系统所有类的数据成员中,属于
Private
型数据成员的总数。
分母为:系统所有类的数据成员的总和。
度量元名称:系统中类耦合的平均值。
解释说明:
计算公式为:
其中:
ap_cbo
的值由以下两部分组成:
1
在一个类的成员函数中调用不属于该类的函数,在系统中,这种情况出现一次,
ap_cbo
的值加一。
2
类中类类型数据成员的数量。在系统中,这种情况出现一次,
ap_cbo
的值加一。
ap_clas
:系统中类的数量。
如果该值过高,则说明系统中类与类之间的耦合较强,这会使对系统进行更改工作时变的非常困难。
度量元名称:类继承图的深度。
解释说明:在系统中所有的类继承图中,最大继承层次的数量。
度量元名称:类成员函数的私有情况。
解释说明:
该度量元
的计算公式为:
类总数
类
i
中函数个数
ap_mhf =
(
∑
[
∑( 1 – V( m ) )])/
(
系统中类成员函数数量的总和
)
i = 1 m=1
其中
V( m )的值为:
当该函数为 public型时,V( m ) = 1
当该函数为 private型时,V( m ) = 0
当该函数为 protected型时,V( m ) = ( 由该类派生的类的个数 )
/
(类总数 – 1 )
度量元名称:类继承图的层次复杂性。
解释说明:
它的计算公式为:
ap_inhg_cpx == SUM( N * I )
/
SUM( N )
其中:
SUM
表示取和,
I
为类继承图中的层次序号(
1
,
2
,
3…
),
N
为继承图中第
I
层中的结点个数。例如下面这样的一个继承关系:
则
ap_inhg_cpx =
(
1* 1 + 2*3 + 3*1
)
/
(
1 + 3 + 1
)
= 2.0
。由计算公式可以看出,多继承很影响该度量元的得分,所以尽量避免多重继承。
该度量元是类继承关系的图形结构的表示,它的目的是测量类继承关系的复杂性。如果改值大于二,则表明类的继承关系过于复杂。
度量元名称:重复继承的类的数量占系统中类继承关系数量的比率。
解释说明:重复继承的类的数量占系统中类继承关系数量的比率。
该度量元的计算公式为:
其中:
ap_inhg_uri
:系统中重复继承的“类对”的数量。
ap_inhg_edge
:系统中类的继承关系图中边的数量。
那么,何为重复继承呢?重复继承指某一个类对同一个类继承两次。下面举一个例子。
比如:
在这个例子中
,
类
E
通过类对
(B,C)
、
(C,D)
、
(B,D)
对类
A
重复继承。则
ap_inhg_uri
的值为
3
。
ap_inhg_edge
的值为
6
。所以
URI_Ratio = (3 * 100) / 6 = 50.0
过多的重复继承会导致程序变的复杂,还可能发生函数命名冲突(
类
E
中的函数就可能会有命名冲突)。所以在组织程序时,提倡单继承,避免使用多继承类。
度量元名称:独立于类的函数的比率。
解释说明:
系统中非成员函数(独立于类的函数)占系统中函数总数的比率。
该度量元的计算公式为:
NMM_Ratio =( ( ap_func - ap_nmm ) / ap_func) * 100
其中:
ap_func
:系统中总的函数数量(包括游离于类之外的全局函数)。
ap_nmm
:系统中各个类的成员函数的数量之和。
如果该度量元的值过大的话,说明该程序设计不符合面向对象的思想。
度量元名称:系统中每个函数的平均圈复杂度。
解释说明:
该度量元的计算公式为:
AVG_VG = ap_vg / ap_func
其中:
ap_vg
:系统中各函数的圈复杂度的总和(关于函数的圈复杂度的计算方法请参见〈〈
Logiscope
函数度量元〉〉文挡)。
ap_func
:系统中函数的数量(包括成员函数和非成员函数)
如果该值过高,则说明系统中有大量函数的圈复杂度的值过高,也就是说系统中有大量过于复杂的函数。由于函数的复杂性过高,对于系统的维护工作是很不利的。
度量元名称:
递归调用的百分比。
解释说明:
该度量元的计算公式为:
其中:
ap_cg_cycle
:
函数调用流程图中递归调用的数量。
ap_cg_edge
:
函数调用流程图中边的数量。
度量元名称:
函数调用流程图的最大层次数。
解释说明:
在系统所有的函数调用流程图中,最大的层次数。