您好,欢迎访问三七文档
第十章软件维护软件工程课件第十章软件维护10.1软件维护的概念10.2软件维护的活动10.3程序修改的步骤及修改的副作用10.4面向对象软件的维护10.5软件可维护性10.6提高可维护性的方法10.7遗留系统的再工程10.1软件维护的概念在软件运行/维护阶段对软件产品进行的修改就是所谓的维护。维护的类型有三种:1)改正性维护2)适应性维护3)完善性维护此外,为提高软件产品的可维护性,还需要进行预防性维护。改正性维护在软件交付使用后,因开发时测试的不彻底、不完全,必然会有部分隐藏的错误遗留到运行阶段。这些隐藏下来的错误在某些特定的使用环境下就会暴露出来。为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程就叫做改正性维护。2.适应性维护在使用过程中,外部环境(新的硬、软件配置)数据环境(数据库、数据格式、数据输入/输出方式、数据存储介质)可能发生变化。为使软件适应这种变化,而去修改软件的过程就叫做适应性维护。3.完善性维护在软件的使用过程中,用户往往会对软件提出新的功能与性能要求。为了满足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。这种情况下进行的维护活动叫做完善性维护。4.预防性维护预防性维护是为了防止错误的功能;提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础。预防性维护定义为:采用先进的软件工程方法对需要维护的软件或软件中的某一部分(重新)进行设计、编制和测试。实践表明,在几种维护活动中,完善性维护所占的比重最大。即大部分维护工作是改变和加强软件,而不是纠错。完善性维护不一定是救火式的紧急维修,而可以是有计划、有预谋的一种再开发活动。事实证明,来自用户的要求扩充、加强软件功能、性能的维护活动约占整个维护工作的50%。因此,在整个软件维护阶段所花费的全部工作量中,完善性维护占了几乎一半的工作量。维护在软件生存期所占比例维护工作量70%开发工作量30%适应性维护25%改正性维护20%完善性维护50%三类维护占总维护比例影响维护工作量的因素在软件的维护过程中,需要花费大量的工作量,从而直接影响了软件维护的成本。应当考虑有哪些因素影响软件维护的工作量,相应应该采取什么维护策略,才能有效地维护软件并控制维护的成本。1)系统大小系统越大,理解掌握越困难。系统越大,执行功能越复杂。因而需要更多的维护工作量。2)系统年龄老系统由于不断修改,结构越来越乱;维护人员经常更换,程序变得越来越难于理解。许多老系统当初并未按照软件工程要求进行开发,因而没有文档,或文档太少。在长期的维护过程中文档在许多地方与程序实现变得不一致,在维护时会遇到很大困难。3)程序设计语言:使用强功能的程序设计语言可以控制程序的规模。语言功能越强,生成程序的模块化和结构化程度越高,所需指令数就越少,程序的可读性越好。4)数据库技术的应用:使用数据库,可以简单而有效地管理和存储用户程序中的数据。5)先进的软件开发技术:在软件开发时,若使用能使软件结构比较稳定的分析与设计技术,及程序设计技术,如面向对象技术、复用技术等,可减少大量的工作量。6)其它:应用的类型数学模型任务的难度开关与标记、IF嵌套深度、索引或下标数等对维护工作量都有影响。许多软件在开发时并未考虑将来的修改,为软件的维护带来许多问题。维护成本有形的软件维护成本是花费了多少钱,无形的维护成本有更大的影响。一些合理的修复或修改请求不能及时安排,使得客户不满意;变更的结果引入新的故障,使得软件整体质量下降;把软件人员抽调到维护工作中,干扰了软件开发工作。软件维护的代价是降低了生产率,在做老程序的维护时非常明显。例如,开发每一行源代码耗资25美元,维护每一行源代码需要耗资1000美元。维护工作量包括生产性活动(如分析和评价、设计修改和实现)和“轮转”活动(如力图理解代码在做什么、试图判明数据结构、接口特性、性能界限等)。维护工作量的模型dcKepMM是维护中消耗的总工作量p是上面描述的生产性工作量K是一个经验常数c是因缺乏好的设计和文档而导致复杂性的度量d是对软件熟悉程度的度量。模型指明,如果使用了不好的软件开发方法,原来参加开发的人员或小组不能参加维护,则工作量(及成本)将按指数级增加。10.2软件维护过程为了有效地进行软件维护,应事先就开始做组织工作。首先建立维护的机构;申明提出维护申请报告的过程及评价的过程;为每一个维护申请规定标准的处理步骤;建立维护活动的登记制度以及规定评价和评审的标准。1.维护机构除了较大的软件开发公司外,通常在软件维护工作方面,并不保持一个正式的组织机构。虽然不要求建立一个正式的维护机构,但是在开发部门确立一个非正式的维护机构则是非常必要的。修改负责人维护人员维护管理员系统监督员配置管理员维护申请软件维护组织维护申请提交给维护管理员,他把申请交给某个系统监督员去评价。一旦做出评价,由修改负责人确定如何进行修改。在修改程序的过程中,由配置管理员严格把关,控制修改的范围,对软件配置进行审计。在维护之前,就把责任明确下来,可以减少维护过程中的混乱。2.软件维护申请报告维护申请报告或称软件问题报告,由申请维护的用户填写。用户必须完整地说明产生错误的情况,包括输入数据、错误清单以及其它有关材料。如果申请的是适应性维护或完善性维护,用户必须提出一份修改说明书,列出所有希望的修改。维护申请报告将由维护管理员和系统监督员来研究处理。他们应相应地做出软件修改报告,指明:所需修改变动的性质;申请修改的优先级;为满足某个维护申请报告,所需的工作量;预计修改后的状况软件修改报告应提交修改负责人,经批准后才能开始进一步安排维护工作。软件工程243.维护过程模型此模型是一种软件维护的临时定制方法,是一种“救火式”的方法。一旦问题出现,尽可能迅速解决。应用此模型,不对长期效应(如对代码的副作用)进行分析就实施修改,即使有分析也不记入文档。这种模型是历史发展的结果,现在还在用。(1)快速修改模型软件工程25快速修改模型如果系统是一个人开发和维护的,他对系统有足够的理解,有能力在没有详细文档的情况下管理系统,有能力就如何实现变更做出本能的判断,维护工作能够快速、经济地完成。客户不愿意为修改一个错误,等待软件机构完成仔细和耗时的风险分析程序。发现问题改正错误(2)Boehm模型Boehm把维护过程表示为闭合环路。批准变更软件新版本结果变更建议管理层决策使用软件实现变更评估在此模型中,经济决策是很多过程背后的主要推动力量。维护管理人的任务是在追求维护目标和实施维护环境中的约束之间寻找平衡点。软件工程27(3)面向复用的模型面向复用的模型将维护看作是一组复用现有程序构件的活动。主要有4个步骤:标识可供复用的老系统部件;理解这些系统部件;修改这些系统部件,以适应新的需求;将修改后的系统部件集成到新系统中。对于完整的复用模型,起始点可以是生存周期的任意阶段,即需求、设计、编码和测试等,不像快速修改模型,起始点只是编码。需求分析设计源代码测试需求分析设计源代码测试构件库老系统新系统面向复用的Basili模型软件维护工作流程用户维护人员确定变更要求判别维护类型评价优先次序把安排好的维护工作量列入计划维护要求安排改正性维护把改正错误列入计划开始问题分析维护实施复审评价错误严重程度人员安排改正性不严重完善性适应性低高开始问题分析人员安排修改过的软件通过并交付使用的软件理解程序分析原设计安排计划修改程序测试程序尽管维护申请的类型不同,但都要进行同样的技术工作。修改软件需求说明修改软件设计设计评审对源程序做必要的修改单元测试集成测试(回归测试)系统测试软件配置评审等。在每次软件维护任务完成后进行情况评审,对以下问题做一总结:(1)在目前情况下,设计、编码、测试中的哪一方面可以改进?(2)哪些维护资源应该有但没有?(3)工作中主要的或次要的障碍是什么?(4)从维护申请的类型来看是否应当有预防性维护?情况评审对将来的维护工作如何进行会产生重要的影响。4.维护评价评价维护活动比较困难,因为缺乏可靠的数据。如果维护的档案记录做得比较好,可以得出一些维护绩效方面的度量值。每次程序运行时的平均出错次数;花费在每类维护上的总“人时”数;每个程序、每种语言、每种维护类型的程序平均修改次数;因为维护,增加或删除每个源程序语句所花费的平均“人时”数;用于每种语言的平均“人时”数;维护申请报告的平均处理时间;各类维护申请的百分比。据此可对开发技术、语言选择、维护工作计划、资源分配、以及其它许多方面做出判定。10.3程序修改的步骤及修改的副作用在软件维护时必然会对源程序进行修改。通常对源程序的修改不能无计划地仓促上阵,为了正确、有效地修改,需要经历以下三个步骤。分析和理解程序修改程序重新验证程序1.分析和理解程序经过分析,全面、准确、迅速地理解程序是决定维护成败和质量好坏的关键。在这方面,软件的可理解性和文档的质量非常重要。理解程序的功能和目标;掌握程序的结构信息,即从程序中细分出若干结构成分。如程序系统结构、控制结构、数据结构和输入/输出结构等;了解数据流信息,即涉及到的数据来源何处,在哪里被使用;了解控制流信息,即执行每条路径的结果;理解程序的操作(使用)要求;为了容易地理解程序,要求自顶向下地理解现有源程序的程序结构和数据结构,为此可采用如下几种方法:(1)分析程序结构图搜集所有存储该程序的文件,阅读这些文件,记下它们包含的过程名,建立包括这些过程名和文件名的清单;分析各个过程的源代码,建立一个直接调用矩阵D或调用树。若过程i调用过程j,则D[i][j]=1,否则D[i][j]=0。建立过程的间接调用矩阵I,即直接调用矩阵D的传递闭包I=D1∪D2∪D3∪…∪Dn其中,n是所包含的过程总数.分析各过程的接口,估计更改复杂性。(2)数据跟踪建立各层次程序级上的接口图,展示各模块或过程的调用方式和接口参数;利用数据流分析方法,对过程内部的一些变量进行跟踪。可获得有关数据在过程间如何传递,在过程内如何处理等信息。对于判断问题原因特别有用。在跟踪的过程中可在源程序中间插入自己的注释。(3)控制跟踪控制流跟踪可采用符号执行或实际动态跟踪的方法,了解数据如何从一个输入源到达输出点的。(4)充分阅读和使用源程序清单和文档,分析现有文档的合理性。(5)充分使用由编译程序或汇编程序提供的交叉引用表、符号表、以及其它有用的信息。(6)如有可能,积极参加开发工作。软件工程402.修改程序对程序的修改,必须事先做出计划,有预谋地、周密有效地实施修改。(1)设计程序的修改计划制定程序的修改计划要考虑人员和资源的安排。小的修改可以不需要详细的计划,而对于需要耗时数月的修改,就需要计划立案。在编写有关问题解决的方案时,必须充分描述修改作业的规格说明。包括:规格说明信息:数据修改、处理修改、作业控制语言修改、系统之间接口的修改等;维护资源:新程序版本、测试数据、所需软件、计算机时间等;人员;支持:纸面、计算机媒体等。通常,可采用自顶向下的方法,在理解程序的基础上,1)研究程序的各个模块、模块的接口、及数据库,从全局的观点,提出修改计划。2)依次把要修改的以及受修改影响的模块和数据结构分离出来。为此,要求识别受修改影响的数据;识别使用这些数据的程序模块;对于这些程序模块,按是产生数据、修改数据、还是删除数据进行分类;识别这些数据的外部控制信息;识别编辑和检查这些数据的地方;隔离要修改的部分;3)详细地分析要修改的、以及那些受变更影响的模块和数据结构的内部细节,设计修改计划,标明新逻辑及要改动的现有逻辑。4)向用户提供回避措施。用户的某些业务因软件中发生问题而中断,为不让系统长时间停止运行,需把
本文标题:第十章软件维护.
链接地址:https://www.777doc.com/doc-2091623 .html