《软件工程——理论、方法与实践》课件第13章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《软件工程——理论、方法与实践》课件第13章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程理论、方法与实践 软件工程 理论 方法 实践 课件 13
- 资源描述:
-
1、1 1第13章 软 件 演 化第13章 软 件 演 化13.1 软件演化的动态特性13.2 软件维护13.3 软件再工程本章小结习题2 2第13章 软 件 演 化13.1 软件演化的动态特性13.1.1 软件的本质特性 Lehman和Belady对软件演化的动态特性进行了系统的研究,提出了著名的关于系统变更的定律,被称为Lehman定律,该定律总结了软件在变更过程中的演化特性。3 3第13章 软 件 演 化Lehman定律的主要内容包括:(1)软件维护是一个必然的过程。现实环境是在不断变化的,新的需求会不断地涌现,因此运行在相应环境中的软件也应随之发生变化,从而继续发挥其作用。(2)软件的不断
2、修改会导致软件的退化。因此为了防止这种退化,必须改善软件的结构和质量。4 4第13章 软 件 演 化(3)软件系统的演化特性是在早期的开发阶段建立起来的。软件规模限制着较大的变更发生,较大的变更会引起更多新的缺陷。在大型软件开发组织中,较大的软件变更需要组织的决策和预算的变动,而这种决策过程也制约着新版本的时间周期。(4)软件开发的效率与投入的资源无关。在大型软件开发项目中,团队成员数量的增加使项目的有效交流变得十分困难,过多的沟通时间使得开发人员没有足够的时间完成自己的开发任务,也会导致开发效率的相对低下。5 5第13章 软 件 演 化(5)在软件系统中添加新的功能不可避免地会产生新的缺陷,
3、因此若软件的功能增量较大意味着需要发布一个新版本,若新增功能较少,则其主要任务是修补这些新产生的软件缺陷。Lehman的结论揭示了软件演化的普遍特性,现实环境决定了软件系统不可避免地发生变更,软件的持续变更又会引入新的缺陷,甚至会破坏原有的系统结构。对于软件变更引起的各种问题,人们通常采用不同的策略进行处理,即进行软件维护和软件再工程。6 6第13章 软 件 演 化13.1.2 遗留系统问题许多大型系统往往具有较长的生命周期,使用时间多为10年以上。由于某些软件在业务中的重要性和稳定性,一些机构甚至仍然依赖于已经有20多年历史的软件系统,因此,这些老系统出现任何问题都会对机构的业务带来巨大影响
4、。人们把这些老系统称为遗留系统。7 7第13章 软 件 演 化经历长时间运行的遗留系统往往已不是最初交付的系统,这期间系统内、外部环境的变化,如市场、法规、管理上的变化以及软、硬件技术的发展等,都使软件系统面对新的需求,需要随着业务的变化而改变。因此,遗留系统在其生命周期中是不断变更着的,但如果要抛弃一个遗留软件系统,用一个全新开发的软件系统去替换它,则存在巨大风险,其原因在于:8 8第13章 软 件 演 化首先,遗留系统很少具有完整的文档,往往最初的文档已经不存在了,即使存在,也很难包含所做变更的所有细节,因此,很难有一个简单的方法可以产生与遗留系统功能相同的新系统。其次,业务过程和遗留系统
5、的操作方式紧密地“交织”在一起。这些业务过程已经根据软件服务的特点做了调整,为的是充分发挥软件服务的优势,弥补其不足。如果系统被替换,这些过程也必须改变。这样一来,替换的成本以及对业务的影响就难以估量。9 9第13章 软 件 演 化另外,重要的业务规则隐藏在软件内部,业务规则是对某些业务功能施加的约束,新的系统可能会打破这些规则,从而会给业务带来不可预知的结果。例如,一家保险公司可能将保单申请的风险评估规则嵌入到软件中,如果不保留这些规则,公司就可能接受高风险保单,由此带来日后昂贵的赔付。同时,开发新软件本身是有风险的,所以新系统会遇到难以预料的问题。它可能无法按时交付,对软件支付的价格也可能
6、要超出预期的估计。1010第13章 软 件 演 化在这种情况下,继续使用遗留系统则可以避免以上所述风险,但是对现有软件进行变更也会带来较大的代价,越老的系统越是如此。其主要的原因在于:系统的不同部分是由不同的团队实现的,整个系统中的程序设计风格是不一致的;系统的部分或全部可能是用一种已被淘汰的编程语言写的,目前已难以找到能使用这种语言的程序员;系统文档通常是不充分的和过时的。1111第13章 软 件 演 化有些时候,系统源代码是唯一的系统文档,而有些时候系统源代码已经不复存在,只剩下系统的可执行版本;经过许多年的维护,系统结构可能已经被破坏,理解系统设计的难度逐渐加大。加进来的新程序可能以一种
7、特别的接口方式与系统的其他部分对接;系统可能对空间或运行速度进行了优化,但可读性不好,这对那些掌握现代软件工程技术的人员来说理解起来是相当困难的。源程序中可能使用了许多小的程序设计窍门,对新人来说同样是极难弄懂的。系统所处理的数据可能保留在一些结构不相容的文件中,这些文件中的数据可能存在重复现象,数据也已经过时、不精确,也不完整。1212第13章 软 件 演 化因此,如果继续使用遗留系统,根据需要做系统变更,成本不可避免地要增加。如果用新系统替换遗留系统,费用和风险也会很高,而且新系统不一定能像遗留系统那样对系统提供有力的支持。所以需要有软件工程技术来延长遗留系统的生命周期,降低系统的维护成本
8、,即进行软件维护和软件再工程。1313第13章 软 件 演 化13.2 软 件 维 护13.2.1 软件维护内容 1软件维护的类型软件维护活动可以分为三种典型的类别:改正性维护、适应性维护、完善性维护。另外不排除其他类型的一些维护,如预防性维护。1414第13章 软 件 演 化在软件交付使用后,由于开发时测试的不彻底、不完全,必然会有一部分隐藏的错误被带到运行阶段来,这些隐藏下来的错误在某些特定的使用环境下就会暴露。为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当对软件进行诊断和修正错误,称之为改正性维护。例如,改正性维护可以是改正原来程序中未使开关复原的错误;解决开发时
9、未能测试各种可能情况带来的问题等。1515第13章 软 件 演 化适应性维护是指随着计算机的飞速发展,外部环境(新的硬、软件配置)或数据环境(数据库、数据格式、数据输入输出方式、数据存储介质)可能发生变化,为了使软件适应这种变化,而去修改软件的过程。例如,适应性维护可以是为现有的某个应用问题实现一个数据库,对某个指定的事务编码进行修改,增加字符个数;调整两个程序,使它们可以使用相同的记录结构;修改程序,使其适用于另外一种终端。1616第13章 软 件 演 化完善性维护是指在软件的使用过程中,根据用户对软件提出的新的功能与性能要求,来修改、再开发软件,以扩充软件功能、增强软件性能、改进加工效率、
10、提高软件的可维护性。例如,完善性维护可能是修改一个计算工资的程序,使其增加新的扣除项目;提高系统响应速度,以达到特定的要求;改进用户与程序的对话方式;改进图形输出,增加联机帮助功能;为软件的运行增加监控设施等。1717第13章 软 件 演 化在维护阶段的头两年,改正性维护的工作量较大。随着错误发现率急剧降低,并趋于稳定,就进入了正常使用期。然而,由于变化的需求,适应性维护和完善性维护的工作量逐步增加,在这种维护过程中又会引入新的错误,从而加重了维护的工作量。实践表明,在几种维护活动中,完善性维护所占的比重最大,即大部分维护工作是改变和加强软件,而不是纠错。所以,维护是有计划、有预谋的一种再开发
11、活动。统计说明,来自用户要求扩充、加强软件功能和性能的维护活动约占整个维护工作的50%。1818第13章 软 件 演 化预防性维护是为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础。通常,预防性维护定义为:“把今天的方法用于昨天的系统以满足明天的需要。”如图13.1所示,在整个维护阶段的全部工作中,预防性维护只占很小的比例,而完善性维护占了近1/2的工作量。从图13.2中可知,软件维护花费的工作占整个生存期工作量的70%以上,这是由于在软件运行过程中要不断对软件进行修改,以改正新发现的错误、适应新的环境和用户新的要求。这些修改需要花费很多精力和时间,而且有时修改不正确,还会引
12、入新的错误。同时,软件维护技术不像开发技术那样成熟、规范化,自然消耗工作量就较多。1919第13章 软 件 演 化图13.1 几类维护占总维护的比例 2020第13章 软 件 演 化图13.2 维护在软件生存期所占的比例 2121第13章 软 件 演 化2软件维护成本在系统的维护过程中,需要花费较大的工作量,不可避免地涉及到软件的维护成本问题。随着软件规模和复杂性的不断增长,软件维护的成本呈现上升的趋势。除此之外,软件维护还有无形的代价,由于维护工作占据着软件开发的可用资源,因而有可能使新的软件开发因投入的资源不足而受到影响,甚至错失市场良机。况且,由于维护时对软件的修改,在软件中引入了潜在的
13、故障,从而降低了软件的质量。2222第13章 软 件 演 化系统的大小、程序设计语言、系统的生命周期长短、软件所采用的开发技术等是维护工作量的决定因素。通常,系统越大、越复杂,维护人员阅读和理解该软件就越困难,因此,需要维护的工作量和成本就越大。使用功能强的程序设计语言,可以比较好地控制程序的规模,所生成的指令数也比较少;反之,实现相同的功能所需的语句就越多,相应程序就越大。早期,很多软件使用的程序设计语言较落后,所编写的程序逻辑性混乱,且程序的内聚和封装特性较差,导致程序的可读性、可维护性较差。2323第13章 软 件 演 化早期的老系统(遗留系统)除了设计结构上存在的缺陷,通常还会面临没有
14、文档,或文档太少的问题。另一方面,随着软件的不断修改,系统结构严重退化,长期的维护过程使得文档与程序不一致,程序也变得越来越难理解。所以,老系统和生命周期较长的系统需要更多的维护成本。近年来,数据库技术越来越成熟,在数据管理的应用领域中起着非常重要的作用。使用数据库可以简单有效地存储和管理程序中的数据,数据库工具可以很方便地修改和扩充报表等,因此,数据库技术的应用可以减少维护工作量。2424第13章 软 件 演 化在软件开发中,如果使用能使软件结构比较稳定的分析与设计方法以及程序设计技术,如复用技术、面向对象技术等,将大大减少软件的维护成本。另外,软件在程序中是否使用了数学模型、任务的难度、I
15、F嵌套的深度等因素都会对系统维护成本有影响。用于维护的工作量可以分成生产性活动和非生产性活动。例如,分析评价、修改设计和实现的源代码等是生产性活动;理解程序的功能、解释与判断数据结构、接口特点、性能的限度等是非生产性活动。2525第13章 软 件 演 化 维护工作量可以用一个模型表达:M=P+K exp(c-d)其中,M是维护的工作量;P是生产性工作量;K是经验常数;c是因为缺乏好的方法和文档而导致软件的复杂度;d是维护人员对软件熟悉的程度。该模型说明,如果没有一个好的软件开发途径,原来的开发人员不能参加维护工作,则维护工作量(成本)将按指数级增加。2626第13章 软 件 演 化3降低维护成
16、本的策略根据影响软件维护工作量的各种因素,一些策略被用于软件开发过程,以控制维护成本。在软件开发过程中,通过采用新技术,可大大提高可靠性,并减少进行改正性维护的需要。这些技术包括数据库管理系统、软件开发环境、程序自动生成系统和较高级(第四代)语言,应用这四种技术可产生更加可靠的代码。2727第13章 软 件 演 化此外,利用应用软件包可开发出比完全由用户自己开发的系统可靠性更高的软件;采用面向对象和结构化技术可以使软件有良好的可维护性;将自检能力引入程序,通过非正常状态的检查,提供审查跟踪,可降低发现和改正错误的代价;周期性维护审查易于在形成维护问题之前就可确定质量缺陷。2828第13章 软
17、件 演 化软件的适应性维护不可避免,但可以控制。在开发过程中,若配置管理时,把硬件、操作系统和其他相关环境因素的可能变化考虑在内,可以减少某些适应性维护的工作量;把硬件、操作系统,以及其他外围设备有关的程序归到特定的程序模块中,可以把因环境变化而必须修改的程序局限在某些程序模块之中;使用内部程序列表、外部文件,以及处理的例行程序包,可为维护时修改程序提供方便。开发过程可建立软件系统的原型,在实际系统开发之前把它提供给用户,用户通过研究原型进一步完善它们的功能要求,就可以减少以后完善性维护的需要。2929第13章 软 件 演 化13.2.2 软件维护过程 软件维护过程又称为软件维护活动。由于在软
18、件的运行过程中,需要不断地进行修改和完善,使得维护工作量逐年上升。软件维护过程与软件类型、软件开发过程以及人员因素有着密切的关系。软件维护过程由一系列变更请求触发。变更请求可能来自系统用户、管理层或者客户。一旦变更请求获得批准,就要对系统规划一个新版本,然后实现这个变更。软件维护过程的参考模型如图13.3所示。3030第13章 软 件 演 化图13.3 软件维护过程模型3131第13章 软 件 演 化1软件维护组织通常并不需要建立一个正式的维护机构,在一个维护过程中,每一位参加维护的人员都要明确自己的责任,为了减少维护过程的混乱,建立一种非正式的组织还是有必要的。软件维护组织如图13.4所示3
19、232第13章 软 件 演 化图13.4 软件维护组织3333第13章 软 件 演 化维护申请提交给一个维护管理员,维护管理员将申请交给某个系统监督员去评价。系统监督员是技术人员,他必须熟悉产品程序的某一部分。一旦做出评价,由修改负责人确定如何进行修改。在维护人员对程序进行修改的过程中,由配置管理员严格把关,控制修改的范围,对软件配置进行审计。维护管理员、系统监督员、修改负责人等,均代表维护工作的某个职责范围。修改负责人、维护管理员可以是指定的某个人,也可以是一个包括管理人员、高级技术人员在内的小组。系统监督员可以有其他职责,但应具体分管某一个软件包。3434第13章 软 件 演 化2软件维护
20、申请报告应该用标准的格式提出软件维护的申请。维护申请报告是由软件组织外部提交的文档,它是软件维护工作的基础。维护组织接到的申请报告由维护管理员和系统监督员来研究处理。软件维护申请报告应说明产生错误的情况,如输入的数据、错误的清单等。如果申请的是适应性和完善性维护,用户必须提出一份修改说明书,列出所有希望的修改。维护申请报告由维护管理员和系统监督员来研究处理。3535第13章 软 件 演 化维护申请报告是由软件组织外部提交的文档,它是计划维护工作的基础。软件组织内部应相应地做出软件修改报告(SCR),指明以下问题。(1)所需要修改的性质;(2)申请修改的优先级;(3)为满足某一项维护申请所需要的
21、工作量;(4)预计修改后的状况。3636第13章 软 件 演 化3软件维护流程软件维护流程如图13.5所示,维护流程的第一步是先确认维护要求,弄清错误概况及对业务影响的大小,以及用户希望做什么样的修改,并把这些情况存入故障数据库,然后由维护组织管理员确认维护类型。3737第13章 软 件 演 化图13.5 维护的工作流程3838第13章 软 件 演 化对于改正性维护申请,从评价错误的严重性开始。如果存在严重的错误,则必须安排人员在系统监督员的指导下,进行问题分析、寻找问题发生的原因、进行“救火”性的紧急维护;对于不严重的错误,可根据任务,视轻重缓急进行排队,统一安排时间。对于适应性维护和完善性
22、维护申请,需要先确定每项申请的优先次序。若某项申请的优先级非常高,就可以立即开始维护工作。否则,维护申请和其他的开发工作一样,进行排队,统一安排时间。并不是所有的完善性维护申请都必须承担,因为它相当于做二次开发,工作量很大,所以要根据业务需要,可利用资源的情况,以及其他的考虑,决定是否承担。3939第13章 软 件 演 化4软件维护记录为了估计软件维护的有效程度,应该做好维护记录。记录的内容可考虑以下项目:程序标识(名称);源程序行数;机器指令条数;所用的程序设计语言:程序安装的日期;程序安装后运行的次数;程序安装后失败的次数;4040第13章 软 件 演 化 程序改变的层次及名称;修改程序所
23、增加的源程序行数;修改程序所减少的源程序行数;每次修改所付出的“人时”数;程序修改的日期;软件维护人员的姓名;维护申请报告的标识(名称);维护类型;维护的开始时间和结束时间;累计用于维护的“人时”数;完成维护任务的纯收益。4141第13章 软 件 演 化5软件维护评价如果已具有软件维护记录,则可以对维护工作进行评价。可供参考的度量值是:程序每次运行的平均失效次数;各类维护活动所花费的总“人时”数;每个程序、每种语言、每种维护类型所做的程序变动平均数;因为维护而增加或删除一个源程序语句,平均花费的“人时”数;维护每一种语言的程序所花费的“人时”数;维护申请报告的平均处理时间;各类维护申请的百分比
24、。4242第13章 软 件 演 化13.3 软件再工程13.3.1 再工程活动从技术角度来看,软件再工程似乎是软件演化问题的一个次优级解决方案。比如将集中式的软件体系结构转换为分布式非常困难;通常也不大可能从根本上改变系统所用的程序语言,这意味着一些老系统难以被转换到如Java或C+这样的面向对象程序设计语言上;且由于软件功能没有变化,所以系统原有的局限性仍然存在。4343第13章 软 件 演 化然而,从业务角度看,对于有较高使用价值的软件系统,再工程可能是保证遗留系统能继续提供服务唯一可行的方法。改用其他任何方案都将带来更高的费用和更高风险。原因在于遗留系统中的代码量是极大的。20世纪90年
25、代以后,支持业务过程的计算机应用在大幅增加。因此,估计到目前为止,大约有2500亿行源代码需要维护;其中大部分都不是采用面向对象语言编写的,而且它们大多数是运行在大型机平台上。4444第13章 软 件 演 化软件系统再工程方法与其他方法相比有两个绝对优势:一是可减少风险。对机构所用的某个基本软件系统做重新开发是个高风险的决策,比如系统中会发生错误,会出现开发中的种种问题等;二是可降低成本。再工程的成本较之重新开发一个软件的成本来说要小得多。比如一个商业系统,该系统新开发的成本高达5000万美元,而再工程的成本仅仅1200万美元。有数据表明,再工程的费用大约是重写同一个系统费用的1/4。4545
展开阅读全文