秋阳的软件测试专栏

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  65 随笔 :: 0 文章 :: 127 评论 :: 0 Trackbacks

1 前言

本文挡描述的是Logiscope——Audit中常用的系统度量元的具体含义。

对每个度量元的解释分为以下几部分:

首先是该度量元的原文名称,后面是该度量元的代号,跟在后面的是Audit质量模型为该度量元设的参考值(用中括号括起。对于这个范围值,我们可以对它进行修改),再往下就是对该度量元含义的具体解释。

2系统度量元

下面介绍系统作用域中各个度量元的具体含义。注意,下面讨论的所有问题都是站在整个系统(或子系统)的角度上的,这一点对于我们理解这些度量元很重要。

2.1 "Coupling Factor" : ap_cof     [0.03 ,   0.18]

度量元名称:类耦合因素。

解释说明:

该度量元的计算方法为:

                   类的总数

ap_cof = Ci与其他的类发生耦合关系的数量/ 类的总数*(类的总数 1

                     i = 1

( 注:Ci表示第i个类 )

当某一个类有以下情形之一时,该类与其他类的耦合关系的数量加一:

       1 在该类的类函数中调用了另一个类的成员函数。

       2 该类通过友员的方法调用另一个类中的可见或不可见的函数。

       3 在该类中调用了另一个类的构造/析构函数。

       4 该类中将另一个类作为数据成员或作为类函数中的参数。

2.2 "Method Inheritance Factor" : ap_mif  [ 0.6 ,   0.8]

度量元名称:类函数继承的比率。

解释说明:该度量元是一个比值。

分子为:在系统所有类的成员函数中,由父类继承来的成员函数的数量总和。

分母为:系统所有类的成员函数的总和(包括自己定义的和从父类继承而来的)。

2.3 "Attribute Inheritance Factor" : ap_aif  [0.3 ,  0.6]

度量元名称:类数据成员继承的比率。

解释说明:  该度量元是一个比值。

分子为:在系统所有类的数据成员中,由父类继承来的数据成员的数量总和。

分母为:系统所有类的数据成员的总和(包括自己定义的和从父类继承而来的)。

2.4 "Polymorphism Factor" : ap_pof     [ 0.3 ,   1.0 ]

度量元名称:类的多态性因素。

解释说明:该度量元是一个比值。

分子为:在系统所有类的成员函数中,重载的函数的数量总和。

分母为:

                系统中类的总数

∑(Ci中未被重载的成员函数的数量* Ci子类的个数

                  i = 1

( 注:Ci表示第i个类 )

2.5  "Attribute Hiding Factor" : ap_ahf [0.7 1.0 ]

度量元名称:类对其数据成员的保护程度。

解释说明:该度量元是一个比值。

分子为:在系统所有类的数据成员中,属于Private型数据成员的总数。

分母为:系统所有类的数据成员的总和。

2.6 "Average coupling between objects": AVG_CBO           [0.0 , 10.0 ]

度量元名称:系统中类耦合的平均值。

解释说明:

计算公式为:

AVG_CBO = ap_cbo / ap_clas

其中:ap_cbo 的值由以下两部分组成:

1在一个类的成员函数中调用不属于该类的函数,在系统中,这种情况出现一次,ap_cbo的值加一。

            2类中类类型数据成员的数量。在系统中,这种情况出现一次,ap_cbo的值加一。

         ap_clas:系统中类的数量。

如果该值过高,则说明系统中类与类之间的耦合较强,这会使对系统进行更改工作时变的非常困难。

2.7 "Number of Levels in the Inheritance Graph" : ap_inhg_levl     [ 1 ,  4 ]

度量元名称:类继承图的深度。

解释说明:在系统中所有的类继承图中,最大继承层次的数量。

2.8 "Method Hiding Factor" : ap_mhf [ 0.1 , 0.4 ]

度量元名称:类成员函数的私有情况。

解释说明:

该度量元的计算公式为:

                               类总数 i中函数个数

ap_mhf =[ ∑( 1 – V( m ) )])/ 系统中类成员函数数量的总和

                                     i = 1  m=1

其中V( m )的值为:

    当该函数为 public型时,V( m ) = 1

    当该函数为 private型时,V( m ) = 0

    当该函数为 protected型时,V( m ) = ( 由该类派生的类的个数 ) /(类总数 – 1 )

2.9 "Hierarchical Complexity of the Inheritance Graph" : ap_inhg_cpx    [ 1.0 ,  2.0 ]

度量元名称:类继承图的层次复杂性。

解释说明:

它的计算公式为:

ap_inhg_cpx == SUM( N * I ) / SUM( N )

其中:SUM表示取和,       I为类继承图中的层次序号(123…),N 为继承图中第I层中的结点个数。例如下面这样的一个继承关系:

 logiscope81.jpg

ap_inhg_cpx = 1* 1 + 2*3 + 3*1 / 1 +  3  +  1 = 2.0。由计算公式可以看出,多继承很影响该度量元的得分,所以尽量避免多重继承。

该度量元是类继承关系的图形结构的表示,它的目的是测量类继承关系的复杂性。如果改值大于二,则表明类的继承关系过于复杂。

2.10 "Ratio of repeated inheritances in the application": URI_Ratio       [ 0.0 ,  10.0 ]

度量元名称:重复继承的类的数量占系统中类继承关系数量的比率。

解释说明:重复继承的类的数量占系统中类继承关系数量的比率。

该度量元的计算公式为:

URI_Ratio = (ap_inhg_uri * 100) / ap_inhg_edge

其中:ap_inhg_uri :系统中重复继承的“类对”的数量。

          ap_inhg_edge:系统中类的继承关系图中边的数量。

那么,何为重复继承呢?重复继承指某一个类对同一个类继承两次。下面举一个例子。

比如:

logiscope82.jpg
 
在这个例子中, E通过类对 (B,C)(C,D)(B,D)对类A重复继承。则ap_inhg_uri的值为3ap_inhg_edge的值为6。所以URI_Ratio = (3 * 100) / 6 = 50.0

过多的重复继承会导致程序变的复杂,还可能发生函数命名冲突( E中的函数就可能会有命名冲突)。所以在组织程序时,提倡单继承,避免使用多继承类。

2.11 "Percentage of non-member functions": NMM_Ratio    [ 0.0 ,  10.0 ]

度量元名称:独立于类的函数的比率。

解释说明:

系统中非成员函数(独立于类的函数)占系统中函数总数的比率。

该度量元的计算公式为:

NMM_Ratio =( ( ap_func - ap_nmm )  /  ap_func) * 100

其中:ap_func:系统中总的函数数量(包括游离于类之外的全局函数)。

          ap_nmm :系统中各个类的成员函数的数量之和。

如果该度量元的值过大的话,说明该程序设计不符合面向对象的思想。

2.12  "Average of the VG of the application's functions":  AVG_VG     [ 1.0 ,  5.0 ]

度量元名称:系统中每个函数的平均圈复杂度。

解释说明:

该度量元的计算公式为:

AVG_VG = ap_vg / ap_func

其中:ap_vg  :系统中各函数的圈复杂度的总和(关于函数的圈复杂度的计算方法请参见〈〈Logiscope函数度量元〉〉文挡)。

      ap_func:系统中函数的数量(包括成员函数和非成员函数)

如果该值过高,则说明系统中有大量函数的圈复杂度的值过高,也就是说系统中有大量过于复杂的函数。由于函数的复杂性过高,对于系统的维护工作是很不利的。

2.13  " Ratio of recursive edges on the call graph ":  RECU_Ratio     [ 0.0 ,  5.0 ]

度量元名称: 递归调用的百分比。

解释说明:

该度量元的计算公式为:

RECU_Ratio = (ap_cg_cycle * 100) / ap_cg_edge

其中:

ap_cg_cycle  函数调用流程图中递归调用的数量

    ap_cg_edge  函数调用流程图中边的数量

2.14  " Number of Levels in the Call Graph ":  ap_cg_levl     [ 2 ,  9 ]

度量元名称: 函数调用流程图的最大层次数。

解释说明:

在系统所有的函数调用流程图中,最大的层次数。



posted on 2005-07-15 21:24 qiuyangzh 阅读(1057) 评论(0)  编辑 收藏 引用 所属分类: 01 静态测试
只有注册用户登录后才能发表评论。