论文部分内容阅读
在整个软件生命周期内,大多数的软件系统都需要不断的修改以适应需求的变化,或者为了在不同的应用环境得到重用,必须恰当的改写其中的部分模块。通常这种操作需要非常大的成本消耗,在某种意义上说,通过大量强壮性检测和测试才得到合格程序,不得不针对软件系统的改变进行重新测试,这种活动会一直持续直到此软件生命周期结束。为了应付这种软件维护的相关问题,我们需要一个系统而安全的方法来修改这种运行时或遗留软件系统。重构是一种安全的重建技术,它可以使被重建程序保持重建前程序的行为不变。各种各样的重构技术已经被提出,有的可以对用UML类图表示的软件结构进行修改,有的是一些基于源代码的量化度量,或静态分析的自动化程序转换。其共同点是一种重构技术提供了一套基本重构操作,并允许这些基本重构以顺序或组合的方式形成更高级别的重构,这会涉及向个软件质量问题,例如,更高的模块化,表示程度的提高,更低的代码冗余等等。设计模式是类、对象、方法间的关系的重现模式的一个集合。每个设计模式描述了它自已的应用领域和基本原则。这样,这种基本原则和应用领域就可以作为高水平重构的一个方向。设计模式模式之所以被广泛使用,是因为它提供了设计级的重用性,可理解性和灵活性。尤其是这种灵活性在某种意义上说使软件的形式更广泛并且对需求变化的敏感度降低。本文要讨论的重建是要对一个已存在的面象对象程序自动化引入设计模式。通常的场景是这样的:一个已存在的程序随着新需求的出现将要被扩展,在研究了代码和新需求后,设计者得出结论,已存在的程序结构使想要的扩展很难完成,应该应用某种特定的设计模式来给程序带来必要的灵活性。正在这种情况下,我们决定要尝试提供自动化的程序支持。由设计者选择可应用设计模式和参与重建的程序组件,使用工具对选定的程序组件应用设计模式,同时保持程序的行为不变。本文的目标是使设计者摆脱烦杂而易出错的代码重组过程。在这篇论文里,将展示并论证了这样一种自动化设计模式转换的方法。本文的工作是建立在Opdyke的不变式和Robert的组合重构计算的基础上的,描述了组合重构的方式,并展示了一种计算组合重构的前置后置条件的技术。这种技术的重要性在于它作为一个组合重构去实现设计模式的重构,这是通过检查组合的合法性并计算它的整体的前置条件实现的。<WP=66>设计模式转换有很大程度的共性,文中列出了五种模式重构,这些重构已经被实现而且在设计模式的转化开发中有很广泛的应用性。本文设计并实现了一个原型设计模式转换工具,实现了在文中讨论的设计模式重构。本文实现的模版方法和策略两种模式重构为已有系统的设计和实现提供了继承和委托两种不同的复用方式。同时还实现了三种创建型模式的重构,其中工厂方法模式重构提供一种推迟对象的创建到子类的机制,从而实现了对产品使用逻辑的复用;建造模式重构使已有系统的产品生成过程与产品的内部表象实现了解藕,使得产品的内象表象可以独立的演化并且把产品内部组成的细节对用户隐藏,而当要产品的生成过程也需要演化时,可以进一步重构过渡到桥模式;单例模式重构为系统提供了一种产生唯一实例的机制,当系统需要全局访问点时可以应用这种重构。 在本文的讨论方向还有进一步的工作有待未来进行,首先在模式维护方面,应用模式转换改变了程序的代码,而一些变化是需要维护的以保持模式的不变,这意味着某种限制应该加到未来可能的程序演化。例如:具体模板中加入新方法,则要求询问是否要将此方法抽象到抽象模板中,加入这样的限制检查是对本文工作的一个扩展。本文主要是针对Java程序的设计模式的转换,这使本文的方法扩展到应用到其它语言会有一些问题,此外我们希望如果前置条件转化失败,程序可以自动改变以适应等转换的模式,这是未来的一个研究方向,如果能够实现则有望把此方法应用到更广泛的程序转换范围。