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

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


















                                                     (a) SIDC 值的曲线图

















                                                   (b) WSIC 和 SYI 值的度量值
                            Fig.8    Measurements of SIDC, WSIC, SYI for microservices in Train-Ticket system
                                  图 8  Train-Ticket 系统中微服务的 SIDC、WSIC、SYI 度量结果
                 4    相关研究工作

                 4.1   微服务拆分

                    微服务拆分将遗留的单体架构系统解耦成一组独立运行、以轻量级通信机制进行交互的规模相对较小的
                 服务.根据拆分边界的选择方式分类,微服务拆分包括数据驱动的方法、结构驱动的方法、领域驱动的方法.
                    (1)  数据驱动拆分.这类方法倡导从软件系统的数据库或者数据流开始拆分.Levcovitz 等人                         [25] 基于人工
                        经验分析,将软件系统的数据库表根据领域知识划分成不同组,然后将访问同一组数据库表的代码类
                                                                           [2]
                        或者代码方法组织在一起,对应生成可选的候选服务.Chen 等人 认为数据流图体现了软件系统的业
                        务逻辑,提出了基于数据流识别可能的候选服务,数据流由软件架构师或者开发人员绘制提供.丁丹
                            [3]
                        等人 提出了一种场景驱动、自底向上的拆分方法,该方法从数据库拆分出发,向上映射到系统代码
                        的拆分,考虑了数据关联度、数据共享度、拆分开销等不同拆分因素,在拆分迭代过程中融入用户反
                        馈,这种半自动的方法推荐的拆分方案符合目标期望.
                    (2)  结构驱动拆分.还有一些研究基于软件依赖结构、运行轨迹等反应软件结构的信息来设计拆分方案.
                                 [4]
                                                [5]
                        Gysel 等人 和 Mazlami 等人 抽取代码中的依赖结构信息,将软件系统建模表示成图结构,然后设计
                                                                                  [4]
                        图切割算法切分图,每个子图则对应一个可选的候选服务.ServiceCutter 是一个服务拆分的可视化
                        工具,用户自定义的一系列接口操作和用例作为拆分输入,基于模块化思想,根据操作间的耦合程度
                                            [6]
                        对接口进行聚类.Jin 等人 认为功能测试驱动下产生的运行轨迹能够反映系统的业务功能,提出了以
                        单体系统的运行轨迹作为输入,设计一种基于多目标优化技术的服务拆分方法 FoSCI,该方法是对其
   108   109   110   111   112   113   114   115   116   117   118