CN104375827B - 基于高层设计的交互式软件自动化重构方法 - Google Patents
基于高层设计的交互式软件自动化重构方法 Download PDFInfo
- Publication number
- CN104375827B CN104375827B CN201410540361.5A CN201410540361A CN104375827B CN 104375827 B CN104375827 B CN 104375827B CN 201410540361 A CN201410540361 A CN 201410540361A CN 104375827 B CN104375827 B CN 104375827B
- Authority
- CN
- China
- Prior art keywords
- reconstruct
- model
- chance
- ref
- individual
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明属于软件工程技术领域,具体公开了一种基于高层设计的交互式软件自动化重构方法。本发明提出交互式软件自动化重构方法,以开发人员给定的目标软件系统高层模块结构以及系统当前的实现代码为输入,通过基于搜索的算法自动生成包含一系列重构步骤建议方案,并允许开发人员查看以及接受/拒绝重构建议。本发明将开发人员接受或拒绝重构建议的选择作为用户反馈记录下来并在下一轮基于搜索的重构建议生成过程中加以考虑,从而以一种迭代化的方式指导开发人员逐步完成重构任务。采用本发明可以使开发人员在重构建议的引导下逐步完成基于高层设计的软件自动化重构,从而提高软件重构工作的效率和质量。
Description
技术领域
本发明属于软件工程技术领域,具体涉及一种交互式软件自动化重构方法。
背景技术
软件系统在演化过程中常常会发生设计退化。开发人员为了提高系统的可维护性和可扩展性经常需要对代码进行重构。许多软件集成开发环境(IDE)都提供了方法和变量重命名等基本的代码自动化重构功能,而一些重构工具还提供了基于代码坏味道(BadSmell)识别的重构机会侦测功能,能够发现并推荐方法提升、消除重复代码、提取方法、拆分上帝类(God Class)等重构机会,并支持自动化的重构执行。这些自动化重构中的重构机会识别都是基于度量值等局部代码特征实现的,无法反映更高层的设计重构要求。
然而,现实的软件维护中,开发人员可能会希望在一个高层设计模型的指导下进行代码重构,通过重构使得实现代码与高层设计相一致。这种设计模型往往是设计人员将某些设计原则和设计模式实例化并与软件系统的特定需求相结合的产物。在已有的软件维护技术中,反射模型(Reflexion Model)可以被用于验证高层设计与实现代码的一致性。反射模型由高层设计、底层代码模型以及两者之间的映射关系组成。高层设计可以由模块与模块之间的依赖关系表示;底层模型由代码元素(如,类、接口等)与它们之间的依赖关系表示。确定了模块与代码元素之间的映射关系之后,就可以确定高层模型中的模块结构以及模块之间的依赖关系是否与底层模型中实际实现的依赖关系相一致。
发明内容
本发明的目的在于提出一种基于高层设计的交互式软件自动化重构方法,以一种交互和迭代化的方式为开发人员提供自动化重构导航支持,从而提高基于高层设计的软件重构效率和质量。
本发明的核心思想是:通过映射算法建立高层设计模型中的模块与底层实现模型中的代码元素之间的映射关系,计算二者的差异并通过一种搜索算法自动生成包含一系列重构操作的重构方案;在此基础上通过一种迭代化的过程允许开发人员确认、拒绝或忽略所建议的重构操作并在考虑用户反馈的基础上不断生成新的重构方案。
本发明提供的基于高层设计的交互式软件自动化重构方法,其基本过程如图1所示。其中,白色的矩形框表示自动执行的活动,包括:底层模型抽取、反射模型生成、重构方案推荐和应用重构建议;灰色的矩形框表示需要开发人员参与的活动,包括:设计建模和用户检查;椭圆表示数据或信息,包括:源代码、高层设计、底层模型、反射模型、重构方案、用户反馈和接受的重构建议。利用本发明的方法,软件开发人员可以得到自动推荐的重构方案,同时还可以接受、拒绝或忽略重构方案中所建议的重构操作,使得后续生成的重构建议可以将用户反馈考虑进来。整个方法过程包含如下步骤:
(1)开发人员确定软件系统中的重构范围,并通过建模工具描述与重构范围内代码相对应的期望高层设计模型,包含模块及模块间的各种依赖关系(例如继承、对象创建和其他依赖关系);
(2)自动对重构范围内的源代码进行逆向分析得到底层模型,包含代码元素(如类、接口、方法、属性等)以及它们之间的各种依赖关系(包括类之间的创建关系、类与接口之间的继承关系、类与方法之间的包含关系等);
(3)基于高层设计模型中的模块以及底层模型中的代码元素之间的文本相似度和结构相似度,建立它们之间的映射关系,从而生成反映高层设计与实现代码之间符合性情况的反射模型;
(4)使用基于搜索的重构方案推荐算法生成一个包含一系列重构操作的建议重构方案;
(5)开发人员检查建议重构方案中的各个重构操作,接受、拒绝或忽略各个重构操作;所有被接受的重构操作都将被自动执行,此时源代码和底层模型将同时被相应修改;同时,被开发人员接受或拒绝的重构建议将被记录下作为用户反馈用于后续的建议重构方案生成;
(6)如果重构目标实现或方法无法生成新的重构建议则整个过程结束,否则返回步骤4继续执行。
由上文所述,本方法是一个不断迭代的过程,开发人员可以不断使用推荐技术得到重构建议,直到底层代码完全符合高层设计或者该方法不再能推荐出新的重构建议。对于后一种情况,开发人员可以手动完成剩余的重构工作或修改高层设计后再用本发明的方法来推荐出新的重构建议。
下面对本发明技术方案中的两个部分作进一步介绍:反射模型的自动生成以及结合开发人员反馈的重构推荐算法。
反射模型的自动生成
反射模型生成技术旨在找到一个从底层模块代码元素(类或接口)到高层设计模块之间的映射关系。本发明采用遗传算法来找到诸多映射方案中最优的映射关系来生成最为合理的反射模型,该遗传算法包含以下步骤:
(1)将底层模型代码元素(类或接口)到高层设计模块的一个映射关系编码为一个个体。一个个体用一个向量表示,向量的长度为底层模型中类(或接口)的数量,向量的每一个维度(也称为一个基因)的值表示该类(或接口)所对应的模块;
(2)随机生成一组个体作为种群,种群中个体的数量N为偶数;
(3)计算种群中最优的个体p。最优个体的计算考虑了个体所代表的反射模型的文本相似度和结构相似度。如果反射模型中类(或接口)与其映射的模块的描述越相近,那么反射模型的文本相似度越大;如果反射模型中依赖符合的情况越多(换言之,依赖缺失和依赖分歧的情况越少),那么反射模型的结构相似度越大。本发明的遗传算法综合上述两个相似度来挑选出最优的个体;
(4)将种群中的个体随机两两配对,对每对个体进行交叉产生下一代个体,此时种群中个体的数量变为2N;
(5)对新产生的N个个体进行变异;
(6)在种群中挑选N个最优的个体作为下一代种群,并保证N个个体中尽可能无重复;
(7)如果当前种群中存在比p更优的个体,那么将p更换为该个体;
(8)如果到达了用户指定的迭代次数则算法结束,反之则返回到步骤4,继续执行。
当算法结束后,最优个体p即代表了最优的映射关系,本发明将其作为自动生成的反射模型。
重构方案推荐算法
结合反馈的重构方案推荐算法是一个多次上升的爬山算法。算法的输入为一个输出的反射模型model, 用户的反馈feedback,以及用户设定的上升次数descNum;算法的输出是包含连续可执行步骤的重构方案。在算法的执行过程中,算法会不断模拟反射模型的变化情况来计算出一系列重构步骤。该算法主要包含如下步骤:
(1)设全局评估值bestFit为反射模型model的综合评估值,综合评估值包含了反射模型的文本相似度、结构相似度和底层模型的内聚耦合度量值,评估值越大表示反射模型的符合度越好;
(2)设全局重构方案bestSolution为空,设局部重构方案localSolution为空;
(3)设局部评估值localBestFit为当前反射模型model的综合评估值;
(4)对反射模型model检测重构机会,得到检测到的重构机会空间refCands,如果重构机会空间refCands为空,则算法结束;
(5)结合反馈信息,在重构机会空间refCands中找到最好的重构机会ref ;
(6)将重构机会ref加入局部重构方案localSolution之中,并将反射模型model更新为应用重构机会ref之后的反射模型;其做法为:
a)如果重构机会ref的评估值呈上升趋势:设局部评估值localBestFit为重构机会ref的评估值,回到步骤3继续执行算法;
b)反之,如果重构机会ref的评估值不呈上升趋势:如果此时局部评估值localBestFit的值高于全局评估值bestFit的值,那么设全局评估值bestFit的值为局部评估值localBestFit的值,并将全局重构方案bestSolution设为局部重构方案localSolution,上升次数descNum自减一次;如果上升次数descNum不为0,则回到步骤3继续执行算法,反之则算法结束;
最终将全局重构方案bestSolution推荐给开发人员。
在步骤5中,本发明采用以下方式来结合反馈信息在重构机会空间中找到最好的重构机会。首先,为每一个重构机会计算其综合评估值F ref ,然后,对每一个重构机会ref,在用户的反馈中(即,已经被用户拒绝/接受的重构建议)查找与该重构机会相似的重构建议。如果反馈中有m条被拒绝的建议与重构机会ref相似,有n条被接受的建议与重构机会ref相似,且应用重构机会ref后产生的反射模型综合评估度量值为F ref ,则ref的评估值调整为:
Eva ref = F ref ╳ (1+α) m ╳(1+β)n
其中,α和 β分别为用户设定的奖励和惩罚系数。在本发明中,通过在重构机会空间中挑选出具有最大的Eva ref 值的重构机会作为最好的重构机会。
本发明提出交互式软件自动化重构方法,以开发人员给定的目标软件系统高层模块结构以及系统当前的实现代码为输入,通过基于搜索的算法自动生成包含一系列重构步骤建议方案,并允许开发人员查看以及接受/拒绝重构建议。本发明将开发人员接受或拒绝重构建议的选择作为用户反馈记录下来并在下一轮基于搜索的重构建议生成过程中加以考虑,从而以一种迭代化的方式指导开发人员逐步完成重构任务。采用本发明可以使开发人员在重构建议的引导下逐步完成基于高层设计的软件自动化重构,从而提高软件重构工作的效率和质量。
附图说明
图1为基于高层设计的交互式软件自动化重构方法的总体流程图。
图2是方法的原型工具Refactoring Navigator的工具截图。
具体实施方式
图2为基于本发明的方法开发的原型工具。开发人员可以利用该工具刻画预期的高层设计、得到具有连续步骤的重构方案、交互式地给予反馈以及自动化地执行重构建议。具体实施方式如下:
(1)开发人员在工具中画出预期的高层设计,并对每个模块做描述。在图2中,空心三角箭头的连线代表继承、分叉箭头的连线代表创建以及实心箭头的连线代表其他依赖。根据图2的设计,开发人员希望IO模块能够依赖于抽象而不依赖于具体实现。因此,除了创建关系,IO模块不允许以其他方式依赖Concrete Question和Concrete Answer模块。
(2)开发人员选择重构范围,重构范围可以是整个系统,也可以是若干包或若干类(或接口)。在图2中,开发人员选择了16个类(或接口)作为重构范围。
(3)工具自动将重构范围内的类(或接口)映射到高层设计的模块中。
(4)开发人员根据自己的领域知识手动微调映射关系,并再次生成反射模型。如图2所示。此时有两条断线表示的分歧依赖,意味着底层代码与高层设计并不一致。
(5)工具根据开发人员要求推荐出重构方案。推荐的重构方案中包含了诸如将IO模块中的某些read*Question方法移动到对应的Question类中的重构建议,比如,将IO模块中IO类的readRankQuestion方法移动到RankQuestion类中,以及将IO类的readMapQuestion方法移动到MapQuestion类中。
(6)开发人员在推荐出的重构方案中应用若干认可的重构步骤,拒绝若干不认可的重构步骤。比如,用户认可并应用了一个移动readRankQuestion到RankQuestion类的建议。
(7)工具记录下用户反馈,并自动重构被认可的重构建议。
(8)用户再次要求工具推荐重构方案,在新的重构方案中更多的read*Question方法移动到对应的Question类中,并推荐将各Question类中的read*Question方法提升到父类Question中。
(9)开发人员按照工具提示应用了方案中的一些建议,再经过几次类似的反馈迭代,最终消除了高层设计与底层代码中的不一致情况。
Claims (3)
1.基于高层设计的交互式软件自动化重构方法,其特征在于具体步骤为:
(1)开发人员确定软件系统中的重构范围,并通过建模工具描述与重构范围内代码相对应的期望高层设计模型,包含模块及模块间的各种依赖关系;
(2)对重构范围内的源代码进行逆向分析得到底层模型,包含代码元素以及它们之间的各种依赖关系;所述代码元素包括如类、接口、方法、属性,所述依赖关系包括类之间的创建关系、类与接口之间的继承关系、类与方法之间的包含关系;
(3)基于高层设计模型中的模块以及底层模型中的代码元素之间的文本相似度和结构相似度,建立它们之间的映射关系,从而生成反映高层设计与实现代码之间符合性情况的反射模型;
(4)使用基于搜索的重构方案推荐算法生成一个包含一系列重构操作的建议重构方案;
(5)开发人员检查建议重构方案中的各个重构操作,接受、拒绝或忽略各个重构操作;所有被接受的重构操作都将被自动执行,此时源代码和底层模型将同时被相应修改;同时,被开发人员接受或拒绝的重构建议被记录下作为用户反馈用于后续的建议重构方案生成;
(6)如果重构目标实现或方法无法生成新的重构建议,则整个过程结束,否则返回步骤4继续执行;
步骤(3)采用遗传算法来找到诸多映射方案中最优的映射关系来生成最为合理的反射模型,该遗传算法包含以下步骤:
(3.1)将底层模型代码元素到高层设计模块的一个映射关系编码为一个个体;一个个体用一个向量表示,向量的长度为底层模型中类或接口的数量,向量的每一个维度的值表示该类或接口所对应的模块;
(3.2)随机生成一组个体作为种群,种群中个体的数量N为偶数;
(3.3)计算种群中最优的个体p,最优个体的计算考虑了个体所代表的反射模型的文本相似度和结构相似度;如果反射模型中类或接口与其映射的模块的描述越相近,那么反射模型的文本相似度越大;如果反射模型中依赖符合的情况越多,那么反射模型的结构相似度越大,遗传算法综合上述两个相似度来挑选出最优的个体;
(3.4)将种群中的个体随机两两配对,对每对个体进行交叉产生下一代个体,此时种群中个体的数量变为2N;
(3.5)对新产生的N个个体进行变异;
(3.6)在种群中挑选N个最优的个体作为下一代种群,并保证N个个体中尽可能无重复;
(3.7)如果当前种群中存在比p更优的个体,那么将p更换为该个体;
(3.8)如果到达了用户指定的迭代次数则算法结束,反之则返回到步骤3.4,继续执行;
当算法结束后,最优个体p即代表了最优的映射关系,将其作为自动生成的反射模型。
2. 如权利要求1所述的基于高层设计的交互式软件自动化重构方法,其特征在于,步骤(4)所述使用基于搜索的重构方案推荐算法,是采用结合反馈的重构方案推荐算法,该算法的输入为一个输出的反射模型model, 用户的反馈feedback,以及用户设定的上升次数descNum;算法的输出是包含连续可执行步骤的重构方案,具体步骤为:
(4.1)设全局评估值bestFit为反射模型model的综合评估值,综合评估值包含了反射模型的文本相似度、结构相似度和底层模型的内聚耦合度量值,评估值越大表示反射模型的符合度越好;
(4.2)设全局重构方案bestSolution为空,设局部重构方案localSolution为空;
(4.3)设局部评估值localBestFit为当前反射模型model的综合评估值;
(4.4)对反射模型model检测重构机会,得到检测到的重构机会空间refCands,如果重构机会空间refCands为空,则算法结束;
(4.5)结合反馈信息,在重构机会空间refCands中找到最好的重构机会ref ;
(4.6)将重构机会ref加入局部重构方案localSolution之中,并将反射模型model更新为应用重构机会ref之后的反射模型;其做法为:
a)如果重构机会ref的评估值呈上升趋势:设局部评估值localBestFit为重构机会ref的评估值,回到步骤4.3继续执行算法;
b)反之,如果重构机会ref的评估值不呈上升趋势:如果此时局部评估值localBestFit的值高于全局评估值bestFit的值,那么设全局评估值bestFit的值为局部评估值localBestFit的值,并将全局重构方案bestSolution设为局部重构方案localSolution,上升次数descNum自减一次;如果上升次数descNum不为0,则回到步骤4.3继续执行算法,反之则算法结束;
最终将全局重构方案bestSolution推荐给开发人员。
3. 如权利要求2所述的基于高层设计的交互式软件自动化重构方法,其特征在于在步骤(4.5)中所述结合反馈信息,在重构机会空间refCands中找到最好的重构机会ref,采用以下方式:首先,为每一个重构机会计算其综合评估值F ref ,然后,对每一个重构机会ref,在用户的反馈即已经被用户拒绝/接受的重构建议中查找与该重构机会相似的重构建议;如果反馈中有m条被拒绝的建议与重构机会ref相似,有n条被接受的建议与重构机会ref相似,且应用重构机会ref后产生的反射模型综合评估度量值为F ref ,则ref的评估值调整为:
Eva ref = F ref ╳ (1+α) m ╳ (1+β) n
其中,α和β分别为用户设定的奖励和惩罚系数;通过在重构机会空间中挑选出具有最大的Eva ref 值的重构机会作为最好的重构机会。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410540361.5A CN104375827B (zh) | 2014-10-14 | 2014-10-14 | 基于高层设计的交互式软件自动化重构方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410540361.5A CN104375827B (zh) | 2014-10-14 | 2014-10-14 | 基于高层设计的交互式软件自动化重构方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104375827A CN104375827A (zh) | 2015-02-25 |
CN104375827B true CN104375827B (zh) | 2017-10-10 |
Family
ID=52554770
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410540361.5A Active CN104375827B (zh) | 2014-10-14 | 2014-10-14 | 基于高层设计的交互式软件自动化重构方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104375827B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109976802B (zh) * | 2019-03-31 | 2022-08-12 | 东南大学 | 一种面向模式的软件架构重构方法 |
CN110096257B (zh) * | 2019-04-10 | 2023-04-07 | 沈阳哲航信息科技有限公司 | 一种基于智能识别的设计图形自动化评判系统及方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101114222A (zh) * | 2007-07-26 | 2008-01-30 | 南京大学 | 一种基于本体的反射式体系结构自演化方法 |
US7451439B2 (en) * | 2004-12-03 | 2008-11-11 | Palo Alto Research Center Incorporated | System and method for automatically identifying compound refactorings of program code through quantitative metric analysis |
CN103336760A (zh) * | 2013-07-11 | 2013-10-02 | 北京信息科技大学 | 一种基于逆向工程自动生成软件文档的方法及装置 |
CN103473400A (zh) * | 2013-08-27 | 2013-12-25 | 北京航空航天大学 | 基于层次依赖建模的软件fmea方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9720690B2 (en) * | 2011-11-13 | 2017-08-01 | International Business Machines Corporation | Software architecture by untangling undesired code level dependencies using code refactoring |
-
2014
- 2014-10-14 CN CN201410540361.5A patent/CN104375827B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7451439B2 (en) * | 2004-12-03 | 2008-11-11 | Palo Alto Research Center Incorporated | System and method for automatically identifying compound refactorings of program code through quantitative metric analysis |
CN101114222A (zh) * | 2007-07-26 | 2008-01-30 | 南京大学 | 一种基于本体的反射式体系结构自演化方法 |
CN103336760A (zh) * | 2013-07-11 | 2013-10-02 | 北京信息科技大学 | 一种基于逆向工程自动生成软件文档的方法及装置 |
CN103473400A (zh) * | 2013-08-27 | 2013-12-25 | 北京航空航天大学 | 基于层次依赖建模的软件fmea方法 |
Non-Patent Citations (1)
Title |
---|
Search-based Refactoring Using Recorded Code Changes;Ali Ouni 等;《http://ieeexplore.ieee.org/document/6498470/》;20130415;第1页第1段至第4页倒数第2段,图1-3 * |
Also Published As
Publication number | Publication date |
---|---|
CN104375827A (zh) | 2015-02-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Burge | The systems engineering tool box | |
Ciaurri et al. | Application of derivative-free methodologies to generally constrained oil production optimization problems | |
Bohm et al. | Representing functionality to support reuse: conceptual and supporting functions | |
CN109213754A (zh) | 一种数据处理系统及数据处理方法 | |
CN111125530A (zh) | 一种基于多类型特征深度学习的信息流推荐方法 | |
CN102084394A (zh) | 优化氢气管线系统的操作 | |
CN109240929A (zh) | 软件质量预测方法、装置、终端和计算机可读存储介质 | |
CN112199086A (zh) | 自动编程控制系统、方法、装置、电子设备及存储介质 | |
CN109146081A (zh) | 一种用于机器学习平台中快速创建模型项目的方法及装置 | |
CN109144481B (zh) | 面向领域的软件密集型系统的构件化软件配置方法 | |
CN104885101A (zh) | 包括表征选择的不确定度的基于不完备描述对新总体成员的相似成员的自动选择 | |
CN106095961B (zh) | 表显示处理方法和装置 | |
CN104375827B (zh) | 基于高层设计的交互式软件自动化重构方法 | |
CN111126578B (zh) | 一种模型训练的联合数据处理方法、装置与系统 | |
Roth-Berghofer et al. | Building case-based reasoning applications with myCBR and COLIBRI studio | |
Klimek | Towards formal and deduction-based analysis of business models for soa processes | |
CN103026374A (zh) | 用于估计新工业厂房运作准备成本的系统 | |
Smith | How can research on past urban adaptations be made useful for sustainability science? | |
JP4343984B2 (ja) | 情報処理装置、情報処理方法、プログラム、データ構造、および媒体 | |
Li et al. | A hybrid disassembly sequence planning approach for maintenance | |
CN104573916B (zh) | 一种技术指标实例生成方法及装置 | |
Simons et al. | User-centered, evolutionary search in conceptual software design | |
Antao et al. | Techniques for synthesis of analog integrated circuits | |
Li et al. | Extenics enhanced axiomatic design procedure for AI applications | |
Nefzi et al. | A critical analysis of lifecycles and methods for ontology construction and evaluation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |