1、第七章第七章 软件维护软件维护任务任务1 1 响应用户需求的变化响应用户需求的变化软件维护的概念及分类软件维护的概念及分类软件维护的过程软件维护的过程再生工程再生工程2 2系统上线正式使用之后受到了图书管理员和广大系统上线正式使用之后受到了图书管理员和广大老师读者的欢迎,但随着时间的推移,大家在使老师读者的欢迎,但随着时间的推移,大家在使用过程发现一些问题。因此,图书管理员提出了用过程发现一些问题。因此,图书管理员提出了一个较为迫切的要求,为系统增加图书催还的功一个较为迫切的要求,为系统增加图书催还的功能;再有,图书管理员也委婉地提到了现有的系能;再有,图书管理员也委婉地提到了现有的系统的字符
2、型界面有些不太美观,希望能够日后升统的字符型界面有些不太美观,希望能够日后升级系统的时候考虑一下图形界面的形式。级系统的时候考虑一下图形界面的形式。3 3软件维护软件维护就是软件交付使用之后,在新版本产品升级之前就是软件交付使用之后,在新版本产品升级之前这段时间里,软件厂商向客户提供的服务工作。这段时间里,软件厂商向客户提供的服务工作。意义意义其宗旨就是提高客户对软件产品的满意度。其宗旨就是提高客户对软件产品的满意度。保持现有系统的价值。保持现有系统的价值。4 4软件维护的分类软件维护的分类改正性维护改正性维护产品或项目中存在缺陷或错误,在测试和验收时未发现,到产品或项目中存在缺陷或错误,在测
3、试和验收时未发现,到了使用过程中逐步暴露出来,需要改正。了使用过程中逐步暴露出来,需要改正。适应性维护适应性维护为了产品适应变化了的硬件、系统软件的运行环境,如系统为了产品适应变化了的硬件、系统软件的运行环境,如系统升级。升级。完善性维护完善性维护为了给系统增加新的功能,使产品或项目的功能更加完善和为了给系统增加新的功能,使产品或项目的功能更加完善和合理,又不至于对系统进行大的改造,这类活动占维护活动合理,又不至于对系统进行大的改造,这类活动占维护活动的大部分。的大部分。预防性维护预防性维护为了提高产品或项目的可靠性和可维护性,有利于系统的进为了提高产品或项目的可靠性和可维护性,有利于系统的进
4、一步改造或升级换代。一步改造或升级换代。软件维护的原则软件维护的原则尽可能少地发生改动尽可能少地发生改动低风险情况下进行改动低风险情况下进行改动必要的情况下才进行改动必要的情况下才进行改动维护活动流程维护活动流程001评价申请用户维护人员002判断维护类型006评价优先级003评价严重程度005安排改正性维护004开始问题分析007维护错误改正计划D2安排工作计划D1维护申请维护申请批准申请改正性维护适应性/完善性维护不严重严重高低安排维护交付的软件D3原系统资料软件维护的一般工作流程软件维护的一般工作流程1.1.分类整理用户意见分类整理用户意见2.2.提出维护申请提出维护申请3.3.评审、审
5、计、批准维护申请评审、审计、批准维护申请4.4.修改需求文档修改需求文档5.5.维护需求文档评审维护需求文档评审6.6.修改设计文档修改设计文档7.7.维护设计文档评审维护设计文档评审8.8.修改源程序修改源程序9.9.回归测试回归测试10.10.修改软件产品版本号修改软件产品版本号11.11.交付用户运行交付用户运行12.12.收集用户反馈意见,准备进行新一轮维护活动,转收集用户反馈意见,准备进行新一轮维护活动,转向流程第向流程第1 1个步骤个步骤由谁进行维护由谁进行维护独立的维护小组独立的维护小组原开发小组成员原开发小组成员影响维护的因素影响维护的因素系统规模系统规模软件规模越大,系统越复
6、杂,维护难度就越大软件规模越大,系统越复杂,维护难度就越大程序设计语言程序设计语言采用高级语言编写的程序比用低级语言编写的程序易于维护采用高级语言编写的程序比用低级语言编写的程序易于维护先进的软件开发技术先进的软件开发技术使用先进稳定的软件开发技术会提高软件的质量使用先进稳定的软件开发技术会提高软件的质量软件年限软件年限越是老的程序,早期的程序,其维护难度越大越是老的程序,早期的程序,其维护难度越大文档质量文档质量清晰、正确、完备的文档能降低维护的代价清晰、正确、完备的文档能降低维护的代价软件的应用领域软件的应用领域应用域商业模式的改变将导致软件需求发生巨大的变化应用域商业模式的改变将导致软件
7、需求发生巨大的变化软件结构软件结构如果在设计的时候没有考虑将来需要改动,程序之间相互如果在设计的时候没有考虑将来需要改动,程序之间相互交织,模块独立性差,将大大增加维护的难度交织,模块独立性差,将大大增加维护的难度编程习惯编程习惯按照编程规范编写的程序,可阅读性强,易于理解,这样按照编程规范编写的程序,可阅读性强,易于理解,这样的程序易于维护的程序易于维护人员的变动人员的变动如果是开发人员对自己的程序进行维护,则维护代价较小如果是开发人员对自己的程序进行维护,则维护代价较小;否则,由新手重新攻读程序则维护代价较高;否则,由新手重新攻读程序则维护代价较高维护的成本维护的成本维护的成本用维护的工作
8、量来衡量维护的成本用维护的工作量来衡量维护工作量包括生产性活动和非生产性活动维护工作量包括生产性活动和非生产性活动生产性活动如:分析和评价变动、设计修改、实现和测试修生产性活动如:分析和评价变动、设计修改、实现和测试修改改非生产性活动:理解代码功能、定义接口和设计约束非生产性活动:理解代码功能、定义接口和设计约束公式公式其中其中MM是维护的总工作量,是维护的总工作量,p p是生产性维护活动的工作量,是生产性维护活动的工作量,c c是由于设计和文档结构不合理产生的复杂度,是由于设计和文档结构不合理产生的复杂度,d d是维护小组是维护小组对软件的熟悉程度,对软件的熟悉程度,k k是一个经验常数是一
9、个经验常数dcKepM软件维护的策略软件维护的策略改正性维护改正性维护通过新的技术和开发策略,提高软件的可靠性通过新的技术和开发策略,提高软件的可靠性利用数据库管理系统、新的软件开发环境和较高级的编程语言开发软件,利用数据库管理系统、新的软件开发环境和较高级的编程语言开发软件,提高软件质量,减少开发中引进的错误提高软件质量,减少开发中引进的错误充分利用现成的软件包充分利用现成的软件包使用结构化编程技术,使程序易于理解和维护使用结构化编程技术,使程序易于理解和维护适应性维护适应性维护在配置管理时,把硬件、操作系统和其他相关因素的可能变在配置管理时,把硬件、操作系统和其他相关因素的可能变化考虑在内,以减少某些适应性维护化考虑在内,以减少某些适应性维护将与硬件、操作系统和其他外部设备相关的程序轨道特定的将与硬件、操作系统和其他外部设备相关的程序轨道特定的程序模块中程序模块中完善性维护完善性维护利用前两项维护策略利用前两项维护策略面向对象方法可以较好解决完善性维护面向对象方法可以较好解决完善性维护预防性维护预防性维护将自检能力引入程序将自检能力引入程序理解理解软件维护的分类软件维护的分类1717