论文部分内容阅读
模型是对现实世界的抽象。模型包含系统的主要元素而忽略那些与给定抽象层次不相关的次要元素,从而既能保证模型反映了系统的主要特性,而又不至于使模型过于复杂而难以理解和把握。因为软件模型具有比代码更高的抽象层次而且更贴近问题域,所以更有利于开发和维护人员的阅读与交流。软件模型已经成为软件开发与维护的核心制品。而模型驱动的体系结构(ModelDrivenArchitecture,MDA)进一步提升了软件模型的重要性。
模型的可扩展性、可维护性和可理解性在很大程度上决定了软件维护的成本与效率。模型是软件维护的核心制品,所以模型的可维护性对软件的维护成本有重大影响。此外,模型作为软件开发的核心制品,其可扩展性和可理解性也对迭代式软件开发的开发成本具有较大影响。在迭代式软件开发中,提升前期迭代产品(模型)的可扩展性将加速后期的迭代开发,从而缩短开发周期并降低开发费用。综上所述,模型是软件开发和维护中的核心制品,提高模型的可扩展性、可维护性和可理解性可以有效降低软件成本。而如何提高模型的可扩展性、可理解性和可维护性则是软件工程研究和开发人员所面临的一个难题。
模型重构是在不改变模型外部行为特性的前提下通过重新组织模型内部元素以提高模型质量,特别是可理解性、可扩展性和可维护性。模型重构已经被证明是一种提高模型质量的有效手段,并逐渐为人们所熟知和采纳。
虽然人们已经对模型重构的相关技术进行了研究和探讨,但是还存在许多尚待解决的问题。这些问题包括:缺乏合适的重构规则描述语言、缺乏合适的重构约束描述语言、缺乏形式的重构约束验证方法、缺乏有效的缺陷检测方法等等。
本文提出一种基于图转换的模型重构解决方案,具体工作包括:
(1)提出了一种基于图转换的模型重构规则描述语言(GraphTransformationbasedDescriptionLanguageofModelRefactoringRules,GraTDeLMoR2)。通过分析和总结模型重构描述的特性,本文在图转换描述语言的基础上设计了专用的模型重构规则描述语言。本文精心设计了描述语言的基本元素,提出利用基本元素描述模型重构及重构规则的方法,提出根据重构规则实施重构的方略和步骤。基于形式化的图转换描述语言为模型重构的自动化奠定基础,也便于复用现有的图转换工具以实现模型重构规则描述语言的支撑环境。此外,基于大家所熟悉的图转换描述语言也有利于用户的学习和使用。而本文针对模型重构的特性提出的基本元素则增强了语言的表达能力,使描述语言可以较方便地描述常见的模型重构及重构规则。
(2)模型重构约束的描述与验证。模型重构需要遵循一定的约束以保持模型的某些特性,这些约束的描述与验证是当前的研究热点之一。本文首先分析了现有的重构约束的特点,并提出了一种基于图转换的模型重构特性保持约束描述方法。本文还给出了静态地证明某个重构规则是否满足特性保持约束的方法。证明过程可以由计算机自动完成。本文还通过实例阐述了重构约束的描述与验证的全过程。
(3)模型的设计缺陷检测。在实施模型重构之前,必须在模型中搜寻需要重构的地方,也就是模型的设计缺陷(BadSmells)。首先,本文借助图模式匹配算法实现了设计缺陷检测的通用方法。通用检测方法可以大大减少为不同设计缺陷设计和实现专用检测算法的工作量。但是,因为图模式匹配算法是一个通用的算法,它没有针对特定的设计缺陷进行优化,所以图模式匹配算法的复杂度非常高。因此对于复杂的设计缺陷,有必要针对设计缺陷的特征设计更高效的专用检测算法。本文对UML模型中的一些复杂设计缺设计了专门的设计缺陷检测算法。这些算法比通用的模式匹配算法更为灵活高效。本文为重叠用况、重复事件流以及顺序图克隆片段等复杂设计缺陷设计了专用的高效检测方法。
(4)重构的执行与调度。本文探讨了重构之间的冲突关系对重构效果的影响,以及如何通过重构的调度来减小这种影响。基于以上分析,本文提出了一种重构调度方法以求最大限度地利用现有的重构提升模型的设计质量。本文首先提出提出了一种检测模型重构之间的冲突矩阵的算法。基于此,本文提出了一个多目标的重构调度模型。最后,本文还提出一种启发式算法用于求解调度模型。实验验证的结果表明本文提出的调度算法可以有效提高重构活动的整体效果。