软件维护基本概念
- 软件维护:软件交付使用后,为了修改软件运行的错误,或者按照新需求添加新功能的过程。
前言:软件维护工作处于软件生命期的最后阶段,维护阶段是软件生存期中最长的一个阶段,所花费的人力、物力最多,其花费约为整个软件生命期花费的60%-70%。因为计算机程序总是发生变化的,对隐含错误的修改、新功能的加入、环境变化造成的程序变动等,因此应该充分认识到维护工作的重要性和迫切性,提高软件的可维护性,减少维护的工作量和费用,延长已经开发软件的生命期,以发挥其应有的效益。
软件维护的目的
-
在运行阶段发现软件测试过程中未发现的错误
-
添加新增加的功能,提高软件的性能
-
适应新的运行环境,或适应已变动的数据或文件
-
扩充软件的运行范围
软件维护的类型:
- 完善性维护:满足用户新需求,对原来的软件功能进行修改或扩充。
- 纠错性维护:使软件适应外部新的硬件和软件环境或数据环境。
- 预防性维护:纠正修改测试阶段未发现的错误。
- 适应性维护:为了提高软件的可维护性和可靠性,采用先进的软件工程方法对需要维护的软件或软件中的某一部分重新进行设计、编制和测试,为以后进一步维护和运行打好基础。
软件维护的特性:
-
非结构化维护
- 是指只有源程序,缺乏必要文档说明,对于确定数据结构、系统接口等特性
-
结构化维护
- 指软件开发过程按照软件工程方法进行,开发各个阶段文档齐全,软件的维护过程,有一整套完整的方案、技术以及评审过程
-
维护的副作用,指由于修改程序而导致新的错误或者新增加一些不必要的活动。(代码、数据、文档);
-
软件维护的困难,主要是由软件需求分析和开发方法的缺陷造成的
- 读懂别人的编码很困难
- 文档不一致性
- 软件开发人员和软件维护人员在时间上的差异
软件维护过程:
- 建立一个维护的组织;
- 建立维护活动的登记、申请制度,
- 对维护方案的审批制度;
- 规定复审的评价标准。
软件维护技术:
- 面向维护的技术
- 涉及软件开发的所有阶段
- 维护支援技术;
- 支持软件维护阶段的技术
- 维护档案记录;
- 为维护评价提供有效数据
- 维护工作评价。
- 确定维护的质量和成本
提高可维护性方法:
建立明确的软件质量目标;
使用先进的开发技术和工具;
建立明确的质量保证工作;
原则可维护的程序设计语言;
改进程序的文档。
软件的可维护性
软件可维护性:指软件能够被理解,并能纠正软件系统出现的错误和缺陷,以及满足新的要求进行修改、扩充或压缩的容易程度。
软件质量的7个特性:
可理解性:表明人们通过阅读源代码和相关文档,了解软件功能和运行状况的容易程度。
可靠性:表明一个软件按照用户的要求和设计目标,在给定的一段时间内正确执行的概率。
可测试性:用来论证软件正确性的容易程度。
可修改性:表明软件容易修改的程度。
可移植性:表明一个软件能执行预定功能而又不浪费机器资源的程度。
效率:表明一个软件能执行预定功能而又不浪费机器资源的程度。
可使用性:从用户的角度出发,指软件方便、实用及易于使用的程度。
提高可维护性的方法
- 建立明确的软件质量目标
- 使用先进的软件开发技术和工具
- 建立明确的质量保证工具
- 选择可维护的程序设计语言
- 改进程序的文档
软件再工程技术
软件再工程:对旧的软件进行重新处理、调整,提高软件的可维护性。
原因:随着维护次数增加,可能会造成软件结构的混乱,使软件可维护性降低,束缚了新软件的开发,对于关键业务又不可能废弃或者重新开发,因此采用软件再工程技术,对旧有的软件进行重新处理、调整,提高其可维护性
意义:不仅能够从已有程序中重新获取到设计信息,而且可用这些信息重构系统,以改善综合质量。
逆向工程
逆向工程:是一个设计恢复的过程,从现有系统的源代码中抽取数据结构、体系结构和程序设计信息,力图在比源代码程序更抽象层次上建立程序的表示过程。
- 过程
- 输入无结构的源代码–重构
- 结构化源代码–抽取(过程、界面、数据)
- 初始规格–简化和求精
- 输出最终规格
- 过程处理抽取
- 使用逆向工程工具在不同层次(语句段、模块、子系统、系统)抽取数据结构、体系结构和程序设计信息
- 界面抽取
- 当准备对旧的软甲进行用户界面的逆向工程时,必须先理解旧软件的用户界面,并且刻画出界面的结构与行为
- 数据抽取
- 抽取程序内不同类型的数据结构
软件再工程过程
- 对象选择–再工程对象
- 逆向工程–逐步抽象建立系统设计模型
- 文档重构–使用则建立原则
- 代码重构–生成可提供功能相同而质量更高的程序,分析程序,标注重构代码部分,复审和测试重构代码
- 数据重构-- 发生在较低的抽象层次上,是一种全局的再工程活动,对程序内数据结构重新设计
- 正向工程–利用现有程序恢复的设计信息来修改或者重构系统
软件重构:对源代码和数据进行修改,使其易于修改维护,以适应将来的变更。
软件重构意义:提高软件质量和生产率,减少维护工作量,提高软件可维护性。
再工程风险
再工程风险:
-
过程风险–对再工程活动中,缺乏投入人员管理以及方案实施管理,未做成本效益分析
-
应用领域风险–对再工程项目业务不熟悉,缺少专业领域专家支持
-
技术风险–缺乏再工程技术支持,恢复设计得到无用信息
-
人员风险
-
工具风险