Page 102 - 《软件学报》2021年第5期
P. 102

1326                                     Journal of Software  软件学报 Vol.32, No.5,  May 2021

                 则.已有研究   [20] 发现:结构(structural)上的质量指标与概念(conceptual,也称为语义)上的质量指标存在互补关系,
                 分别从源代码的语法结构、源代码中的文本语义信息等不同维度衡量软件质量.受此启发,我们基于 MFS 的
                 DSM s 和 DSM c ,从结构和概念两个方面来扩展 Mancoridis 等人       [19] 定义的模块化质量 MQ,以度量服务模块化的
                 程度.具体度量指标如下:
                    (1)  结构模块度(structural modularity,简称 SMQ)
                    SMQ 是指在结构维度上衡量服务的模块化程度.SMQ 值越大,说明服务的模块化程度越高.基于 DSM s 的
                 SMQ 度量公式如下:
                                          SMQ =  1  N  scoh − ∑  1  ∑  N  scop                        (4)
                                                                      ≠
                                                N   i=  1  i  N (N − 1)/ 2  i j  , i j
                                               scoh =  u i  , scop  =  v , ij                         (5)
                                                  i  N 2    , i j  ( 2 N ×  N  )
                                                      i           i   j
                 其中,scoh 度量服务的内聚程度,scop i,j 度量服务之间的耦合程度.这两个定义与文献[19]中定义的内部连通性和
                 互连通性一致.基于 DSM s 可统计出 u i 和 v i,j ,u i 是服务 i 内所有实体间边的数量,v i,j 是服务 i 内的实体与服务 j
                 内的实体之间的边的数量.N i 或者 N j 表示服务 i 或者服务 j 所包含的实体个数.scoh 值越大,且 scop 值越小,说明
                 服务的结构模块性越好.
                    (2)  概念模块度(conceptual modularity,简称 CMQ)
                    CMQ 指在概念或者语义维度上衡量服务的模块化程度.CMQ 值越大,说明服务的模块化程度越高.基于
                 DSM c 的 SMQ 度量公式如下:
                                                1   N          1      N
                                          CMQ =      ccoh − ∑  i    ∑  ccop  , i j                    (6)
                                                                      ≠
                                                N   i=  1  N (N − 1)/ 2  i j
                                                      u           v
                                               ccoh =  i  i  ,ccop  , i j  =  , ij                    (7)
                                                     N i 2      ( 2 N ×  N  j  )
                                                                  i
                 其中,ccoh、ccop 的公式分别与 SMQ 中的 scoh,scop 类似.不同的是,CMQ 是根据 DSM c 统计出 u i 和 v i,j 的值.
                 2.2   功能性
                    功能性是指服务应对外提供内聚一致的功能职责,即遵循“单一职责原则”(single responsibility principle,简
                                                            [7]
                 称 SRP).服务发布的接口暴露出服务对外提供的职责 ,所以可根据服务的接口信息评估服务的功能性.基于
                 MFS 的 DSM m 和 DSM d ,度量服务满足功能性的程度的指标如下.
                    (1)  接口数(InterFace number,简称 IFN)
                    ifn 度量服务的公开接口的个数.假设接口设计良好,那么 ifn 越小,说明该服务对外提供的接口数越少,服务
                 对外提供的功能越有可能内敛一致,则服务粒度越小,越有可能具备单一职责.IFN 是所有服务 ifn 值的平均,形
                 式化定义如下:
                                                          1
                                                    IFN = ∑  N  ifn                                   (8)
                                                          N   j= 1  j
                                                         ifn j =|I j |                                (9)
                 其中,I j 是服务 j 的公开接口集合,N 是服务系统对外提供接口的服务数量.
                    (2)  接口消息层的内聚度(CoHesion at message level,简称 CHM)
                    chm 在消息层度量服务的公开接口的内聚程度.chm 值越大,说明对外提供的接口越一致、越内聚.CHM 是
                 所有服务的内聚程度的均值.chm 是 Athanasopoulos 等人        [21] 提出的 LoC msg (lack of message-level cohesion)的变
                 形,即 chm+LoC msg =1.基于 DSM d 的 chm 计算公式如下:
                                                             N
                                                           1
                                                    CHM = ∑   chm j                                  (10)
                                                          N  j= 1
   97   98   99   100   101   102   103   104   105   106   107