软件维护的定义
软件维护是指软件系统交付使用以后,为了改正错误或满足新的需要而修改软件的过程。
两种错误认识
- 软件维护是一次新的开发活动
- 新开发活动强调要在一定的约束条件下从头开始实施。
- 软件维护就是改错
软件维护强调必须在现有系统的限定和约束条件下实施。
软件维护分类
- 纠错性维护:为了改正软件系统中的错误,使软件能够满足预期的正常运行状态的要求而进行的维护
- 适应性维护:为了使软件适应内部或外部环境变化,而去修改软件的过程
- 改善性维护:满足使用过程中用户提出增加新功能或修改已有功能的建议维护
实践表明,改善型维护所占的比重最大,来自用户要求扩充、加强软件功能、性能的维护活动约占整个维护工作的50%。
- 预防性维护:为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础而修改软件的活动
结构化维护:
采用软件工程的方法进行软件开发,保证每个阶段都有完整且详细的文档。
非结构化维护:
如果不采用软件工程方法开发软件,软件只有程序而欠缺文档,则维护工作将变得十分困难。
软件维护困难的原因
- 理解别人的代码通常是非常困难的,而且难度随着软件配置成分的缺失而迅速增加。
- 需要维护的软件往往没有文档、或文档资料严重不足、或软件的变化未在相应的文档中反映出来。
- 当软件要求维护时,不能指望由原来的开发人员来完成或提供软件的解释。由于维护持续时间很长,因此当需要解释软件时候,往往开发人员已经不在附近了。
- 绝大多数软件在设计时没有考虑到将来的修改问题。
- 软件维护这项工作毫无吸引力。一方面是因为软件维护,看不到什么“成果”,但工作量很大,更重要的是维护工作难度大,软件维护人员经常遭受挫折。
软件的可维护性
指理解、改正、调整和改进软件的难易程度。对软件可维护性影响的主要因素有:可理解性(understandability)、可测试性(testability)、可修改性、modifiability)和可移植性(portability)
-
可理解性:指理解软件的结构、接口、功能和内部过程的难易程度。
提高软件可理解性的措施有:采用模块化的程序结构;书写详细正确的文档;采用结构化程序设计;书写源程序的内部文档;使用良好的编程语言;具有良好的程序设计风格等 -
可测试性:指测试和诊断软件(主要指程序)中错误的难易程度。
提高软件可测试性的措施有:采用良好的程序结构;书写详细正确的文档;使用测试工具和调试工具;保存以前的测试过程和测试用例等 -
可修改性:指修改软件(主要指程序)的难易程度。
在修改软件时经常会发生这样的情况:修改了程序中某个错误的同时又产生新的错误(由程序的修改引起的);或者在程序中增加了某个功能后,导致原先的某些功能不能正常执行。 -
可移植性:指程序转移到一个新的计算环境的难易程度。
影响软件可移植性的因素有:信息隐蔽原则;模块独立;模块化;高内聚低耦合;良好的程序结构;不用标准文本以外的语句等。
一个可移植的程序应具有结构良好、灵活、不依赖于某一具体计算机或操作系统的性能
提高可维护性的方法
通常采用的方法有
- 确定质量管理目标和优先级
- 规范化程序设计风格
- 选择可维护性高的程序设计语言
- 改进程序文档
- 保证软件质量审查方法