1、1,第9章 软件进化,软件进化过程 软件维护 软件维护的相关概念 软件再工程 遗留系统管理,2,软件的开发不会因为系统的交付而停止,它贯穿系统的整个生命周期。 修改运行中发现的错误 适应新的运行平台 随着业务流程的变化需要增加功能 提升性能或其他非功能特性所有这些都意味着软件需要不断进化以满足变更的需求。,3,开始,版本1,版本2,开发和进化衔接的螺旋模型,版本3,描述,运行,实现,有效性验证,软件工程是一个贯穿于系统生命周期的由需求、设计、实现、测试、运行组成的螺旋过程。 螺旋过程经常是不连续的,软件开发团队和进化的团队往往不是一个团队。,4,9.1 进化过程,变更影响分析,版本规划,变更实
2、现,系统发布,软件进化过程(变更请求驱动),变更请求,需求分析,需求更新,软件开发,提议的变更,变更实现,分析源代码,修改源代码,提交修改的系统,紧急变更请求,紧急修补过程(会造成代码与文档的不一致),5,9.2 软件维护,软件交付使用后变更软件的过程称为软件维护。 一般的软件维护不包括重大的体系结构的改变,变更的实现方法一般是修改已有的系统组件以及在必要的地方添加新组件到系统中。,6,软件维护的分类 改正性维护:修改软件缺陷。 适应性维护:适应变更的操作环境(硬件、操作系统平台、其他支持软件)。 增强性维护:因系统需求改变(机构因素或业务改变)添加或修改功能。,7,维护的成本维护成本和开发成
3、本的比例在不同的应用域中是不同的。Guimaraes(1983)的研究表明,对于业务应用系统,维护成本和系统开发成本大体相等。对于嵌入式实时系统,维护费用是开发成本的四倍以上。带来高维护费用的因素: 团队的不稳定 合同责任,维护合同独立与开发合同 维护人员技术水平 系统结构随着年龄衰退,8,如何降低软件维护的费用?(1)从开发阶段的一开始就按质量标准构建系统,给予“可维护性”属性以足够的重视,这样可以使系统的整个生命周期成本减少。下图说明了这个问题。系统1在开发成本中多投入$25000,用于提高系统的可维护性,结果在整个生命周期中节省了$100 000的维护成本。,9,(2)采用演化式的系统开
4、发模型(如增量、螺旋),建立能结合新需求而演化和变更的系统。(3)实施软件再工程,改善系统结构,提高可维护性。,10,软件再工程是试图增加遗留系统(当前运行的系统)的总体质量、提高可维护性的工程。 软件可维护性定义为:维护人员理解、改正、改动和改进这个软件的难易程度。 软件再工程与新开发软件之间的重要差别表现在开发的起点上。再工程开始于已有的系统,通过改善原始系统的结构和产生新的系统文档,使之更容易理解、更易于维护。,软件再工程,11,实施软件再工程的优越性是: 减少重新开发软件的风险 降低开发软件的成本再工程的成本比重新开发要小的多。Ulrich(1990)引用了一个商业系统的例子:重新实现
5、预算5000万美元,经过再工程,仅用了1200万美元,是重新开发费用的四分之一。因此当一个系统有很高的业务价值同时需要很高的维护费用时,对该系统实施再工程是个经济的办法。,12,源代码转换,逆向工程,程序结构改善,程序模块化,数据再工程,最初的程序,程序文档,模块化程序,最初的数据,结构化程序,经过再工程的数据,软件再工程过程(教材P158),不易维护的程序,已改进和重新构造的程序,13,源代码转换:使用工具将语言转换成相同语言新版本或另一种语言。 逆向工程:从源代码中抽取出系统的说明和设计等信息,把这种信息求精与简化并存储起来以被后用。 程序结构改善:对控制结构进行分析和修改,提高可读性。
6、程序模块化:可能涉及到体系结构的重构。 数据再工程:对数据及其结构进行分析和重组,或者将分散的单个文件中的数据转移到数据库管理系统上,还可能改变数据库模式。,14,软件再工程的成本依赖于所做的工作的程度。见下图:,自动源代码转换 自动结构重构+手工改变 结构重构+体系结构改变,增长的成本,自动的程序结构重构 程序和数据结构重构,15,软件再工程的问题: 系统经过再工程能改善的范围受到一定的限制。 需要自动工具的支持。 对于实时系统,由于频繁的性能优化,实现与设计之间的对应关系比较松散,逆向工程不易抽取设计信息。,16,9.3 遗留系统的管理,遗留系统是仍然提供必要的业务服务的旧系统。更换一个遗
7、留系统是一个有风险的策略: 遗留系统几乎没有完整的描述。 业务过程和遗留系统的操作方式紧密的交织在一起。 重要的业务规则(业务功能的约束)隐藏在软件内部。 系统的结构衰退,理解系统的难度加大。,17,大多数机构拥有很多遗留系统,对这些系统维护和更新资金有限,应该对这些系统评估以做出选择:1. 彻底抛弃,业务过程改变,不再依赖。2. 继续维护,系统运行平稳,仍有存在的必要。3. 对系统再工程,不断地变更使系统质量下降,但仍需要变更。4.由新的软件替代整个或部分。,18,遗留系统的评估与选择: 低质量、低业务价值: 抛弃 低质量、高业务价值: 转换或替代 高质量、低业务价值: 不转换 高质量、高业务价值: 正常的系统维护,19,为了评估一个系统的业务价值,应讨论以下方面的问题:1. 使用系统的频率2. 支持的业务流程的变化3. 系统的可靠性4. 系统输出结果的使用率5. 系统运行环境的稳定性,