您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 软件工程教案--第八章 维护XXXX
1软件工程第八章维护2第八章维护8.1软件维护的定义8.2软件维护的特点8.3软件维护过程8.4软件的可维护性(自学)8.5提高可维护性的方法(补充自学)8.6预防性维护(自学)8.7软件再工程过程(自学)38.1软件维护的定义在软件产品被开发出来并交付用户使用之后,就进入了软件的运行维护阶段:这个阶段是软件生命周期的最后一个阶段,其基本任务是保证软件在一个相当长的时期能够正常运行。软件维护需要的工作量非常大,平均说来,大型软件的维护成本高达开发的4倍左右。目前国外许多软件开发组织把60%以上的人力用于维护已有的软件,而且随着软件产品数量增多和使用寿命延长,这个百分比还在持续上升。软件工程的主要目标就是提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本。41.软件维护的定义:在软件运行/维护阶段对软件产品进行的修改就是所谓的维护。2.改正性维护:在软件交付使用后,因开发时测试的不彻底、不完全,必然会有部分隐藏的错误遗留到运行阶段。这些隐藏下来的错误在某些特定的使用环境下就会暴露出来。•为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程就叫做改正性维护。3.适应性维护:在使用过程中,外部环境(新的硬、软件配置)和数据环境(数据库、数据格式、数据输入/输出方式、数据存储介质)可能发生变化。为使软件适应这种变化,而去修改软件的过程。8.1软件维护的定义54.完善性维护:软件的使用过程中,用户往往会对软件提出新的功能与性能要求。进而需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性的维护活动•实践表明,完善性维护所占的比重最大。即大部分维护工作是改变和加强软件,而不是纠错。完善性维护占了几乎一半的工作量。•完善性维护不一定是救火式的紧急维修,而可以是有计划、有预谋的一种再开发活动。•事实证明,来自用户要求扩充、加强软件功能、性能的维护活动约占整个维护工作的50%。5.预防性维护:采用先进的软件工程方法对需要维护的软件或软件中的某一部分(重新)进行设计、编制和测试。是为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础。8.1软件维护的定义6•软件维护活动所花费的工作占整个生存期工作量的70%以上,这是由于在漫长的软件运行过程中需要不断对软件进行修改,以改正新发现的错误、适应新的环境和用户新的要求,这些修改需要花费很多精力和时间,而且有时会引入新的错误。8.1软件维护的定义71.影响维护工作量的因素•在软件的维护过程中,需要花费大量的工作量,从而直接影响了软件维护的成本。•系统大小:系统越大,理解掌握起来越困难,所执行功能越复杂。因而需要更多的维护工作量。•程序设计语言:语言的功能越强,程序的模块化和结构化程度越高,程序的可读性越好。•系统年龄:•数据库技术的应用程度•先进的软件开发技术•其它:应用的类型、数学模型、任务的难度、开关与标记、IF嵌套深度、索引或下标数等对维护工作量都有影响。8.2软件维护的特点82.结构化维护与非结构化维护差别巨大非结构化维护的代价很高(浪费精力并且遭受挫折),这种维护方式是没有使用软件工程方法学出来的软件的必然结果。以完整的软件配置为基础的结构化维护,是在软件开发过程中应用软件过程方法学的结果。虽然有了软件的完整配置并不能保证维护时没有问题,但是确实能减少精力的浪费并且可以提高维护的总体质量在过去的几十年中,软件维护的费用稳步上升。1970年用于维护已有软件的费用只占软件总预算的35%~40%,1980年上升为40%~60%,1990年上升为70%~80%。8.2软件维护的特点93、维护成本(维护的代价高昂)•有形的软件维护成本是花费了多少钱,无形的维护成本有更大的影响。不能及时安排,使得客户不满意;变更的结果引入新的故障,使软件整体质量下降把软件人员抽调到维护工作中,干扰了软件开发•软件维护的代价是降低了生产率,在做老程序的维护时非常明显。•例如,开发每一行源代码耗资25美元,维护每一行源代码需要耗资1000美元。•维护工作量包括生产性活动(如分析和评价、设计修改和实现)和“轮转”活动(如力图理解代码在做什么、试图判明数据结构、接口特性、性能界限等)。8.2软件维护的特点10维护工作量的模型•M是维护中消耗的总工作量•p是上面描述的生产性工作量•K是一个经验常数•c是因缺乏好的设计和文档而导致复杂性的度量•d是对软件熟悉程度的度量。•模型指明,如果使用了不好的软件开发方法(未按软件工程要求做),原来参加开发的人员或小组不能参加维护,则工作量(及成本)将按指数级增加。dcKepM8.2软件维护的特点114.维护的问题很多与软件维护有关的绝大部分问题,都可归因于软件开发的方法有缺点。在软件生命周期的头两个时期没有严格而又科学的管理和规划,几乎必然会导致在最后阶段出现问题。和软件维护有关的部分问题:理解别人写的程序通常非常困难,而且困难程度随着配置成分的减少而迅速增加。如果仅有程序代码没有文档,则会出现严重的问题需要维护的软件往往没有合格的文档,或者文档资料显著不足。认识到软件必须有文档仅仅是第一步,容易理解的并且和程序代码完全一致的文档才真正有价值。8.2软件维护的特点12当要求对软件进行维护时,不能指望由开发人员给我们仔细说明软件。由于维护阶段持续的时间很长,因此,当需要理解软件时,往往原来写程序的人已经不在附近了。绝大多数软件在设计时没有考虑将来的修改。除非是强调模块独立原理的设计方法学,否则修改软件既困难又容易发生差错。软件维护不是一项吸引人的工作。形成这种观念很发程度上是因为维护工作经常遭受挫折。上述种种问题在现有的没采用软件过程思想开发出来的软件中,都或多或少地存在着。8.2软件维护的特点13•维护过程本质上是修改和压缩了的软件定义和开发过程•为了有效地进行软件维护,应事先就开始做组织工作。首先建立维护的机构申明提出维护申请报告的过程及评价的过程为每一个维护申请规定标准的处理步骤建立维护活动登记制度及规定评价和评审的标准1、维护组织•除了较大的软件开发公司外,通常在软件维护工作方面,并不保持一个正式的组织机构。•虽然不要求建立一个正式的维护机构,但是在开发部门确立一个非正式的维护机构则是非常必要的。•维护申请提交给维护管理员,他把申请交给某个系统监督员去评价。•一旦做出评价,由修改负责人确定如何进行修改。8.3软件维护过程14软件维护的机构8.3软件维护过程15软件维护的机构8.3软件维护过程16•在修改程序的过程中,由配置管理员严格把关,控制修改的范围,对软件配置进行审计。•在维护之前把责任明确,可以减少维护过程中的混乱2、软件维护申请报告(软件问题报告)•维护申请报告,由申请维护的用户填写。•用户必须完整地说明产生错误的情况,包括输入数据、错误清单以及其它有关材料。•如果申请的是适应性维护或完善性维护,用户必须提出一份修改说明书,列出所有希望的修改。•申请报告将由维护管理员和系统监督员来研究处理。•他们应相应地做出软件修改报告,指明:所需修改变动的性质;申请修改的优先级;为满足某个维护申请报告,所需的工作量;预计修改后的状况。•修改报告提交修改负责人批准后才能开始进一步安排维护工作。8.3软件维护过程17软件维护工作流程18•尽管维护申请类型不同,但都要进行同样的技术工作修改软件需求说明修改软件设计设计评审对源程序做必要的修改单元测试集成测试(回归测试)确认测试软件配置评审等。在每次软件维护任务完成后进行情况评审,对以下问题做一总结:(1)在目前情况下,设计、编码、测试中的哪一方面可以改进?(2)哪些维护资源应该有但没有?(3)工作中主要的或次要的障碍是什么?(4)从维护申请的类型来看是否应当有预防性维护?情况评审对将来的维护工作如何进行会产生重要的影响。8.3软件维护过程193、维护档案记录•程序名称源程序语句条数•机器代码指令条数所用的程序设计语言•程序安装的日期程序安装后的运行次数•与程序安装后运行次数有关的处理故障次数•程序改变的层次及名称•修改程序增加的源程序语句条数•修改程序减少的源程序语句条数•每次修改所付出的“人时”数•修改程序的日期软件维护人员的姓名•维护申请报告的名称、维护类型•维护开始时间和维护结束时间、•花费在维护上的累计“人时”数•维护工作的净收益等。8.3软件维护过程204、维护评价•评价维护活动比较困难,因为缺乏可靠的数据。•如果维护的档案记录做得比较好,可以得出一些维护“性能”方面的度量值。每次程序运行时的平均出错次数;花费在每类维护上的总“人时”数;每个程序、每种语言、每种维护类型的程序平均修改次数;因为维护,增加或删除每个源程序语句所花费的平均“人时”数;用于每种语言的平均“人时”数;维护申请报告的平均处理时间;各类维护申请的百分比。据此可对开发技术、语言选择、维护工作计划、资源分配、以及其它许多方面做出判定。8.3软件维护过程21•许多软件的维护十分困难,原因在于这些软件的文档不全、质量差、开发过程不注意采用好的方法,忽视程序设计风格等。•许多维护要求并不是因为程序中出错而提出的,而是为适应环境变化或需求变化而提出的。•为了使得软件能够易于维护,必须考虑使软件具有可维护性。1、软件可维护性的定义软件可维护性是指纠正软件系统出现的错误和缺陷,以及为满足新的要求进行修改、扩充或压缩的容易程度。维护人员理解、改正、改动或改进这个软件的难易程度。提高可维护性是支配软件工程方法学所有步骤的关键目标。8.4软件可维护性22•可维护性、可使用性、可靠性是衡量软件质量的主要质量特性,也是用户十分关心的几个方面。•软件的可维护性是软件开发阶段各个时期的关键目标。•目前广泛使用的是用如下的七个特性来衡量程序的可维护性。可理解性、可使用性、可测试性、可移植性、可修改性、效率、可靠性•而且对于不同类型的维护,这七种特性的侧重点也不相同。•这些质量特性通常体现在软件产品的许多方面;•为使每一个质量特性都达到预定的要求,需要在软件开发的各个阶段采取相应的措施加以保证。•这些质量要求要渗透到而各开发阶段的各个步骤当中。因此,软件的可维护性是产品投入运行以前各阶段面向上述各质量特性要求进行开发的最终结果。8.4软件可维护性23在各类维护中的侧重点改改正正性性维维护护适适应应性性维维护护完完善善性性维维护护可可理理解解性性可可测测试试性性可可修修改改性性可可靠靠性性可可移移植植性性可可使使用用性性效效率率8.4软件可维护性242、可维护性的度量•人们一直期望对软件的可维护性做出定量度量,但要做到这一点并不容易。•常用的度量一个可维护的程序的七种特性的方法。就是质量检查表、质量测试、质量标准•质量检查表是用于测试程序中某些质量特性是否存在的一个问题清单。•评价者针对检查表上的每一个问题,依据自己的定性判断,回答“Yes”或者“No”。•质量测试与质量标准则用于定量分析和评价程序的质量。•由于许多质量特性是相互抵触的,要考虑几种不同的度量标准,相应地去度量不同的质量特性。8.4软件可维护性252.1.可理解性•可理解性表明人们通过阅读源代码和相关文档,了解程序功能及其如何运行的容易程度。•一个可理解的程序应具备以下一些特性:模块化,风格一致性,不使用令人捉摸不定或含糊不清的代码,使用有意义的数据名和过程名,结构化,完整性等。2.2.可靠性•可靠性表明一个程序按照用户的要求和设计目标,在给定的一段时间内正确执行的概率。•关于可靠性,度量的标准主要有:平均失效间隔时间MTTF平均修复时间MTTR有效性A=MTBD/(MTBD+MDT)8.4软件可维护性26•度量可靠性的方法根据程序错误统计数字,进行可靠性预测。常用方法是利用一些可靠性模型,根据程序测试时发现并排除的错误数预测平均失效间隔时间MTTF。根据程序复杂性,预测软件可
本文标题:软件工程教案--第八章 维护XXXX
链接地址:https://www.777doc.com/doc-213245 .html