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