实用软件工程概论----IT企业软件的开发与管理赵池龙第11章软件维护本章导读软件维护是软件交付之后的一项重要的日常工作,软件项目或产品的质量越高,其维护的工作量就越少。软件零维护是IT企业的追求目标,该目标至今仍没有实现。但是,随着软件开发技术、软件管理技术和软件支持工具的发展,软件维护中的许多观念正在发生变化,维护的工作量也在逐步下降。本章介绍这些变化,并说明IT企业的维护文档情况。要求具体内容了解1)软件维护定义的概念2)传统软件维护分哪几大类3)软件维护活动的一般工作流程4)结构化维护和非结构化维护5)软件的可维护性6)维护的副作用理解1)面向缺陷维护:程序级维护2)面向功能维护:设计级维护3)UML对软件维护的影响4)CMM对软件维护的影响5)软件维护文档和维护管理文档关注1)软件维护的最新方法2)软件维护与软件产品版本升级的关系11.1软件维护的传统方法1.软件维护定义:所谓软件维护,就是在软件产品安装、实施并交付给用户使用后,在新版本产品升级之前,这段时间里软件厂商向客户提供的服务工作,称为该软件产品的软件维护。2.软件维护分类:(1).纠错性维护。(2).适应性维护。(3).完善性维护。(4).预防性维护。序号维护的种类维护的内容1纠错性维护产品或项目中存在缺陷或错误,在测试和验收时未发现,到了使用过程中逐渐暴露出来,需要改正2适应性维护这类维护是为了产品或项目适应变化了的硬件、系统软件的运行环境,如系统升级3完善性维护这类维护是为了给软件系统增加一些新的功能,使产品或项目的功能更加完善与合理,又不致于对系统进行伤筋动骨的改造,这类维护占维护活动的大多数情况4预防性维护这类维护是为了提高产品或项目的可靠性和可维性,有利于系统的进一步改造或升级换代软件维护的传统方法3.软件维护过程软件维护的工作程序有哪些?软件的维护工作程序,与软件的开发工作程序相仿。这个工作程序是:维护的需求分析、维护的设计、修改程序代码、维护后的测试、维护后的试运行、维护后的正式运行、对维护过程的评审和审计。4.结构化维护和非结构化维护什么叫结构化维护?结构化维护的前题是:软件产品或软件项目必须有完善的文档,并且文档与程序代码互相匹配,两者完全一致。反之,只能叫非结构化维护。软件维护的传统方法5.软件的可维护性所谓软件的可维护性,就是维护人员理解、掌握和修改被维护软件的难易程度。可维护性的软件,它应具备下列四条性质:(1).可理解性。(2).可测试性。(3).可修改性。(4).可移植性。软件的可维护性序号名称可维护性内容1可理解性软件模块化、结构化,代码风格化,文档清晰化2可测试性文档规范化,代码注释化,测试回归化3可修改性模块间低耦合,高内聚,程序块的单入口和单出口,数据局部化,公用模块组件化4可移植性例如用ODBC、ADO来屏蔽对数据库管理系统的依赖,用三层结构来简化对客户浏览层的维护6.维护的副作用序号维护的方式副作用的表现1修改编码使编码更加混乱,程序结构更不清晰,可读性更差,而且有连锁反映2修改数据结构数据结构是系统的骨架,修改数据结构是对系统伤筋动骨的大手术,在数据冗余与数据不一致方面,可能顾此失彼3修改用户数据需要与用户协商,一旦有疏忽,可使系统发生意外4修改文档对非结构化维护不适应,对结构化维护要严防程序与文档的不配匹维护的副作用(1).四个副作用加在一起,很容易出现打补丁的现象,造成维护一次,就追加一个补丁,最后补丁越打越多,隐含的问题也会越来越多;(2).由于考虑不周,或对系统消化不透,可能在维护中出现连锁反映现象:东边的错误改了,西边的错误又冒出来了。7.为了减少维护的工作量,防止维护的副作用,人们在长期的实践中积累了如下的经验:(1).用CMMI体系来改善软件企业的软件过程管理;(2).在开发和维护中,尽量使用CASE工具;(3).维护完成之,一定要进行回归测试。11.2软件维护的最新方法1.软件维护的最新分类方法随着软件开发模型、软件开发方法、软件支持过程和软件管理过程四个方面技术的飞速发展,软件维护的方法也跟着发展。这种发展,首先表现在软件维护的分类上。目前,软件企业将自己的软件产品维护活动,基本上分为两大类:(1).面向缺陷维护:程序级维护;(2).面向功能维护:设计级维护。面向缺陷维护的条件:该产品能够正常运转,可以满足用户的功能、性能、接口需求。面向功能维护的条件:该产品在功能、性能、接口上存在某些不足,不能满足用户的某些需求。软件维护的最新方法2.软件维护的最新方法第一种方法:站在两层结构的角度上,来划分软件维护的方法。客户机/服务器的两层结构,目前和今后仍然是一种主要的应用软件结构。对于这种结构的应用软件维护方法,是将客户机和服务器上的两部分软件分开维护。客户机上的软件修改后,制作成自动安装的光盘,传递给用户自己安装,以替换原来的旧软件。服务器上的软件由维护人员直接在服务器上修改、测试、安装、运行。常见的ERP软件维护办法,就是一种这样的维护。软件维护的最新方法第二种方法:站在三层结构的角度上,来划分软件维护的方法。客户机/应用服务器/数据库服务器的三层结构,是一种最有发展潜力的应用软件结构。客户机上的软件维护,不需到用户现场去,只需在系统后台服务器上借助网络的运行,使得软件的安装与升级,变成了一个完全透明的过程,再不用担心光盘的安装或软盘的损伤。这就是三层结构的优点之一。这就是网络革命带来的软件维护革命,使用户能享受简单、方便、全面、及时的维护与升级服务。常见的杀病毒工具升级办法,就是一种这样的维护。软件维护的最新方法第三种方法:站在“三种开发方法”的角度上,即站在“面向过程开发、面向数据开发、面向对象开发”的角度上,来划分软件维护的方法。面向过程开发的方法对应面向过程维护的方法,就是前面介绍的结构化维护方法。面向数据开发的方法对应面向数据维护的方法,就是从数据库表的结构入手,运用视图技术、事务处理技术、分布式数据库技术、来维护数据库服务器上数据的完整性和一致牲。面向对象开发的方法对应面向对象维护的方法,就是利用对象“继承”的特性,来达到维护应用软件的目的。在三层结构中,大部分对象分布在应用服务器上。在数据库服务器上,只有数据对象。在客户浏览器上,只有网页对象。软件维护的最新方法第四种方法:站在“五个面向理论”角度,即站在“面向流程分析、面向数据设计、面向对象实现、面向功能测试、面向过程管理”的角度上,来划分软件维护的方法。也就是说,对需求分析的维护,要采取面向业务流程的方法。对设计的维护,要采取面向数据的方法。对实现的维护,要采取面向对象的方法。对测试的维护,要采取面向功能的方法。对管理的维护,要采取面向过程管理的方法。软件维护的最新方法3.软件维护与软件产品版本升级若小维护前的版本号为V1.00,则小维护后的版本号为V1.01。若大的维护前的版本号为V1.01,则大的维护后的版本号为V1.11。一般而言,版本号中小圆点的左一位,表示该软件产品的第几个版本。版本号中小圆点的右一位,表示该版本的大修改次数。版本号中小圆点的右二位,表示该版本的小修改次数。只有当该产品的运行环境发生大改变时(比如由两层结构变成三层结构、由WindowsNT变成Unix),或者该软件产品的功能变化超过30%时,其版本才能升级,此时,版本号中小圆点的左一位,才能加1,由V1.11变为V2.00。版本升级既是厂商产品功能增强、性能提高的手段,又是商业运作、开拓市场的重大手法。一个新版产品的推出,意味着一轮新的维护周期的开始。流程步骤软件维护流程内容1分类整理用户意见2提出维护申请3评审、审计、批准维护申请4修改需求文档5需求维护文档评审6修改设计文档7设计维护文档评审8修改源程序9回归测试10修改软件产品版本号11交付用户运行12收集反馈意见,准备新一轮维护,转向流程第1步软件维护的最新方法5.UML对软件维护的影响UML把软件生命周期定义为四个主要阶段:初始、细化、构造、移交。经过这四个阶段的历程被称为一个开发周期,自动产生一个周期内的所有文档,从而生成一个软件产品。首次经历这四个阶段称为该产品的初始开发周期,除非该产品的生命终止,否则它将重复初始、细化、构造、移交这四个阶段,从而演化为下一代产品,这就是旧产品的修理维护,这就是新产品的升级换代,这就是开发周期的演化,这就是UML对软件维护工作的影响。软件维护的最新方法6.CMM/CMMI对软件维护的影响软件为什么需要维护?因为它程序上有缺陷,所以有面向程序的缺陷维护;因为它设计上功能不齐全,所以有面向设计的功能维护。当软件组织达到CMM3/CMMI3以上时,由于软件过程的持续改善,对软件质量的评审和审计活动的加强,软件过程数据库作用的发挥,关于“程序上有缺陷”和“设计上功能不齐全”的情况,将会逐渐减少,所以软件的维护工作量也会逐渐减少。真正维护工作量大的单位,就是CMM1/CMMI1的软件组织,因为它们的管理无序,文档不全,工作不规范,表现形式就是:人治加个人英雄主义。11.3软件维护文档(1)11.3.1维护文档维护文档,就是对原来已有的分析文档、设计文档、实现文档、测试文档、用户指南进行修改,形成新的开发文档。(1).格式1:直接在原来已有的文档上面修改,修改后形成新的小版本号文档。(2).格式2:将修改的内容单独作为一个附录,放在被修改文档的最后面,形成一份新的小版本号文档。上述两种格式完成后,都要在文档版本更新记录上做维护记录。11.3软件维护文档(2)11.3.2维护管理文档(1).用户意见反馈表;(2).用户意见分类整理表;(3).维护申请单;(4).维护文档评审报告;(5).产品缺陷统计表;(6).功能扩充统计表;(7).未答复问题汇总表;(8).未验证问题汇总表;(9).已修改问题汇总表;(10).已验证问题汇总表;(11).维护费用统计表。思考题1111.1怎么理解“软件维护定义为一种向用户提供的服务”?11.2传统软件维护要讨论的问题有哪些?11.3传统软件维护分哪几大类?11.4软件维护的工作程序有哪些?11.5什么叫结构化维护和非结构化维护?11.6可维护性的软件,它应具备什么性质?11.7软件维护的副作用的表现有四个方面?11.8面向缺陷维护内容是什么?11.9面向功能维护的内容是什么?11.10两层结构和三层结构的软件维护方法有什么不同?11.11怎么理解UML对软件维护的重大影响?11.12怎么理解CMM/CMMI对软件维护的重大影响?