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

晋武侠  等:基于多源特征空间的微服务可维护性评估                                                       1323


                 concerns of functionality, modularity, modifiability, and interaction complexity. Accordingly, a tool prototype called MicroEvaluator is
                 also implemented, and experimental analysis is carried out on open-source software systems.
                 Key words:    microservice; maintainability; feature space; modifiability; metric

                    随着云计算技术的成熟和企业业务需求的增长,Netflix,Amazon 等已经实践将遗留的软件系统迁移为基于
                 (微)服务的架构,以充分利用云基础设施,灵活进行业务扩张和性能伸缩,降低维护成本.与单体架构这种将系统
                 各个模块统一管理打包成单个应用程序的范式相对,微服务架构由许多独立的服务组成,服务之间通过轻量级
                                                                   [1]
                 通信协议进行动态交互,每个服务应独立修改、开发、部署、维护 .很多工作                        [2−7] 研究遗留系统的微服务拆分(或
                 者解耦)方法,但微服务拆分过程复杂、成本很高.获取更好的可维护性(maintainability),是企业愿意投入高成本
                                           [8]
                 进行微服务拆分的主要动力之一 .
                    微服务可维护性描述了微服务为适应软件环境、需求等变化而相应修改时所作努力的程度,体现了微服务
                 易于维护的程度,可包括开发阶段的代码可维护性(后续正文中出现的“可维护性”术语,如无特殊说明,则默认指
                                                                                                  [9]
                 代码的可维护性)和运维阶段可维护性(本文关注前者).调研发现:研究工作对可维护性的定义存在差异 ,也有
                 一些研究工作度量可维护性,但没有显示使用“可维护性”术语.以 ISO 25010 质量模型(https://iso25000.com/
                 index.php/en/iso-25000-standards/iso-25010)中可维护性的定义为标准,可维护性具体包括模块性、可复用性、
                 易修改性等子属性.经典的内聚性和耦合性、自定义的实体收敛性和用例收敛性                            [10] 、服务依赖其他服务或者被
                                 [2]
                 其他服务依赖的程度 等,都属于可维护性度量范围.
                    很多研究工作提出了微服务可维护性的评估方法.钟陈星等人                      [10] 从领域驱动设计的视角,以用例图和实体
                 关系图作为输入,评估拆分推荐的候选服务的内聚性、耦合性、用例收敛性、实体收敛性.Li 等人                                 [11] 和 Chen
                    [2]
                 等人 根据业务逻辑的数据流图,应用 Martin 等人             [12] 提出的 AfferentCoupling(Ca),EfferentCoupling(Ce)等面向
                 对象设计评估指标来评估候选服务.Fritzsch 等人的研究工作                [13] 同样应用 Ca,Ce 等指标.Taibi 等人 [14] 以执行轨
                                                                                  [7]
                 迹为输入,度量服务间的耦合度、服务的大小规模、服务外部调用频数等.Jin 等人 认为服务的接口暴露出该
                                                                        [7]
                 服务对外提供的功能逻辑,基于接口信息设计微服务度量指标.FoSCI 评估微服务的模块性、功能性、演化
                             [9]
                 性.Bogner 等人 从复杂度、内聚度、耦合度等方面总结了微服务可维护性度量指标.
                    微服务代码可维护性度量受到了广泛研究,但仍然存在以下难点.(1)  数据异构多源化.微服务拆分过程使
                 用数据流、软件结构、接口信息、运行轨迹等数据,这些数据来源于源代码、代码修订历史、代码的运行日志
                 等不同制品.而不同源的数据存在异构特性,导致微服务代码可维护性度量很难同时考虑多源异构数据.(2)  代
                 码可维护性关注点多样化.依据 ISO 25010 软件质量模型,可维护性体现为软件可被有效且高效修改的程度、可
                 复用程度、模块化程度、在修改或者故障诊断时可高效且有效分析的程度等多个关注点.然而由于难以考虑多
                 源异构数据,导致微服务代码可维护性度量也难以兼顾评估前述可维护性的各个关注点.
                                                   [6]
                    针对上述两个难点,本文将在前期工作 的基础上,提出一种基于多源特征空间的微服务代码可维护性评
                 估方法:通过分析源代码的语法结构、代码文本信息、修订历史记录、运行轨迹等不同数据源,将这些多源异
                 构数据统一建模为多源特征空间;基于多源特征空间模型,以 ISO 25010 软件质量模型中的可维护性定义为标
                 准,从模块性、功能性、可修改性、交互复杂性等 4 个关注点来综合评估微服务代码可维护性.
                    据此实现了微服务可维护性评估的原型工具 MicroEvaluator,并在 JPetStore 和 Train-Ticket 两个开源系统
                 上进行了初步实验.
                    本文第 1 节和第 2 节分别描述多源特征空间模型和可维护性评估指标.第 3 节展示实验及分析结果.第 4
                 节讨论相关研究工作.第 5 节总结本文工作并进行未来展望.

                 1     多源特征空间(MFS)建模

                 1.1   模型定义
                    本文在 Mo 等人     [15] 提出的软件特征空间基础上,将软件系统的特征扩展表示为多源特征空间(multisource
   94   95   96   97   98   99   100   101   102   103   104