CN109976802A - 一种面向模式的软件架构重构方法 - Google Patents
一种面向模式的软件架构重构方法 Download PDFInfo
- Publication number
- CN109976802A CN109976802A CN201910254644.6A CN201910254644A CN109976802A CN 109976802 A CN109976802 A CN 109976802A CN 201910254644 A CN201910254644 A CN 201910254644A CN 109976802 A CN109976802 A CN 109976802A
- Authority
- CN
- China
- Prior art keywords
- reconstruct
- mode
- component
- software
- arcgraph
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/72—Code refactoring
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公布了一种面向模式的软件架构重构方法,利用模式能阐述项目中特定设计情形下反复出现的问题以及提供的解决方案的特性,定位与识别软件架构图中设计缺陷的重构点,并对这些重构点进行面向模式的重构,实施重构操作,继而得到重构效果图。针对得到的重构后的架构图,计算重构后的度量指标,分析与比较重构前后的好坏,提供给项目开发人员架构建议参考,便与开发人员实施重构。模式作为长期开发过程中对最佳实践方式的总结和提炼,包含了前人的大量劳动和智慧,为软件的重构提供了良好的指导方向。
Description
技术领域
本发明涉及一种重构方法,具体涉及一种面向模式的软件架构重构方法,属于软件工程学软件架构重构技术领域。
背景技术
软件质量是“反映实体满足明确的和隐含的需求的能力的特性的总和”,具体地说,软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准、以及所有专业开发的软件都应具有的和隐含特征相一致的程度,同时,随着软件变更,软件质量也会相应的变动。目前,软件经常面临所处环境时常变化以及需求不断变更的情况,随之而来的影响是软件规模逐渐增大,业务复杂性提高,软件质量持续走低,这些情况使得软件维护成本高昂。
重构是指能够在不改变程序外部表现的情况下,改善程序的内部表现,从而有效地改善软件质量。重构不是简单的修改代码,而是一种能够确保一致性的软件修改方式。重构技术的出现,改善了软件的设计与质量,使得软件更容易理解与维护。目前重构包括源代码重构,架构重构和需求重构等。其中,由于架构能够反映系统的蓝图,刻画系统的结构和行为,相比于其他两种重构,通过架构重构重新调整架构的结构层次和组件间依赖关系提高软件质量,能更有效提高架构的可理解性、可维护性,可扩展性等方面。
目前,软件重构包括基于不定式,基于文本等重构技术。这些技术大都对源代码进行重构点识别与定位,没有利用到架构层次的信息(如组件间依赖关系),找到重构点具有局部性,很难找到软件的设计缺陷,无法全面的提高软件质量。
发明内容
本发明的目的是提供一种能够利用模式阐述软件架构设计问题并给出相应解决方案的方法,该方法具有较高精确性的识别出软件架构的设计缺陷,依据模式的规范指导软件架构重构的方法,该发明依据开发人员对自身的架构特点了解,从模式库中选择相应的模式进行自动化重构。由于模式是从大量的实际经验中得到的结论,具有良好的重构效果,且根据不同的软件架构特性,添加了不同的模式选择进行重构,有效避免了方法不够通用的弊端。
为了实现上述目的,本发明的技术方案如下:一种面向模式的软件架构重构方法,通过模式的阐述特定问题并有效解决的特性,运用模式来指导重构,使得软件架构设计与质量得以提升;该方法包括如下步骤:
步骤1)输入软件架构图ArcGraph,并进行软件质量指标度量。软件架构图由组件集合Comset{Com1,Com2,…,Comn}(n为组件数量)和组件间依赖集合Edgeset{Edge1,Edge2,…,Edgem}(m为组件依赖个数)组成。其中Comi表示组件i,Edgeij表示组件i依赖组件j。对ArcGraph进行质量指标度量,质量指标公式包括可扩展性、可替换性、易理解性、易测试性以及可修改性,由李必信,王桐,孔祥龙,张心悦在《一种基于软件架构的可演进性度量方法》一文中提出。度量结果表示为QualifyIndexSetOld={ModifiesIndexValue,ReplaceableIndexValue,UnderstandabilityIndexValue,TestabilityIndexValue,ExtensibilityIndexValue},用户根据上述的指标度量情况选择需要提高的质量指标作为重构需求;
步骤2)构建模式库,如插件模式,消息总线模式,分层模式等。利用决策图的方法找到重构点,以图的方式进行组织,决策图上的节点表示了在决策的过程中可能遇到的问题。这些问题决定了某一个特定位置是否能够应用某一模式。以及发现潜在的重构位置。决策图由判定和寻找两部分组成。
a)判定部分,定义判定规则来判断ArcGraph是否可以应用该模式。其中判定规则由四种节点UnaryNavigationNode,BinaryNavigationNode,OrConditionNode,PatternNode组成。其中:
①UnaryNavigationNode表示在对该模式的判断过程中,该节点只能有一种判断结果。比如,如果该节点判断是true,将继续判断下一个条件,否则将停止处理,即无法应用该模式重构。
②BinaryNavigationNode表示该节点的判断无论对错,都有对应的节点用于进一步判断。
③OrConditionNode表示对条件的判断可以采用并行的方式处理。其中每一个条件判断的结果不影响最终的判读结果。
④PatterNode表示经过判断,架构图可以应用该模式。
b)寻找部分,定义模式重构规范来寻找重构点;重构规范由两个节点UsePrincipleNode,RefactorNode组成。其中:
⑤UsespecificationNode表示使用该模式需要遵循的使用规范。
⑥RefactorNode表示经过模式使用规范找到的重构点集合。
对于每个模式,都会定义一棵决策图。
步骤3)用户根据度量结果以及人为干预从模式库中选择模式Patternchoose指导重构;
步骤4)对于架构图ArcGraph,应用Patternchoose指导重构,并作为软件重构的目标;
a)对于架构图ArcGraph使用Patternchoose模式,利用Patternchoose模式的决策图判定是否可以应用该模式。
b)若可以应用该模式,则利用该模式的规范找到重构点集合RefactorPointset={RefactorPointi}i=0,1,…,n;n为重构点个数;重构点RefactorPointi={RectComiset,RectEdgeiset,RectTypei};重构点由三部分组成,RectEdgeset表示需要重构的边集合,RectComset表示需要重构的组件集合,RectTypei表示重构的类型,总共有AddDependEdge(增加组件依赖边),RemoveDependEdge(减少组件依赖边),CombineComp(组件合并),SplitComp(组件拆分),AddComp(添加组件)五种类型。
步骤5)遍历重构点集RefactorPointset,对于每个RefactorPointi,根据其RectTypei对RectComiset,RectEdgeiset执行相应的重构操作,并预测出重构后的架构图RefactArcGraph。
相对于现有技术,本发明的技术方案如下:本发明方法提出了一种面向模式的软件架构重构方法,通过利用模式阐述了项目中特定设计情形下反复出现的问题,并提供解决方案,指导重构,并将模式作为重构的目标,主要有以下一些优点:
(1)模式库构建多种模式,重构方法具有扩展性,本发明方法以软件架构图作为输入,以需提升的架构度量指标作为重构需求。针对不同项目需提升的度量指标的重构需求,模式库中构建了不同模式来进行面向模式的重构。在模式库中构建不同的模式,针对不同的重构需求面向相应的模式进行重构。
(2)重构方法具有全局性,首先,面向模式的重构过程是从软件全局的角度进行重构,涉及的重构范围广,架构重构操作多。很适用于现在工业界的软件架构的升级调整。与现有方法都是对架构进行局部重构(如基于度量的重构)相比,本方法能更有效地从全局的角度找到影响软件质量和设计有缺陷的重构点,进行架构级别重构。
(3)重构方法有效性能够得到保障。,模式阐述了项目中特定设计情形下反复出现的问题,并提供解决方案。模式也是在长期开发过程中对最佳实践方式的总结和提炼,包含了前人的大量劳动和智慧,为软件的重构提供了良好的指导方向。利用模式该特性有效改善重构结果。重构结果的有效性,精确性能够得到保障。
附图说明
图1是本发明中面向微内核的重构决策图。
图2是本发明中对实例架构图的质量指标度量结果。
图3是本发明中对实例架构图面向微内核模式重构的一个过程图。
图4是本发明的流程图。
具体实施方式
为了加深对本发明的认识和理解,下面结合附图进一步阐述本发明。
参见图1,本发明利用模式在项目应用中能阐述特定设计情形下反复出现的问题,并提供解决方案。为重构提供了良好的指导方向。面向模式进行软件架构重构能从软件架构全局性角度发现设计和质量缺陷,找到重构点,并且模式是在长期开发过程中对最佳实践方式的总结和提炼,面向模式的重构能够更好的提高软件质量。
一种面向模式的软件架构重构方法,所述方法包括以下步骤:第一步)输入架构图并度量质量指标;
输入软件架构图ArcGraph,并进行软件质量指标度量。软件架构图由组件集合Comset{Com1,Com2,…,Comn}(n为组件数量)和组件间依赖集合Edgeset{Edge1,Edge2,…,Edgem}(m为组件依赖个数)组成。其中Comi表示组件i,Edgeij表示组件i依赖组件j。对ArcGraph进行质量指标度量,质量指标公式包括可扩展性、可替换性、易理解性、易测试性以及可修改性,由李必信,王桐,孔祥龙,张心悦在《一种基于软件架构的可演进性度量方法》一文中提出。度量结果表示为QualifyIndexSetOld={ModifiesIndexValue,ReplaceableIndexValue,UnderstandabilityIndexValue,TestabilityIndexValue,ExtensibilityIndexValue},用户根据上述的指标度量情况选择需要提高的质量指标作为重构需求;
第二步)构建模式库;
本发明采用了利用模式指导重构,构建模式库,模式包括微内核,分层模式等。
为每一个模式建立一棵决策图,以树的方式进行组织,以发现潜在的重构位置。首先为选定模式定义判定规则,判断该架构图是否可以应用该模式。其次根据选定模式的使用规范,查找相应的重构点。
每棵决策树对应于一个模式,决策树的结点表示了在决策过程中可能遇到的情况。这些情况决定了该架构图是否能够应用该模式以及需要重构的位置。决策树中节点分为六种类型:UnaryNavigationNode,BinaryNavigationNode,OrConditionNode,DesignPatternNode,UsePrincipleNode,RefactorNode。
①UnaryNavigationNode表示在对该模式的判断过程中,该节点只能有一种判断结果。比如,如果该节点判断是true,将继续判断下一个条件,否则将停止处理,即无法应用该模式重构。
②BinaryNavigationNode表示该节点的判断无论对错,都有对应的节点用于进一步判断。
③OrConditionNode表示对条件的判断可以采用并行的方式处理。其中每一个条件判断的结果不影响最终的判读结果
④PatterNode表示经过判断,架构图可以应用该模式。
⑤UsespecificationNode表示使用该模式需要遵循的规范。
⑥RefactorNode表示经过模式使用规范找到的重构点
第三步)模式选择
根据度量结果以及人为干预选择合适的模式,以便查找相应的架构重构点。本节主要介绍根据度量结果选择合适的模式。
结合度量指标计算公式,调研各个模式对软件质量的影响,制定表4-2。该表描述了如何根据软件架构的度量结果选择合适的模式进行重构。横轴属性代表了能够反映软件质量的各个质量和指标。纵轴属性表示相应的模式。√代表变好×代表变差,空格代表不定性(可能变好,不变或变差)。通过这张表推荐相应的模式指导重构。例如分层模式能够改善可修改性,可测试性,可替换性,但会导致易理解性指标下降。所以当可修改性,易测试性和可替换性需要改善时,可以使用分层模式。
表度量指标与模式对应表
第四步)应用模式
对于架构图ArcGraph,应用Patternchoose指导重构,并作为软件重构的目标;
a)对于架构图ArcGraph使用Patternchoose模式,利用Patternchoose模式的决
策图判定是否可以应用该模式。
b)若可以应用该模式,则利用该模式的规范找到重构点集合RefactorPointset={RefactorPointi}i=0,1,…,n;n为重构点个数;重构点RefactorPointi={RectComiset,RectEdgeiset,RectTypei};重构点由三部分组成,RectEdgeset表示需要重构的边集合,RectComset表示需要重构的组件集合,RectTypei表示重构的类型,总共有AddDependEdge(增加组件依赖边),RemoveDependEdge(减少组件依赖边),CombineComp(组件合并),SplitComp(组件拆分),AddComp(添加组件)五种类型。
步骤5)遍历重构点集RefactorPointset,对于每个RefactorPointi,根据其RectTypei对RectComiset,RectEdgeiset执行相应的重构操作,并预测出重构后的架构图RefactArcGraph。
第五步)实施重构
遍历重构点集RefactorPointset,对于每个RefactorPointi,根据其RectType对RectComiset,RectEdgeiset执行相应的重构操作,并预测出重构后的架构图RefactArcGraph。RectTypei分为增加组件依赖边,减少组件依赖边,组件合并,组件拆分,组件添加五种类型。每种模式所需的重构操作如下表4-3所示;√代表会执行×代表不会执行,空格代表不定性(根据实际需要)例如分层模式的重构,需要删除依赖边和组件合并操作,可能需要增加依赖边操作,但不会涉及组件拆分和额外组件增加的操作。
表模式与重构操作对应表
具体应用实施例:
一种面向模式的软件架构重构方法,所述方法包括以下步骤,步骤1)输入架构图并度量架构质量指标;
swftools0.6.0是一组用来处理Flash的swf文件的工具包。输入swftools0.6.0项目架构图ArcGraph,如图3左边图所示,ArcGraph由五个组件和四个依赖边组成,其中有一个组件是独立组件。对ArcGraph进行软件架构质量指标度量,结果如图2所示。
步骤2)构建微内核决策图;
构建微内核的决策图,并将微内核加入到模式库中。面向微内核模式的决策图如图1所示:
该决策树有两部分组成。
第一部分为判定部分,用于判定输入的架构图能否应用微内核模式。
判定部分中,决策树中结点1代表的是进行预处理,找出结构上强依赖的组件集Cset。定义如果一个组件仅仅依赖另一个组件,且不被其他组件依赖,则称这种关系为单依赖,属于强依赖。
决策树结点2找到入度为0且出度最大的组件作为核心组件,若没找到直接退出。表示在架构图中无法应用微内核模式。
结点3通过核心组件出度找到依赖组件集,一个连通的架构图除了核心组件和其相关的依赖组件集,若还存在其他组件,不符合重构微内核,重构代价过大,直接退出。
结点4表示通过上述判断,该架构图可以应用微内核模式
至此判定过程结束。
第二部分为寻找部分,用于查找重构点。
寻找部分中,结点5根据微内核的使用规范,找出扩展组件中不应存在依赖集Eset。
结点6表示结合结点1和结点5结果,成功找到那些需要重构的位置RefactorPointset。
步骤3)模式选择
将提高修改性,易测试性和可替换性作为重构需求,选择微内核模式对swftools0.6.0Arcgraph进行重构。
步骤4)应用模式
微内核架构包含两部分组件:核心模块(coremodules)和插件模块(plug-inmodules)。应用逻辑被分割为独立的插件模块和核心模块。如elicpse开发工具就是使用了微内核模式,用户使用eclipse进行软件开发,当需要使用扩展功能时,可以通过添加相应的jar包也就是插件来实现其扩展功能Eclipse依赖于插件,插件之间没有依赖关系。
定义重构集合RefactorPointset,执行微内核的决策图过程。
a)决策图判定部分
进入节点1,对架构图进行预处理,组件lib\python与lib组件间存在强依赖,定义如果一个组件仅仅依赖另一个组件,且不被其他组件依赖,则称这种关系为单依赖,属于强依赖。进行预处理合并的目的是为了更好判断微内核模式是否可以应用到架构图中。故需要将组件lib\python合并到lib,生成重构点RefactorPoint1={RectCom1set,RectEdge1set,RectType1},RectCom1set={lib\python,lib},RectEdge1set={Edge1},RectType1=CombineComp,将RefactorPoint1加入到RefactorPointset中。
进入节点二,寻找扇出最多且没有扇入的组件作为基础组件,图二中src组件为基础组件。
进入节点三,基础组件依赖的组件看成是插件,pdf2swf组件以及lib组件即为插件,且插件不依赖基础组件。
进入结点4,表示该模式可以应用微内核。决策图查找判定结束。
b)决策图寻找部分:
进入结点5,根据微内核的使用规范:插件间不应存在依赖关系。查找到重构点RefactorPoint2={RectCom2set,RectEdge2set,RectType2。RectCom2set={null},RectEdge2set={Edge2},RectType2=RemoveDependEdge,RefactorPoint2加入到RefactorPointset中。
进入结点6,输出结果点集合RefactorPointset。
步骤5)重构实施
图3给出了面向微内核的重构过程。下面给出面向微内核模式重构过程的具体说明。
遍历重构点集合RefactorPointset,RefactorPoint1执行合并操作,将lib\python合并到lib组件中。RefactorPoint2执行删除边操作,删除边edge2。重构操作完成后的架构图如图2右所示。
参见图1-图4,一种面向模式的软件架构重构方法,通过模式的阐述特定问题并有效解决的特性,运用模式来指导重构,使得软件架构设计与质量得以提升。该方法包括如下步骤:
步骤1)输入软件架构图ArcGraph,并进行软件质量指标度量。软件架构图由组件集合Comset{Com1,Com2,…,Comn}(n为组件数量)和组件间依赖集合Edgeset{Edge1,Edge2,…,Edgem}(m为组件依赖个数)组成。其中Comi表示组件i,Edgeij表示组件i依赖组件j。质量指标公式包括可扩展性、可替换性、易理解性、易测试性以及可修改性,由李必信,王桐,孔祥龙,张心悦在《一种基于软件架构的可演进性度量方法》一文中提出。度量结果表示为QualifyIndexSetOld={ModifiesIndexValue,ReplaceableIndexValue,UnderstandabilityIndexValue,TestabilityIndexValue,ExtensibilityIndexValue},用户根据上述的指标度量情况选择需要提高的质量指标作为重构需求;
步骤2)构建模式库,如插件模式,消息总线模式,分层模式等。利用决策图的方法找到重构点,以图的方式进行组织,决策图上的节点表示了在决策的过程中可能遇到的问题。这些问题决定了某一个特定位置是否能够应用某一模式。以及发现潜在的重构位置。决策图由判定和寻找两部分组成。
a)判定部分,定义判定规则来判断ArcGraph是否可以应用该模式。其中判定规则由四种节点UnaryNavigationNode,BinaryNavigationNode,OrConditionNode,PatternNode组成。其中:
①UnaryNavigationNode表示在对该模式的判断过程中,该节点只能有一种判断结果。比如,如果该节点判断是true,将继续判断下一个条件,否则将停止处理,即无法应用该模式重构。
②BinaryNavigationNode表示该节点的判断无论对错,都有对应的节点用于进一步判断。
③OrConditionNode表示对条件的判断可以采用并行的方式处理。其中每一个条件判断的结果不影响最终的判读结果。
④PatterNode表示经过判断,架构图可以应用该模式。
b)寻找部分,定义模式重构规范来寻找重构点;重构规范由两个节点UsePrincipleNode,RefactorNode组成。其中:
⑤UsespecificationNode表示使用该模式需要遵循的使用规范。
⑥RefactorNode表示经过模式使用规范找到的重构点集合。
对于每个模式,都会定义一棵决策图。
步骤3)用户根据度量结果以及人为干预从模式库中选择模式Patternchoose指导重构;
步骤4)对于架构图ArcGraph,应用Patternchoose指导重构,并作为软件重构的目标;
a)对于架构图ArcGraph使用Patternchoose模式,利用Patternchoose模式的决策图判定是否可以应用该模式。
b)若可以应用该模式,则利用该模式的规范找到重构点集合RefactorPointset={RefactorPointi}i=0,1,…,n;n为重构点个数;重构点RefactorPointi={RectComiset,RectEdgeiset,RectTypei};重构点由三部分组成,RectEdgeset表示需要重构的边集合,RectComset表示需要重构的组件集合,RectTypei表示重构的类型,总共有AddDependEdge(增加组件依赖边),RemoveDependEdge(减少组件依赖边),CombineComp(组件合并),SplitComp(组件拆分),AddComp(添加组件)五种类型。
步骤5)遍历重构点集RefactorPointset,对于每个RefactorPointi,根据其RectTypei对RectComiset,RectEdgeiset执行相应的重构操作,并预测出重构后的架构图RefactArcGraph。
这样,我们通过选择合适的模式进行重构,判断模式是否可以应用于该架构图,其次若能应用就根据模式使用规范寻找相应的重构点,执行相应的重构操作,。利用模式进行重构可以从软件全局的角度发现设计与质量缺陷,找到全局性的重构点,且模式是开发人员不断积累的经验总结,在架构图中应用模式能有效的改善软件质量。
总之,本方法的总体实施过程为:输入软件架构图,度量软件质量作为重构需求,根据需求选择合适的模式,利用该模式指导重构,1)首先判断该架构图是否可以应用模式2)若可以则通过该模式的使用规范找到重构点,针对重构点集,实施重构操作。对重构后的架构图重新度量,验证面向模式重构的有效性。
以上仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和等同替换,这些对本发明权利要求进行改进和等同替换后的技术方案,均落入本发明的保护范围。
Claims (6)
1.一种面向模式的软件架构重构方法,其特征在于,该方法包括如下步骤:
步骤1)输入软件架构图ArcGraph,并度量其质量指标;
步骤2)构建模式库,为每个模式构建决策图;
步骤3)用户将ArcGraph需要提高的质量指标作为重构需求从模式库中选择合适的模式Patternchoose;
步骤4)对于架构图ArcGraph,应用Patternchoose指导重构,并作为软件重构的目标;
步骤5)对于重构点集,执行相应的重构操作,并预测出重构后的架构图RefactArcGraph。
2.根据权利要求1所述的面向模式的软件架构重构方法,其特征在于,所述步骤1)输入软件架构图ArcGraph,并对ArcGraph进行质量指标度量,具体如下,软件架构图由组件集合Comset{Com1,Com2,…,Comn}(n为组件数量)和组件间依赖集合Edgeset{Edge1,Edge2,…,Edgem}(m为组件依赖个数)组成,其中Comi表示组件i,Edgeij表示组件i依赖组件j;对ArcGraph进行质量指标度量,度量结果表示为QualifyIndexSetOld={ModifiesIndexValue,ReplaceableIndexValue,UnderstandabilityIndexValue,TestabilityIndexValue,ExtensibilityIndexValue},用户根据上述的指标度量情况选择需要提高的质量指标作为重构需求。
3.根据权利要求1所述的面向模式的软件架构重构方法,其特征在于,所述步骤2)构建模式库,对于每个模式,都会定义一棵决策图,利用决策图的方法找到重构点,以图的方式进行组织,决策图上的节点表示了在决策的过程中可能遇到的问题,这些问题决定了某一个特定位置是否能够应用某一模式,以及发现潜在的重构位置,决策图由判定和寻找两部分组成,判定部分,定义判定规则来判断ArcGraph是否可以应用该模式;寻找部分,定义模式重构规范来寻找重构点;具体如下:
21)所述判定规则由四种节点UnaryNavigationNode,BinaryNavigationNode,OrConditionNode和PatternNode组成,其中:
①UnaryNavigationNode表示在对该模式的判断过程中,该节点只能有一种判断结果,如果该节点判断是true,将继续判断下一个条件,否则将停止处理,即无法应用该模式重构;
②BinaryNavigationNode表示该节点的判断无论对错,都有对应的节点用于进一步判断;
③OrConditionNode表示对条件的判断可以采用并行的方式处理,其中每一个条件判断的结果不影响最终的判读结果;
④PatterNode表示经过判断,架构图可以应用该模式;
22)所述寻找部分,定义模式重构规范来寻找重构点;重构规范由两个节点UsePrincipleNode和RefactorNode组成,其中:
⑤UsespecificationNode表示使用该模式需要遵循的使用规范;
⑥RefactorNode表示经过模式使用规范找到的重构点集合。
4.根据权利要求3所述的面向模式的软件架构重构方法,其特征在于,所述步骤3)用户根据重构需求从模式库中选择模式Patternchoose指导重构。
5.根据权利要求4所述的面向模式的软件架构重构方法,其特征在于,所述步骤4)对于架构图ArcGraph,应用Patternchoose指导重构,并作为软件重构的目标;具体如下,
a)对于架构图ArcGraph使用Patternchoose模式,利用Patternchoose模式的决策图判定是否可以应用该模式;
b)若可以应用该模式,则利用该模式的规范找到重构点集合RefactorPointset={RefactorPointi}i=0,1,…,n;n为重构点个数;重构点RefactorPointi={RectComiset,RectEdgeiset,RectTypei};重构点由三部分组成,RectEdgeset表示需要重构的边集合,RectComset表示需要重构的组件集合,RectTypei表示重构的类型,总共有AddDependEdge(增加组件依赖边),RemoveDependEdge(减少组件依赖边),CombineComp(组件合并),SplitComp(组件拆分),AddComp(添加组件)五种类型。
6.根据权利要求5所述的面向模式的软件架构重构方法,其特征在于,所述步骤5)遍历重构点集RefactorPointset,对于每个RefactorPointi,根据其RectTypei对RectComiset,RectEdgeiset执行相应的重构操作,并预测出重构后的架构图RefactArcGraph。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910254644.6A CN109976802B (zh) | 2019-03-31 | 2019-03-31 | 一种面向模式的软件架构重构方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910254644.6A CN109976802B (zh) | 2019-03-31 | 2019-03-31 | 一种面向模式的软件架构重构方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109976802A true CN109976802A (zh) | 2019-07-05 |
CN109976802B CN109976802B (zh) | 2022-08-12 |
Family
ID=67081973
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910254644.6A Active CN109976802B (zh) | 2019-03-31 | 2019-03-31 | 一种面向模式的软件架构重构方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109976802B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113806414A (zh) * | 2020-06-11 | 2021-12-17 | 中移(苏州)软件技术有限公司 | 一种架构重构方法、装置和计算机可读存储介质 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090300579A1 (en) * | 2008-06-03 | 2009-12-03 | Microsoft Corporation | Evolving the architecture of a software application |
CN101794226A (zh) * | 2010-03-08 | 2010-08-04 | 山东大学 | 一种适应多业务抽象层次的服务化软件构造方法和系统 |
CN101853159A (zh) * | 2010-05-20 | 2010-10-06 | 西北工业大学 | 一种对嵌入式软件架构进行重构的方法 |
US20120227029A1 (en) * | 2011-03-03 | 2012-09-06 | International Business Machines Corporation | Method for code transformation supporting temporal abstraction of parameters |
US20130125086A1 (en) * | 2011-11-13 | 2013-05-16 | International Business Machines Corporation | Software architecture by untangling undesired code level dependencies using code refactoring |
CN103853554A (zh) * | 2014-02-20 | 2014-06-11 | 上海大唐移动通信设备有限公司 | 一种软件重构位置确定方法及装置 |
CN104375827A (zh) * | 2014-10-14 | 2015-02-25 | 复旦大学 | 基于高层设计的交互式软件自动化重构方法 |
CN105893257A (zh) * | 2016-03-30 | 2016-08-24 | 东南大学 | 一种基于演化的软件架构评估方法 |
CN106484401A (zh) * | 2016-09-23 | 2017-03-08 | 东北大学 | 一种面向对象软件的自动化重构方法 |
CN107368303A (zh) * | 2017-06-28 | 2017-11-21 | 东南大学 | 一种基于软件架构的可演进性度量方法 |
CN108804078A (zh) * | 2018-04-20 | 2018-11-13 | 杭州电子科技大学 | 一种基于模板的软件设计模式重构方法 |
-
2019
- 2019-03-31 CN CN201910254644.6A patent/CN109976802B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090300579A1 (en) * | 2008-06-03 | 2009-12-03 | Microsoft Corporation | Evolving the architecture of a software application |
CN101794226A (zh) * | 2010-03-08 | 2010-08-04 | 山东大学 | 一种适应多业务抽象层次的服务化软件构造方法和系统 |
CN101853159A (zh) * | 2010-05-20 | 2010-10-06 | 西北工业大学 | 一种对嵌入式软件架构进行重构的方法 |
US20120227029A1 (en) * | 2011-03-03 | 2012-09-06 | International Business Machines Corporation | Method for code transformation supporting temporal abstraction of parameters |
US20130125086A1 (en) * | 2011-11-13 | 2013-05-16 | International Business Machines Corporation | Software architecture by untangling undesired code level dependencies using code refactoring |
CN103853554A (zh) * | 2014-02-20 | 2014-06-11 | 上海大唐移动通信设备有限公司 | 一种软件重构位置确定方法及装置 |
CN104375827A (zh) * | 2014-10-14 | 2015-02-25 | 复旦大学 | 基于高层设计的交互式软件自动化重构方法 |
CN105893257A (zh) * | 2016-03-30 | 2016-08-24 | 东南大学 | 一种基于演化的软件架构评估方法 |
CN106484401A (zh) * | 2016-09-23 | 2017-03-08 | 东北大学 | 一种面向对象软件的自动化重构方法 |
CN107368303A (zh) * | 2017-06-28 | 2017-11-21 | 东南大学 | 一种基于软件架构的可演进性度量方法 |
CN108804078A (zh) * | 2018-04-20 | 2018-11-13 | 杭州电子科技大学 | 一种基于模板的软件设计模式重构方法 |
Non-Patent Citations (6)
Title |
---|
ABDELKRIM AMIRAT等: "Refactor Software Architecture Using Graph Transformation Approach", 《SECOND INTERNATIONAL CONFERENCE ON THE INNOVATIVE COMPUTING TECHNOLOGY (INTECH 2012)》 * |
XIANGLONG KONG等: "Directory-Based Dependency Processing for Software Architecture Recovery", 《IEEE ACCESS》 * |
白玲: "敏捷开发下的重构技术", 《中小企业管理与科技(中旬刊)》 * |
符凯: "软件架构重构技术的研究与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
耿鹤: "软件架构可演进性度量及可视化", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
阮航等: "面向设计的开源软件项目重构经验研究", 《计算机科学与探索》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113806414A (zh) * | 2020-06-11 | 2021-12-17 | 中移(苏州)软件技术有限公司 | 一种架构重构方法、装置和计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109976802B (zh) | 2022-08-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Gijsbers et al. | Amlb: an automl benchmark | |
Ahmed et al. | GA-based multiple paths test data generator | |
CN104834479A (zh) | 面向云平台的自动优化存储系统配置的方法及系统 | |
Mai | Ten strategies towards successful calibration of environmental models | |
CN106294174B (zh) | 测试充分性的多维度度量方法及装置 | |
CN108363660B (zh) | 一种测试程序生成方法和装置 | |
Pavlič et al. | On comparison of net survival curves | |
Lenhard et al. | Measuring the portability of executable service-oriented processes | |
CN105843744B (zh) | 用于并行程序蜕变测试的蜕变关系优先级排序方法 | |
CN111782538B (zh) | 一种装备测试性论证分析与仿真评估系统 | |
Styles et al. | Automatically configuring algorithms for scaling performance | |
Shishmarev et al. | Visual search tree profiling | |
Dang et al. | A framework for generating informative benchmark instances | |
Jermakovics et al. | Exploring collaboration networks in open-source projects | |
CN109976802A (zh) | 一种面向模式的软件架构重构方法 | |
CN106295962A (zh) | 人员评价模型生成方法及装置 | |
CN110109811B (zh) | 一种面向gpu计算性能问题的溯源方法 | |
Elgendy et al. | A GA-based approach to automatic test data generation for ASP .NET web applications | |
Neubauer | Development and evaluation of management procedures in pāua quota management areas 5A, 5B and 5D | |
WO2019103773A1 (en) | Automatically identifying alternative functional capabilities of designed artifacts | |
Alrubaye et al. | How does API migration impact software quality and comprehension? an empirical study | |
CN109308262A (zh) | 一种软件缺陷定位方法以及装置 | |
Alagar et al. | Assessment of maintainability in object-oriented software | |
Hamed et al. | Performance Prediction of Web Based Application Architectures Case Study: .NET vs. Java EE | |
Vázquez-Veloso et al. | Evaluation and validation of forest models: Insight from Mediterranean and scots pine models in Spain |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |