Page 101 - 《软件学报》2021年第5期
P. 101
晋武侠 等:基于多源特征空间的微服务可维护性评估 1325
生成 DSM b 的二元关系映射函数为σ behavior (t i ,(orp i ,opr j )),该映射函数计算 t i 的运行轨迹中所包含的(opr i ,
opr j )数.t i 是由方法间或者操作间的调用行为(opr i ,opr j )组成的序列.使用 Kieker(http://kieker-monitoring.net/)等
软件追踪工具监控软件系统运行获取到运行轨迹,追踪技术的原理是:对方法或者操作的入口和出口进行插装,
执行到该方法或者操作的前后会记录下执行日志,再从执行日志中恢复出系统的执行轨迹.
(7) DSM p (InteractionProbalistic DSM)
生成 DSM p 的二元关系映射函数为σ probability (SC i ,SC j ),该映射函数计算在运行轨迹 T 中,服务 SC i 参与的条
件下,SC j 也参与交互的概率.映射值越大,则两个服务同时参与执行交互的可能性越大,意味着两个服务耦合的
程度越高.
通过挖掘 T 中服务调用的频繁模式和关联规则,计算σ probability (SC i ,SC j ),具体过程为:
对于每条 t i ∈T,t i =〈(opr 1 ,opr 2 ),(opr 3 ,opr 4 ),…,(opr m−1 ,opr m )〉,将方法层的调用行为映射到服务层,得到: t′ =
i
〈(SC 1 ,SC 2 ),(SC 3 ,SC 4 ),…,(SC m−1 ,SC m )〉; t′ 作为一个事务, T′ = {}t′ ,(SC i ,SC j )是一个项,使用 FP-growth 算法挖掘 T′
i
i
中的频繁项和频繁规则,设置最小支持度为 min sup ,最小置信度为 min cof ;挖掘得出满足最小支持度和最小置信度
的一组关联规则,记为 Rules(min sup ,min cof )={SC i →SC j };由关联规则集合生成 DSM,其中,DSM 的行和列对应服务
SC,SC i →SC j 这条关联规则的置信度(cof i,j )作为单元格(i,j)值,表示服务交互行为中 SC i 参与的条件下,SC j 也参与
交互的概率 cof i,j .
本文将基于包含上述 7 种 DSM 的 MFS 模型,设计微服务可维护性度量.其他应用可扩展定义 MFS 的设计
元素和二元关系的映射函数σ,生成自定义的 MFS 模型.
2 基于 MFS 的可维护性评估方法
本节依 ISO 25010 软件质量模型中的可维护性定义,基于前述构建的 MFS,设计微服务可维护性评估指标.
ISO 25010 软件质量模型将可维护性定义为:“degree of effectiveness and efficiency with which a product or
system can be modified by the intended maintainers”, 具体体 现在软件可 被有效且高 效修改的程 度
(modifiability)、可复用程度(resuability)、模块化程度(modularity)、在修改或者故障诊断时可高效且有效分析
的程度(analyzability)等方面.遵循该标准,易于维护的微服务系统在理想情况下,其(物理或者候选)服务应具备
良好的模块性、功能性、可修改性以及低交互复杂性.
• 模块性:服务的模块性是指服务遵循高内聚低耦合的程度.服务内部内聚程度越高且服务间的耦合程
度越低,则该服务的模块性越好.这与 ISO 25010 中的“modularity”定义一致.
• 功能性:服务的功能性是指服务提供单一功能职责的程度.一个服务的功能越单一且一致,则该服务越
易于应用到新系统、被新系统复用,提高新系统的开发效率.这体现了 ISO 25010 中“resuability”的目标.
• 可修改性:服务的可修改性是指服务可被独立修改的程度.一个服务内部的修改,在理想情况下,不应该
影响到该系统的其他服务需随之修改.这种情况下,在一个系统的修改和演化过程中,只需要更改相关
的局部服务即可.这与 ISO 25010 中“modifiability”的定义一致.
• 交互复杂性:服务的交互复杂性是指服务间动态交互行为的复杂程度.服务间的交互行为复杂,则发生
故障后,很难有效在源代码中定位故障源头.低交互复杂度体现了 ISO 25010 中“analyzability”的目标.
上述模块性、可修改性、功能性、交互复杂性等 4 个方面从不同维度一致性描述微服务的代码可维护性.
本节将从上述 4 个关注点出发,评估微服务的可维护性.后续各个小节将列出不同关注点下具体的度量方
法.为了便于清晰阐述,本文将一个微服务系统表示为 System={SC},其中,SC 表示一个微服务或者候选服务,SC=
(E ser ,I,O).E ser 表示服务 SC 内实体的集合;I 是 SC 的接口的集合;O 是细粒度的操作的集合,由接口 I 提供.实体是
类 class;接口 inf 是服务对外公开发布的接口;通过发布的接口,服务提供对外部客户端可见的功能;操作 opr 是
接口提供的公有方法.
2.1 模块性
模块性是指服务的内部实体应高度凝聚,跨服务边界的实体应松散耦合,即满足“高内聚、低耦合”的设计原