软件再工程是指通过对目标系统的检查和改造,其中包括设计恢复(库存目录分析)、再文档、逆向工程、程序和数据重构以及正向工程等一系列活动,旨在将逆向工程、重构和正向工程组合起来,将现存系统重新构造为新的形式,以开发出质量更高、维护性更好的软件。
简述
软件再工程是
预防性维护所录用的主要技术,是为了以新形式重构已存在软件系统而实施的检测、分析、受替,以及随后构建新系统的工程活动。这个过程包括其他一些过程,诸如逆向工程、文档重构、结构重建、相关转换以及正向工程等。软件再工程的目的是理解已存在的软件(包括规范、设计、实脱),然后对该软件重新实现以期增强它的功能,提高它的性能,或降低它的实现难度,客观上达到维持软件的现有功能并为今后新功能的加入做好准备的目标。
软件再工程的对象是某些使用中的系统,这些系统常常称为遗留系统。遗留系统通常缺乏良好的设计结构和编码风格。因此,对该类软件的修改费时费力。同时,相关的公司或组织由于长久地依赖它们,不怨或不太可能将这蝼遗留系统完全抛弃。这样,软件再工程所面临的挑战就是对这些系统进行分析研究,利用好的软件开发方法,重新构造一个新的目标系统,这样的系统将保持坂系统所需要的功能,并使得新系统易于维护。简而言之,软件再工程就是将新技术和新工具应用于老的软件的一种较彻底的一种预防性维护。软件再工程还可以理解成“把今天的方法学用于昨天的系统以满足明天的需要”。
目标
一般来说,软件再工程的具体目标有以下4个方面。
(1)为追加、增强功能做准备。软件再工程通过对原系统用新的设计思想(如面向对象的思想)加以重新实现,对原有文档实现更新。使今后能方便地对系统进行功能的追加和增强。
(2)提高可维护性。经过不断维护日趋复杂的系统.经过软件的再工程和再设计,其模块划分会更合理,接口定义更清晰,文档更齐全,从而更易维护。
(3)软件的移植。软件再工程将一些优秀软件移植到新硬件平台、操作系统或语言环境中,从而使它们能够利用新环境的新特性,更好地发挥作用。
(4)提高可靠性。软件的维护修改容易引起“波动效应”,即修改一处,波及多方。这将导致系统的稳定性和可靠性逐渐降低,让人无法接受。软件的再工程可较好地解决这一问题。
过程
在Pressman建议的一个软件再工程过程模型中,它为软件再方程定义了6类活动:一般情况下,这些活动是顺序发生的,但每个活动都可能重复,形成一个循环的过程。这个过程可以在任意一个活动之后结束。以下从信息库分析开始,依次埘符类活动做简要说明。
信息库中保存了由软件公司维护的所有应用软件的基本信息.包括应用软件的设计、开发及维护方面的数据,例如最初构建时间、以往维护情况、访问的数据库、接口情况、文档数量与质量、对象与关系、代码复杂悱等。在确定对一个软件实施再工程之前。首先要收集上述这些数据,然后根据业务重要程度、寿命、当前可维护情况等对应软件进行分析。
文档重构是重新构建原本缺乏文档的应用系统的文梢。根据应用系统的重要性和复杂性。可以选择对文档全部重构或维持现状。
逆向工程是一个恢复原设计的过程。通过分析现存的程序,从抽取数据、体系结构和过程的设计信息。
代码重构是在保持系统完整的体系结构基础上,对应用系统中难于理解、测试和维护的模块重新进行编码,同时更新文档。
数据重构是重新构建系统的数据结构。数据重构是一个全范围的再工程活动,它会导致软件体系架构和代码的改变。
正向工程也称革新或改造,它根据现存软件的设计信息,改变或重构现存系统,以达到改善其整体质量的目的。
方法
大致有三种软件再工程实践实践方法。三种方法的主要区别在于它们产生的新系统对遗留系统的替换程度与步骤上。每一种方法都有其固有的风险和好处。具体如下:首先是”大爆炸”方法,这个方法将整个遗留系统用新系统一下子替换;其次是增量方法,这一方法是阶段性的推进方法,首先依原有系统的结构划分成若干模块,然后分阶段地逐一改造和组装;最后是演化方法,该方法类似于增量力法,不同之处是在演化方法中,改造的划分更多的是基于功能模块,而不是基于原有的结构,并通过对功能模块的逐一替换来达到改造和集成的目的。