论文部分内容阅读
软件产品的维护和再工程(Reengineering)活动是软件生命周期的重要环节,它们在软件生产中的地位日益重要:自上个世纪六十年代软件行业兴起至今,遗产系统(LegacySystem)的规模已经超过了上千亿行代码,这些软件系统有很多还服务于各行各业。同时每天又有新的软件不断产生,并且即将成为未来的遗产软件。如何让这些系统继续正常运转并且适应新的企业环境是软件维护和再工程必须解决的问题。然而目前的情况却是让人担忧的,软件维护和再工程费用已经远远超过软件生命周期中的其他环节。软件的维护和再工程问题已经成为软件行业关注的焦点。
程序理解(ProgramUnderstanding)是进行软件维护和再工程的首要步骤,它同时也是软件维护和再工程中消耗资源最多的工作,约占软件维护和再工程总费用的50%到90%[1]。因此,研究和开发自动和半自动化的程序理解支撑技术是降低软件总成本、减少软件开发人员工作量,从而从根本上解决软件维护和再工程问题的关键。
逆向工程(ReverseEngineering)技术作为程序理解依赖的重要手段和主要方法,自上个世纪八十年代初以来已经被学术界逐渐接受和重视,并且进行了较为广泛的研究。然而,作为现代面向对象程序设计技术中的重要微结构-设计模式[2](DesignPattern),是自上个世纪九十年代中期才被软件行业运用到实际开发和设计中的。相应的,逆向工程中对设计模式挖掘(恢复)技术(DesignPatternMiningorDiscovery)的研究开展的比较晚、比较少,同时由于设计模式本身具有多样性和复杂性的特点,使得遗产系统中设计模式的挖掘问题成为目前逆向工程研究中的难点之一。
本文是针对逆向工程中设计模式挖掘问题展开的。首先对再工程、逆向工程和设计模式概念进行了介绍,讨论了再工程的常用模型、逆向工程的难点、研究方法及其相关概念、设计模式的描述和分类等背景知识。介绍了目前具有代表性的一些设计模式挖掘技术,包括基于DPML和ASG的设计模式挖掘技术、MAISA系统的设计模式挖掘技术、PAT系统的设计模式挖掘技术等等,并且比较了它们各自的优缺点。在对它们分析和比较的基础上,论文提出了一个基于可扩展程序对象模型(ExtendedProgramObjectModel,简称EPOM)的设计模式挖掘方法:EPOM模型是我们用来描述C和C++源程序的抽象程序模型。该模型通过178类组成的层次结构刻画了C和C++程序设计语言的方方面面。EPOM模型是我们在进行逆向工程研究时,对程序进行静态分析的基础。通过访问EPOM模型以及在EPOM模型上构建的另外两个模型:基于对象、域和型的层次式程序模型(ObjectScopeTypeProgramModel,简称OSTPM)和可扩展程序参考模型(ExtendedProgramReferenceModel,简称EPRM)我们可以抽取出挖掘设计模式需要的重要信息:类之间的继承(inheritance)、关联(association)、聚合(aggregation)、合成(composition)关系以及类中虚函数的使用情况等等。在获得这些关键信息的基础上,我们给出了一个基于EPOM的设计模式挖掘算法。在文章的最后,作为对逆向工程研究中各种问题的思考,我们提出了一个逆向工程框架(GeneralReverseEngineeringFramework,简称GREF),试图将逆向工程中的静态错误检测、代码规范化、度量以及变更冲击问题放在一个通用的、开放的框架中去考虑,从而可以方便的集成各种不同的逆向工程技术和工具,同时避免了重复的研究和开发工作。对遗产系统进行设计模式的挖掘,其目的是为了提高软件维护和再工程活动的效率,减轻维护和开发人员的负担,从而在根本上解决软件维护和再工程活动成本高,效率低的问题。然而我们体会到,本文提出的基于EPOM设计模式挖掘技术和大多数研究机构提出的设计模式挖掘技术类似,也是一个半自动化的方法,无论是正确程度还是效率上还需要作进一步的改进和完善,目前只能作为简单的软件维护工作辅助手段。同时我们看到,逆向工程技术作为软件维护和再工程的主要支持技术,无论是在理论上还是在实践中都还处于一个不太成熟的阶段,设计模式挖掘技术更是逆向工程技术中一个非常年轻的领域,需要我们不断的努力和探索。