logiscope系列-类度量元

1 前言

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

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

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

2类度量元

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

2.1 "Class Comments Frequency": COMFclass      [ 0.2,  +oo ]

度量元的名称:类注释频度

解释说明:

该度量元表示类中注释的频度。所谓类的注释,只限于类定义的中的注释,不包括类实现中的注释。

该度量元的计算公式为:

COMFclass =

(cl_bcom + cl_bcob) / (cl_func_publ + cl_func_prot + cl_data_prot + cl_data_publ)

其中:

cl_bcom     类前的注释数量(只能为10

cl_bcob     类定义中的注释数量

cl_func_publ类中public成员函数的数量

cl_func_prot类中protected成员函数的数量

cl_data_prot类中protected数据成员的数量

cl_data_publ类中public数据成员的数量

类中每一个对外部可用的成员函数和数据成员,都应该加以注释,从而方便于类的使用者。

2.2 "Fan out value of a class":   FAN_OUTclass   [ 0,  20 ]

度量元的名称:类的扇出值。

解释说明:

该度量元的计算公式为:

FAN_OUTclass = cl_data_prot + cl_data_publ +cl_usedp + cl_data_vare

其中:cl_data_prot 类中protected数据成员的数量之和,

          cl_data_publ 类中public数据成员的数量之和,

          cl_usedp    类函数所使用的参数的数量之和,

cl_data_vare   类函数中使用的外部类的数据成员的数量之和。

   这个度量元反映了类对外的数据输出量,其值越大,就说明这个类对整个系统的影响越大。

2.3 "Fan in of a class":   FAN_INclass       [ 0,  15 ]

度量元的名称:类的扇入值。

解释说明:

该度量元的计算公式为:

FAN_INclass = cl_data_prot + cl_data_publ + cl_usedp + cl_data_vari

其中:

cl_data_prot 类中protected数据成员的数量,

      cl_data_publ 类中public数据成员的数量,

      cl_usedp    类函数所使用的参数的数量之和,

cl_data_vari 类函数中使用本类的属性的次数之和

    这个度量元反映了类通过其数据成员和成员函数参数而引进的数据输入量,其值越大,该类日后需要频繁修改的可能性就越大。

2.4 "Number of Dependent Methods" : cl_dep_meth  [0,  6 ]

度量元的名称:类对其他模块的依赖性。

解释说明:

该度量元表示,在一个类中,要依赖于本类之外的其他模块才能实现功能的类函数的个数。符合这样的条件的函数包括:

1 在该函数中调用了其它类的类函数。

         2 在该函数中使用了其它类的数据成员。

         3 在该函数的参数中有其它类的类类型的参数。

         4 在该函数中有一个其它类的类类型的变量。

该度量元的目的是控制类与类之间的耦合程度。

2.5 "Number of Base Classes" : in_bases    [ 0,  3 ]

度量元的名称:基类的数量

解释说明:

该类基类的数量,基类包括其类继承图中所有的父类。当MFC类库中的类作为父类时,则该MFC类的基类的数量不再计入其中。在下图中,class 4in_bases4

logiscope系列-类度量元_第1张图片

2.6 "Weighted Methods Per Class" : cl_wmc  [ 0,   25 ]

度量元的名称:类的圈复杂度。

解释说明:

类中各个成员函数的圈复杂度的总和(关于函数的圈复杂度的计算方法请参见〈〈Logiscope函数度量元〉〉文挡)。

2.7 "Specializability":SPECIAL [ 0,  25 ]

度量元的名称:类功能的专一性。

解释说明:

该度量元的计算公式为:

SPECIAL =  

2 * ( cl_data_publ + cl_data_prot )  +  cl_func_publ + cl_func_prot + 10 *in_bases

其中:cl_data_publ:类中public型的数据成员的数量。

          cl_data_prot:类中protected型的数据成员的数量。

          cl_func_publ:类中public型的成员函数的数量。

          cl_func_prot  类中protected型的成员函数的数量。

          in_bases    该类的基类的数量(包括直接基类的基类)。

2.8 "Usability": USABLE      [ 0,  10 ]

度量元的名称:类的易用性。

解释说明:

该度量元的计算公式为:

USABLE = (2 * cl_data_publ) + cl_func_publ

其中:

cl_data_publ      类中public型的数据成员的数量

cl_func_publ     类中public型的成员函数的数量

该度量元表示了类对外的接口情况,类对外的接口越多,掌握、使用这个类就越困难。

2.9 "Encapsulation rules":   ENCAP       [ 0,  5 ]

度量元的名称:类的封装性。

解释说明:

该度量元的计算公式为:

ENCAP = cl_data_publ + cl_data_vare

其中:cl_data_publ:类中public型的数据成员的数量

          cl_data_vare:在类成员函数中使用的外部类的数据成员的次数之和

2.10 "Number of Direct Users Classes" : cu_cdusers [  0  ,    4  ]

度量元的名称:被其他类使用的次数。

解释说明:

该类被其他类使用的次数 (被同一个类多次使用计为一次).

2.11 "Class Coupling" : cl_cobc    [ 0,  12 ]

度量元的名称:类耦合

解释说明:

该度量元的值,包括以下几种情况之和:

        1 该类直接基类的数量

        2 该类中类类型的数据成员的数量

        3 调用了静态成员函数的成员函数的数量的二倍。

        4有类类型参数的类成员函数的数量的二倍。

        5有类类型变量的类函数数量的三倍。

2.12 "Number of Children" : in_noc     [ 0,  2 ]

度量元的名称:派生类数量。

解释说明:从该类派生的类的数量。只计直接派生类的数量,间接派生不算在内。

2.13 "Rate of class autonomy ": AUTONOM  [30.0,  100.0 ]

度量元的名称:类自治的程度。

解释说明:

该度量元的计算方法为:与其它的类没有牵扯关系的类函数和类数据成员的数量之和,再除以类函数和类数据成员的数量之和的百分比

该度量元的计算公式为:

AUTONOM =

  100 * ((cl_func_priv + cl_func_prot + cl_func_publ - cl_dep_meth) +

  (cl_data_prot + cl_data_publ + cl_data_priv - cl_data_class))  /

  (cl_func_priv + cl_func_prot + cl_func_publ + cl_data_priv + cl_data_prot + cl_data_publ)

其中:

cl_func_priv         类中private型的成员函数的数量。

      cl_func_prot         类中protected型的成员函数的数量。

      cl_func_publ         类中public型的成员函数的数量。

      cl_data_prot          类中protected型的数据成员的数量。

      cl_data_publ          类中public型的数据成员的数量。

      cl_data_priv          类中private型的数据成员的数量。

      cl_data_class         类中类类型数据成员的个数.

      cl_dep_meth          类函数中要依赖本类之外的函数的个数, 这样的函数是指:

                                1 该函数使用了其他类的数据成员

                                2 在该函数中调用了其他类的函数

                                3 该函数有一个其他类类型的实体对象的参数

                                4 该函数中有一个其他类的类类型的变量

2.14  "Number of used Classes" : cu_cdused      [ 0,  4 ]

度量元的名称:使用其它类的数量

解释说明:

在该类中直接使用的其它类的数量。多次使用同一个类计为一次。

2.15 "Testability": TESTAB    [ 0,  100 ]

度量元的名称:易于测试性。

解释说明:

该度量元的计算公式为:

TESTAB =

    cl_fprot_path + cl_fpriv_path + cl_fpubl_path + cl_data_vare + cl_func_calle

其中:

cl_fprot_path  类中所有的protected型函数的执行路径总和,

cl_fpriv_path  类中所有的private型函数的执行路径总和,

cl_fpubl_path  类中所有的public型函数的执行路径总和。

cl_data_vare   类函数中使用的外部类的数据成员的次数之和,

      cl_func_calle  类函数中对类外部的函数的调用次数之和,

通过观察该度量元的各个组成元素,我们会发现这些都是会对我们需要制定测试用例的数量产生重要影响的数据。

你可能感兴趣的:(logiscope系列-类度量元)