APP下载

基于鲸鱼优化算法的类图重构研究

2021-09-14胡志刚杨娜刘伟

湖南大学学报·自然科学版 2021年10期
关键词:类图

胡志刚 杨娜 刘伟

摘   要:为了提高软件质量,组合使用重构技术、软件度量和元启发式搜索可以有效改进软件的结构而不影响其功能. 本文提出一种基于鲸鱼优化算法的类图重构方法,并结合耦合、继承、抽象3个指标所构建的质量模型来指导类图重构序列寻优. 在6个不同的开源程序上使用鲸鱼优化方法对类图进行重构,研究结果表明:基于鲸鱼优化算法的类图重构在质量增益上优于模拟退火算法和爬山算法,可有效提高重构质量.

关键词:软件质量;软件重构;鲸鱼优化;质量度量;类图

中图分类号:TP311                             文献标志码:A

Research on Class Diagram Refactoring Based

on Whale Optimization Algorithm

HU Zhigang YANG Na LIU Wei

(1. School of Computer Science and Engineering,Central South University,Changsha 410083,China;

2. College of Computer Science and Electronic Engineering,Hunan University of Chinese Medicine,Changsha 410208,China)

Abstract:In order to improve software quality,the combination of refactoring techniques,software metrics,and meta-heuristic search can effectively improve the structure of software without affecting its function. In this paper,a class diagram refactoring method based on Whale Optimization Algorithm is proposed,and the quality model constructed by index coupling,inheritance and abstraction is empolyed to guide the search for the optimal refactoring sequence. Cetacean optimization method is used to refactor the class diagram in six different open source programs. The results show that the class diagram refactor the based on cetacean optimization algorithm is superior to Simulated Annealing Algorithm and Hill Climbing Algorithm in terms of quality gain,and can effectively improve the quality refactoring.

Key words:software quality;software refactoring;whale optimization algorithm;quality measures;class diagram

軟件产品经常随着需求的变更演变为完成不同的功能,这些演变可能使软件设计变得更加复杂,致使软件质量降低. 重构被定义为优化现有系统的内部结构而不改变其功能,主要通过改进抽象、耦合、继承等质量属性来提高软件质量. 重构最初是在面向对象软件的环境中提出的[1],软件重构已经被应用于面向方面的软件、软件产品线等不同的环境,以及应用在代码、模型、文档等不同的层次中.

软件重构阶段可以分为代码层重构和模型层重构,模型层的类图重构通过找到最佳重构序列来提高软件质量,而寻找最佳重构是一个优化问题,可通过进化算法来实现,进化算法包括爬山算法[2]、模拟退火算法、群体智能算法和生物地理算法等. 群体智能算法主要是模拟动物的群体行为,依靠相互合作来捕获食物,通过自身学习及向他人学习来不断改变自身的搜索方向来提高捕食的效率. 群体智能优化算法的优势在于利用群体能力进行协同搜索,从而在解空间内找到最优解. 其中鲸鱼优化算法是根据鲸鱼围捕猎物的行为而提出的算法.

很多人都对软件重构进行了相关研究. Kebir等人[3]提出了一种基于遗传算法的软件构件自动重构方法,首先检测出代码坏味道,然后从基于组件的源代码中构建源代码模型,最后用遗传算法搜索重构的最佳序列来减少源代码模型中存在的代码坏味道. Mohan等人[4]介绍了许多优化算法用于自动化重构,实现了一个Java重构工具MultiRefactor,该工具着眼于软件质量、代码优先级及重构覆盖率. Khatchadourian等人[5]提出了一种自动重构方法,并设计了一个Eclipse IDE的插件,帮助开发人员以一种保持语义的方式编写高效的流代码. 该方法基于一种新的数据排序和类型状态分析,由前置条件和转换组成,用于自动确定将顺序流转换为并行流、将已经并行的流进行无序或去并行化. 与这些针对局部代码的重构相比,本文侧重于全局的类图重构及模型优化.

软件质量模型被广泛应用于软件重构以识别重构对象、引导重构策略的选择以及评估重构后软件质量的变化. 本研究重点考虑抽象、耦合和继承属性,它们在软件质量中占很大因素,对于单个质量指标可以表示软件度量的不同方面. 继承可以指导类是否是正确关联和扩展的[6],以及类的层级结构,该度量结合了实现接口和抽象类的使用. 耦合可用来指导软件系统中对象之间相互依赖的程度[7],期望尽可能的低耦合. 抽象是指导系统的稳定,系统的变化是体现在具体类上的,使用抽象可以提升设计的简单性,改善软件开发的质量[8]. 因此我们采用继承、耦合和抽象来构建质量模型.

鲸鱼优化算法搜索能力强、结构简单、参数少并且易于实现 [9],所以选择鲸鱼优化算法寻找最优的类图重构序列来进行类图重构,最后通过构建质量模型来评价类图重构的质量.

1   质量模型构建

为了简化UML类图在RAM中的表示,以便用鲸鱼优化算法处理类图,用抽象数据结构UML映射复杂度更低一些. 考虑15种常规的类图重构重命名类、用委托关系代替继承关系、用继承关系代替委托关系、提取到子类、提取到父类、折叠继承关系、内联类、提取类、函数下移、方法提到基类中、方法重命名、字段下移、字段上移、字段重命名、封装字段. 通过一系列的转化来找到最优的重构序列,然而在一些场景中,如果多个类都继承自某一父类或者父接口,会具有接口上的一致性. 但是如果将其中的某些类单独提取出来,可能会破坏这种一致性. 因此,为了提高类图的整体质量,有时候需要综合考虑多个因素,而不仅仅只是考虑接口的一致性,进而获得更好的解决方案.

2   基于鲸鱼优化算法的类图重构

鲸鱼优化算法是一种元启发式优化算法,该算法模拟了座头鲸的捕猎行为,座头鲸喜欢捕食一群靠近水面的小鱼和小虾,遇到猎物后会先向下俯冲大约12 m,然后开始在猎物周围制造螺旋形气泡,最后游向水面捕食猎物[10]. 这个过程提取出三个数学模型即围捕猎物、螺旋气泡网捕食和寻找猎物. 用鲸鱼算法解决类图优化的基本思想如图1所示.

根据类图可能的重构序列及质量模型作为优化的参数,鲸鱼群中的每一个个体的位置均包含一组重构序列. 利用鲸鱼寻找猎物的方式不断更新类图的重构序列,直到找到最好的位置,即找到最佳重构序列. 针对质量度量,首先采用耦合、继承和抽象这三个适应度函数来进行指导,并获得鲸鱼优化算法针对单个度量的改进程度.

2.1   提取重构序列

2.2   螺旋气泡网寻找

2.2.1   收縮包围机制

2.2.2   螺旋更新位置

2.3   搜索最优重构序列

3   实验环境与结果分析

3.1   数据来源

将鲸鱼优化算法用于类图的优化,将抽象、耦合和继承这三个适应度函数来进行衡量优化的结果. 实验的输入程序包括6个开源Java项目:JSON,一个用于数据交换格式的Java库;词法分析器生成器JFlex;基于xml的远程过程调用库Apache-XmlRpc;Mango及解析器生成器和基于GUI框架开发的图形编辑器JHotDraw. 上述6个开源项目针对不同的软件结构,有关实验的Java项目的详细信息见表4. 实验的总运行次数为10*3(搜索)*3(函数)*6(基准),总共运行540次. 实验在一台3.40GHz Intel Core i7-3770处理器和8gb RAM的PC上进行.

3.2   实验结果分析

图3展示了运用鲸鱼优化算法的结果,显示了6个基准程序中每个适应度函数的平均质量增益(通过最终的总体度量分数减去初始分数,10次运行的平均值).

在三个适应度函数中,耦合是唯一一个显示出显著改善的因子. 抽象的改进很小,继承完全没有变化. 事实上,继承函数唯一有变化的情况是在模拟退火中. 对于耦合函数在改进方面更有效,在抽象和继承函数中改进很小表明用于组合这些函数的度量缺乏波动性. 在Mango项目中耦合函数的增益明显高于其他,这说明Mango项目耦合程度较高,易于改进. XmlRpc在耦合方面改进很小,可能是因为它类之间的耦合很小.

结果表明鲸鱼优化算法相对质量提升更优,但也表明,模拟退火算法优于爬山算法,这是因为爬山算法更容易陷入局部最优,提前找到的最优重构序列并不是全局最优,鲸鱼优化算法相比较而言不容易陷入局部最优. 同样的抽象和继承缺乏应用的重构操作,这些函数的质量增益差的原因是由于缺少可用的操作,而其他指标更不稳定,并且有更多的重构操作可用来改进他们.

为了进一步验证鲸鱼优化算法的求解性能,将鲸鱼优化算法与爬山算法和模拟退火算法这三种不同的优化算法进行了60次求解. 图5表明了鲸鱼优化算法用于类图重构的收敛性更好,因为爬山算法是选择邻近点,容易陷入局部最优,达到快速收敛,模拟退火算法的特点是随机选择,相比较而言没那么容易陷入局部最优,收敛速度相对慢一些,而鲸鱼优化收敛是取决于a,固定住a,来弱化算法,从而减弱其收敛性,实验结果表明,鲸鱼优化算法的全局优化能力最强,且算法相对稳定,而模拟退火算法优化能力和稳定性居中,且优于爬山算法,所以鲸鱼优化算法在收敛性和搜索空间上都要更优一些. 对函数的初始和最终度量分数进行统计分析,使用具有95%置信水平的Wilcoxon符号秩检验,所获得的结果在比较函数的每次运行时具有统计学意义.

4   总   结

近年来,有很多关于软件重构的研究,但现有的重构研究多侧重于在代码编写阶段为开发人员提供局部代码的重构及代码推荐,很少考虑在分析设计阶段为开发设计人员提供全局性的重构. 本文采用鲸鱼优化算法来调整类成员与类之间的映射关系,得到一组最优重构序列. 同时,实验对比证明了本文提出的鲸鱼优化算法可以有效应用于软件重构进而提高软件质量. 后续工作将对稳定性、可靠性等属性做进一步研究.

参考文献

[1]    BAQAIS A A B,ALSHAYEB M. Automatic software refactoring:a systematic literature review[J]. Software Quality Journal,2020,28(2):459—502.

[2]    張英杰,郭会芳,付海滨,等. 面向多模态函数的自适应混沌爬山微粒群算法[J]. 湖南大学学报(自然科学版),2013,40(2):77—81.ZHANG Y J,GUO H F,FU H B,et al. An adaptive chaotic hill-climbing particle swarm optimization algorithm for multimodal functions[J]. Journal of Hunan University (Natural Sciences),2013,40(2):77—81. (In Chinese)

[3]    KEBIR S,BORNE I,MESLATI D. A genetic algorithm-based approach for automated refactoring of component-based software[J]. Information and Software Technology,2017,88:17—36.

[4]    MOHAN M,GREER D. Using a many-objective approach to investigate automated refactoring[J]. Information and Software Technology,2019,112:83—101.

[5]    KHATCHADOURIAN R,TANG Y M,BAGHERZADEH M,et al.Safe automated refactoring for intelligent parallelization of Java 8 streams[C]//2019 IEEE/ACM 41st International Conference on Software Engineering (ICSE). Montreal,QC,Canada.IEEE:2019:619—630.

[6]    SAVIC M,IVANOVIC M,RADOVANOVIC M. Analysis of high structural class coupling in object-oriented software systems[J]. Computing,2017,99(11):1055—1079.

[7]    BASHIR R S,LEE S P,KHAN S U R,et al. UML models consistency management:Guidelines for software quality manager[J]. International Journal of Information Management,2016,36(6):883—899.

[8]    GHANNEM A,KESSENTINI M,HAMDI M S,et al. Model refactoring by example:A multi-objective search based software engineering approach[J]. Journal of Software:Evolution and Process,2018,30(4):e1916.

[9]    CHAKRABORTY A,KAR A K.Swarm intelligence:A review of algorithms[M]//Nature-Inspired Computing and Optimization.Cham:Springer International Publishing,2017:475—494.

[10]  NASIRI J,KHIYABANI F M. A whale optimization algorithm (WOA) approach for clustering[J]. Cogent Mathematics & Statistics,2018,5(1):1483565.

猜你喜欢

类图
关于将类图映射成关系表的策略研究
基于语义的UML类图的集成分类
基于语义和结构的UML类图的检索
基于矩阵理论的UML类图形式化描述与检测
UML类图元模型基于描述逻辑的表示及验证
库存管理系统的设计与实现
UML构造型类图到XMI的映射方法研究
UML类图的一种表示方法
信用卡管理系统的UML建模研究
关于0类图的一个注记