论文部分内容阅读
软件重构是以改善程序结构为目的的保留程序行为的程序转换。软件重构的研究和应用对进化式软件开发、软件维护和软件复用有重要意义。对编程人员来说,软件重构方法是编写良好风格、利于复用和扩展的程序的指导性原则,同时,合理应用重构方法,可以减轻编码和调试的负担,提高软件生产率。软件重构方法的研究成果,在增强软件开发环境方面有广泛的应用前景。在总结、借鉴相关工作结果基础上,本文以丰富软件重构方法,利于软件维护和软件复用为目的,主要在如下方面开展对软件重构方法的研究:(1)在丰富语言机制相关的重构方法方面,针对Java语言的接口机制,提出一组基本重构方法。利用它们以及其它已有的重构方法,可以组合成复合重构方法;(2)从发展语言机制角度,分析了Java语言接口相关的横切关注的表现,提出了一种探查接口相关的横切关注方法,探查的结果可以用在AspectJ程序的重构方法中;(3)在利用程序语言新机制进行软件重构方面,针对AspectJ语言,提出一种利用Aspect机制对接口相关的横切关注进行封装的方法,并总结了Aspect自身重构的一些问题;(4)在丰富典型设计方法方面,总结了聚合关系和关联关系的典型设计和实现方法,这些典型的设计可作为软件重构的目标;(5)在丰富程序结构理解方法方面,提出了一种逆向抽取可控粒度的对象状态模型的方法。本文的主要研究结果和贡献如下:阐明了软件重构研究现状在全面总结软件重构方法十多年来的研究结果基础上,从程序结构理解、软件重构方法对程序语言新机制的支持、典型的重构目标等方面,指出了这个领域存在<WP=96>的主要问题。提出了Java语言接口机制相关的重构方法已有一些软件重构方法和自动化工具,主要建立在Opdyke针对C++语言提出的一组基本重构方法基础上,但这组基本方法中不包括对接口的支持。然而,接口是面向对象方法中的重要概念。在Java程序中,能否合理利用接口机制是影响程序结构的重要因素之一。在总结与接口相关的程序结构不良表现的基础上,遵循Java语言规范,提出了一组Java语言接口机制相关的基本重构方法,并介绍了它们可能应用的场合。由于每个基本重构方法是保留程序行为的,从而利用它们进行组合所形成的重构方法,也是保留程序行为的。并且,由于利用Java接口可以解决多数多重继承问题,这组基本重构方法也把已有的基本重构方法扩展到多继承体系中。3.提出了接口机制相关的横切关注点探查方法在总结抽象级关注在实现中的横切表现基础上,从发展语言机制的角度,重点分析了Java语言中与接口机制相关的横切关注现象。提出了一种利用接口探查Java程序中的横切关注点的方法。与已有的基于字符匹配、基于领域知识的探查方法相比,这种从分析语言机制入手的探查方法更利于自动化实现,并可以和已有方法结合使用,加强了探测结果的合理性。由于AspectJ是把Java语言作为基本语言的扩充语言,所以,利用这种方法探测出的结果,经过人工分析后,可以利用AspectJ中的Aspect机制,有选择地对它们进行重新封装,从而,可以应用于对AspectJ基本程序的重构中。4.提出了接口机制相关的横切关注点封装方法,探讨了AspectJ程序重构问题目前,多数软件重构方法针对面向对象范型的程序,对近几年出现的面向方面范型的程序,研究重构方法的工作不多见。在深入研究AspectJ中Aspect机制的基础上,提出了利用Aspect机制对接口相关的横切关注进行封装的方法,重点讨论了这种封装方法适用的场合。讨论了Aspect机制自身重构的问题。5.总结了类模型中聚合关系、关联关系的典型设计和实现方法总结了面向对象方法中,类之间的聚合关系和关联关系的典型设计方法和实现方法。针对每一种关系,讨论了不同设计和实现方法的优缺点。由于类之间的关系的实现是领域无关的,同一种关系的不同实现,不影响程序的可观察行为。所以,这些设计与实现方法,一方面可以为软件设计人员和程序员提供设计方法的参考,另一方面,也可以作为软件重构的目标。6.提出了一种逆向抽取对象状态模型的方法 <WP=97>从逆向工程角度,把对象状态定义为对象接收到各种消息后所产生的行为的分类。以此为依据,利用程序的静态分析技术,定义了一种反映程序流程的数据结构—状况树;利用程序的动态分析技术,定义了反映对象行为的数据结构—具体状况树。在通过测试用例为对象发送消息的过程中,形成反映对象不同行为的具体状况树,通过对这些具体状况树的比较,完成对象状态的逆向抽取。该方法利用程序跟踪技术记录的消息发送,作为对象状态转换条件。讨论了确定性等问题。与已有工作相比,这种方法产生的状态模型,在粒度上容易控制。总之,本文提出的语言机制相关的软件重构方法,丰富了已有研究成果。由于Java语言接口机制和AspectJ语言中的Aspect机制是先进的语言机制,所以,合理地利用它们对遗留程序进行重构,可以更好地改善程序结构,对软件维护和软件复用有一定意义。