软件工程课本讲解第章增量模型.pptx
第7章 增量模型,7.1 概述 7.2 渐增模型7.3 快速原型模型7.4 快速原型的开发技术和开发环境7.5 增量模型的评价7.6 小结习题,习题,1.渐增模型有几种?各有何特点?2.快速原型模型有几种?各有何特点?3.快速原型模型的开发步骤是什么?4.评价快速原型模型的优缺点。5.对比瀑布模型与增量模型,指出增量模型的新思路。,7.1 概述,7.1.1 瀑布模型的局限性传统的瀑布模型给软件产业带来了巨大的进步,部分地缓解了软件危机,但这种模型本质上是一种线性顺序模型,存在着比较明显的缺点,各阶段之间存在着严格的顺序性和依赖性,特别是强调预先定义需求的重要性,在着手进行具体的开发工作之前,必须通过需求分析预先定义并“冻结”软件需求,然后再一步一步的实现这些需求。但是实际项目很少是遵循着这种线性顺序进行的。虽然瀑布模型也允许迭代,但这种改变往往对项目开发带来混乱。在系统建立之前很难只依靠分析就确定出一套完整、准确、一致和有效的用户需求,这种预先定义需求的方法更不能适应用户需求不断变化的情况。,1.需求是可变的某些应用软件的需求与外部环境、公司经营策略或经营内容等密切相关,因此需求是随时变化的,在不同时间用户的需求可能有较大的不同,采用预先定义整体不变的需求的策略,在一年或数年之前预先指定对需求随时间变化的软件的需求,显然是不切实际的。按照这样预先指定的需求开发软件,当软件开发出来的时候就已经过时了,不符合那时的用户需要了。然而按照瀑布模型开发,在开发后期修改需求要付出很高的代价,甚至根本不可能修改。,2.需求是模糊的对于某些类型的软件系统,如操作系统、编译系统等系统软件,人们对它们比较熟悉,有长期使用它们的经验,其需求经过仔细的分析之后可以预先指定。但是,对于大多数经常使用的应用系统,例如管理信息系统,其需求往往很难预先准确的指定,也就是说,预先定义需求的策略所做出的假设,只对某些软件成立,对多数软件并不成立。许多用户对他们的需求最初只有模糊的概念,想要求一个对需求只有初步设想的人准确无误地说出全部需求,显然是不切实际的。人们为了充实和细化他们的初步设想,通常需要经过在某个能运行的系统上进行实践的过程。,3.用户和开发者难于沟通大型软件的开发需要系统分析员、软件工程师、程序员、用户和领域专家等各类人员的协同配合。因此良好的通信和相互理解对于保证工程成功是至关重要的。大多数用户和领域专家不熟悉计算机和软件技术,软件开发人员也往往不熟悉用户的专业领域,特别在涉及各种不同领域的知识时,情况更是如此。因此,开发人员和用户之间很难做到完全沟通和相互理解,在需求分析阶段做出的用户需求常常是不完整、不准确的。因此,即使用户签字同意了的需求说明书,也并不能保证根据这份说明书开发出来的软件系统就能真正满足用户的需要。,从以上论述可知,传统的瀑布模型很难适应需求可变、模糊不定的软件系统的开发,而且在开发过程中,用户很难参与进去,只有到开发结束才能看到整个软件系统。这种理想的、线性的开发过程,缺乏灵活性,不适合实际的开发过程。7.1.2 增量模型的基本思想为了克服瀑布模型的局限性,使开发过程具有一定的灵活性和可修改性,于是产生了增量模型。它是在瀑布模型的基础上加以修改而形成的。,增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早地产生工作软件。增量模型是在项目的开发过程中以一系列的增量方式开发系统。增量方式包括增量开发和增量提交。增量开发是指在项目开发周期内,以一定的时间间隔开发部分工作软件;增量提交是指在项目开发周期内,以一定的时间间隔增量方式向用户提交工作软件及相应文档。增量开发和增量提交可以同时使用,也可单独使用。,7.1.3 增量模型的分类有多种增量模型,根据增量的方式和形式的不同,分为渐增模型和原型模型。1.渐增模型这种模型是瀑布模型的变种,有两类渐增模型:(1)增量构造模型:是在瀑布模型的基础上,对一些阶段进行整体开发,对另一些阶段进行增量开发。也就是说,在前面的开发阶段按瀑布模型进行整体开发,后面的开发阶段按增量方式开发。(2)演化提交模型:是在瀑布模型的基础上,所有阶段都进行增量开发,即不仅是增量开发,也是增量提交。,2.原型模型这种开发模型又称快速原型模型,它是增量模型的另一种形式。它是在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。根据原型的不同作用,有以下三类原型模型:(1)探索型原型:其原型模型是把原型用于开发的需求分析阶段,目的是要弄清用户的需求,确定所期望的特性,并探索各种方案的可行性。它主要针对开发目标模糊,用户与开发者对项目都缺乏经验的情况,通过对原型的开发来明确用户的需求。,(2)实验型原型:主要用于设计阶段,考核实现方案是否合适,能否实现。对于一个大型系统,若对设计方案心中没有把握,可通过这种原型来证实设计方案的正确性。(3)演化型原型:主要用于及早向用户提交一个原型系统,该原型系统包含系统的框架,或包含系统的主要功能,在得到用户的认可后,将原型系统不断扩充演变为最终的软件系统。它将原型的思想扩展到软件开发的全过程。,7.2 渐增模型,7.2.1 增量构造模型增量构造模型如图7.1所示。在该模型中,需求分析阶段和设计阶段都是按瀑布模型的整体方式开发的,但是编码阶段和测试阶段是按增量方式开发的。在这种模型的开发中,用户可以及早看到部分软件功能,及早发现问题,以便在开发其他软件功能时及时解决问题。,图7.1 增量构造模型,7.2.2 演化提交模型演化提交模型如图7.2所示。在该模型中,项目开发的各个阶段都是增量方式。先对某部分功能进行需求分析,然后顺序进行设计、编码和测试,把该功能的软件交付给用户,再对另一部分功能进行开发,提交用户直至所有功能全部增量开发完毕为止。开发的顺序按图7.2中的编号进行。该模型是增量开发的极端形式,它不仅是增量开发也是增量提交,用户将最早收到部分工作软件,能及早发现问题,使修改扩充更容易。,图7.2 演化提交模型,7.3 快速原型模型,7.3.1 基本思想1.原型 原型是指模拟某种产品的原始模型,在其他产业中经常使用模型。例如,在建造一座楼房时,先按一定的比例建造一个缩小的楼房模型,通过楼房模型的外观、形状和颜色的直接理解和认识,加强了对要建造的真正楼房的理解和认识。模型直观性很强,很容易发现那些不满意的设计,也很容易进行修改,经过用户和建设者反复讨论修改,最终可得到用户满意的模型,然后按照这个模型正式建造,这座楼房自然能满足用户要求。而软件开发中的原型是软件的一个早期可运行的版本,它反映了最终系统的重要特性。,2.快速原型思想的产生在20世纪80年代就出现了快速原型的思想,它是在研究需求分析阶段的方法和技术中产生的。由于种种原因,在需求分析阶段得到完全、一致、准确和合理的需求说明是很困难的。因此在开发过程的早期,在获得一组基本需求说明后,就快速地使其“实现”,通过原型反馈,加深对系统的理解,并满足用户基本要求,使用户在试用过程中受到启发,对需求说明进行补充和精确化,还增进了开发者和用户对系统需求的理解。使比较含糊的软件需求和功能明确化,还帮助开发者和用户发现和消除不协调的系统需求,逐步确定各种需求,从而获得合理、协调一致、无歧义的、完整的和现实可行的需求说明。,以后,又把快速原型思想用到软件开发的其他阶段,并向软件开发的全过程扩展,即先用相对少的成本,较短的周期开发一个简单的、但可以运行的系统原型向用户演示或让用户试用,以便及早澄清并检验一些主要设计策略,在此基础上再开发实际的软件系统。3.快速原型的原理快速原型是利用原型辅助软件开发的一种新思想。经过简单快速分析,快速实现一个原型,用户与开发者在试用原型过程中加强通讯与反馈,通过反复评价和改进原型,减少误解,弥补遗漏,适应变化,最终提高软件质量。,4.原型运用方式由于运用原型的目的和方式不同,在使用原型时也采取不同的策略,有抛弃策略和附加策略。抛弃策略是将原型用于开发过程的某一阶段,促使该阶段的开发结果更加完整、准确、一致和可靠,该阶段结束后,原型随之作废。探索型和实验型快速原型就是采用此策略的。附加策略是将原型用于开发的全过程,原型由最基本的核心开始,逐步增加新的功能和新的需求,反复修改反复扩充,最后成为用户满意的最终系统。演化型快速原型就采用此策略。采用何种形式、何种策略运用快速原型主要取决于软件项目的特点、人员素质、可供支持的原型开发工具和技术等,这要根据实际情况的特点来决定。,7.3.2 快速原型模型表示快速原型模型的表示如图7.3所示。图7.3(a)说明了原型本身的表示,图7.3(b)说明了原型的使用过程,图7.3(c)说明了快速原型模型的开发过程。,图7.3 快速原型模型(a)原型;(b)原型的使用;(c)开发过程,在图7.3(c)中,实线箭头连接的表示探索型快速原型模型的开发过程,双线箭头连接的表示实验型快速原型模型的开发过程,虚线箭头连接的表示演化型快速原型模型的开发过程。对于探索型,用原型过程来代替需求分析,把原型作为需求说明的补充形式,运用原型尽可能使需求说明完整、一致、准确和无二义性,但在整体上仍采用瀑布模型。对于实验型,用原型过程来代替设计阶段,即在设计阶段引入原型,快速分析实现方案,快速构造原型,通过运行,考察设计方案的可行性与合理性,原型成为设计的总体框架或设计结果的一部分。,对于演化型,用原型过程来代替全部开发阶段。这是典型的演化提交模型的形式,它是在强有力的软件工具和环境支持下,通过原型过程的反复循环,直接得到软件系统。不强调开发的严格阶段性和高质量的阶段性文档,不追求理想的开发模式。7.3.3 原型开发过程1.原型构造要求原型不同于最终系统,两者在功能范围上的区别是最终系统要实现软件需求的全部功能,而原型只实现所选择的部分功能;最终系统对每个软件需求都要求详细实现,而原型仅仅是为了试验和演示用的,部分功能需求可以忽略或者模拟实现。,因此,在构造原型时,必须注意功能性能的取舍,忽略一切暂时不关心的部分以加速原型的实现,同时又要充分体现原型的作用,满足评价原型的要求。在构造原型之前,必须明确运用原型的目的,从而解决分析与构造内容的取舍,还要根据构造原型的目的确定考核、评价原型的内容。2.原型的特征分类根据原型的目的和方式不同,构造原型的内容的取舍不同,体现出原型特征有如下类别:(1)系统的界面形式,用原型来解决系统的人机交互界面的结构。,(2)系统的总体结构,用原型来确定系统的体系结构。(3)系统的主要处理功能和性能,用原型来实现系统的主要功能和性能。(4)数据库模式,用原型来确定系统的数据库结构。3.原型开发步骤1)快速分析在分析人员与用户紧密配合下,迅速确定系统的基本需求,根据原型所要体现的特征(如上述的特征类别),描述基本需求以满足开发原型的需要。其关键要注意分析与描述内容的选取,围绕运用原型的目标,集中力量确定局部的需求说明,从而尽快开始构造原型。,2)构造原型在快速分析的基础上,根据基本需求说明尽快实现一个可运行的系统。这里要求具有强有力的软件工具支持,并忽略最终系统在某些细节上的要求,如安全性、坚固性和例外处理等,主要考虑原型系统能够充分反映所要评价的特性,而暂时删除一切次要内容。例如,如果构造原型的目的在于确定输入界面的形式,则可借助于输入界面自动生成工具(如FormGenerator),由界面形式的描述和数据域的定义立即生成简单的输入模块,而暂时忽略有关善后处理工作及参照检查、值域检查等内容,从而迅速提供用户使用。如果要利用原型确定系统的总体结构,可借助于菜单生成器迅速实现系统的控制结构,忽略转储、恢复等维护功能,用户通过运行菜单了解系统的总体结构。总之,在此阶段要求快速实现,尽快投入运行和演示。,5)修改根据评价原型的活动结果进行修改。若原型未满足需求说明的要求,说明对需求说明存在不一致的理解或实现方案不够合理,则根据明确的要求迅速修改原型。若原型运行效果不满足用户要求,说明需求说明不准确、不完整、不一致或要求有所变动和增加,则修改和规定新的需求说明,重新构造原型。修改过程代替了初始的快速分析,从而形成原型开发的循环过程。用户与开发者在这种循环过程中不断接近系统的最终要求。,上述步骤是为了描述方便而划分的。在软件工具支持下,上述各种活动往往交融在一起,或合而为一或交叉进行。运行、评价和修改有可能在各类人员共同使用和随时交互过程中交织在一起,而不再像瀑布模型那样严格的阶段划分,线性推进。,7.4 快速原型的开发技术和开发环境(略),采用通常的软件开发技术和工具来开发原型,开销太大,显然是不值得的。为了减少开发原型的开销,实现快速地分析,快速地构造出所需的原型,应该采用一些特殊的有别于通常软件开发时使用的技术和工具。1.构造原型的技术1)可执行的规格说明 可执行的规格说明是一种使要求说明过程自动化的技术,通过可执行的规格说明语言来描述预期的行为“做什么”,人们可以从直接观察中用规格说明语言来规定任何系统行为。,2)基于脚本的设计基于脚本的设计主要用于解决要求的验证问题。一个脚本将模拟在系统运行期间用户经历的事件,它提供了输入处理输出的屏幕,以及有关对话的一个模型,开发者能够给用户显示一个系统的逼真视图。3)采用非常高级语言或专门语言这是一些建模的语言,使用应用领域中的术语,方便了用户和开发者在计划中的系统的特性的思想交流。如虚拟现实建模语言VRML、统一建模语言UML等。,4)能重用软件 能重用成分是一些具体应用中共同出现的一些程序设计模式,包括输入/输出规格说明、控制结构和一般问题/解法描述等。2.构造原型的建议构造原型时有如下建议:(1)暂不考虑速度、空间等性能效率方面的要求。(2)暂不考虑错误恢复和处理。(3)可降低可靠性和软件质量标准。(4)原型界面部分要设计得简单易学,最好能与最终系统的界面相容。因为原型的界面是与用户通信的窗口,通过这个窗口,用户很容易获取信息和发表自己的意见。,(5)根据不同的软件类型和应用领域,可使用不同风格的高级语言来构造原型。这些建议可以减少构造原型的开销,达到快速分析,快速实现的目的。3.原型的开发环境除了上述的构造原型的技术和建议外,还应该有以下开发环境来辅助原型的开发:(1)交互式系统:能快速地响应使用者的要求。(2)数据库管理系统:能够提供很多工具,可以定义、建立、查询和加工信息资源。,(3)通用输入/输出软件:能容易使用的数据编辑、屏幕格式化软件等,它们对原型设计和开发都有很大帮助。(4)重用代码库:可减少重复劳动。,7.5 增量模型的评价,瀑布模型要求严格线性的开发,每个阶段开发活动结束后,通过严格的阶段性复审与确认,得到该阶段的一致、完整、正确和无二义性的良好文档资料,以“冻结”这些文档资料,作为该阶段的结束标志,保持不变,作为下一阶段活动的唯一基础,以每一步的正确性和完整性来保证最终系统的质量。但这是一种理想的线性开发序列,然而在大量的实践中面临着许多难以解决的问题。增量模型,特别是其中的原型模型的提出,对软件的开发过程的很多方面都带来了重要影响,它突破了传统思想,引入了新的概念、新的思想和新的观念。,1.原型的作用原型有如下的作用:(1)为软件系统提供明确的需求说明,当用户要求含糊不清、不完全及不稳定时,通过原型执行、评价,使用户要求明确。(2)原型可作为新颖设计思想的实现工具,也可作为高风险开发的安全因素,从而证实设计的可行性。(3)原型模型支持软件产品的演化,对开发过程中的问题和错误具有应付变化的机制。(4)原型模型鼓励用户参与开发过程,参与原型的运行和评价,能充分地与开发者协调一致。开发期间,原型可作为终端用户的教学环境。,2.使用原型的建议能够使用原型的情况如下:(1)开发周期很长的项目,通过原型开发来缩短开发周期。(2)系统的使用可能变化较大,不能相对稳定,而原型模型具有适应变化的机制。(3)用户对系统的需求较为模糊,对某种要求缺乏信心。(4)开发者对系统的某种设计方案的实现无信心或无十分的把握。上述这些情况均适合于使用原型模型来开发。,不宜使用原型的情况如下:(1)缺乏开发工具,或对原型的可用工具不了解的时候。(2)用户不愿意参与开发。(3)用户的数据资源没有很好地组织和管理的时候,因为快速原型需要快速寻找和存取数据。(4)用户的软件资源没有被组织和管理起来的时候,因为MIS中的模型、模块、使用设施和程序的难易程度对原型使用很关键。,3.原型的优点原型具有如下一些优点:(1)可及早为用户提供有用的产品。(2)可及早发现问题,随时纠正错误。(3)减少技术、应用风险,缩短开发时间,减少费用,提高生产率。(4)通过实际运行原型,提供直接评价系统的方法,促使用户主动参与开发活动,加强了信息反馈,促进各类人员的协调,减少误解,适应需求的变化,能有效提高系统质量。,4.存在问题原型存在的问题如下:(1)缺乏丰富而强有力的软件工具和开发环境。(2)缺乏有效的管理机制,还未建立起自己的开发标准。(3)对设计人员水平及开发环境要求较高。(4)在多次重复改变原型的过程中,程序员会感到厌倦。(5)系统的易变性对测试有一定影响,难于做到彻底测试,更新文档较为困难。,7.6 小结,瀑布模型是最基本的模型,严格按照线性顺序开发会导致缺乏灵活性,而且在开发过程中,用户与开发者交流不够,用户只能在开发完成后才能看到软件产品,用户若有什么修改意见,则为时已晚。因此,瀑布模型有一定的局限性。增量模型就是为了克服这些局限性而产生的。,增量模型有两类,一种是基于瀑布模型的渐增模型,另一种是基于原型的快速原型模型。渐增模型是改进的瀑布模型,以功能增量为基础,可提前提供部分软件产品,这样可提前发现问题。快速原型模型是以原型为增量的基础,尽早提供部分工作软件。根据原型的不同用法,可分为探索型原型、实验型原型和演化型原型。探索型原型是把原型用于需求分析阶段,通过原型的运行来明确软件的需求。实验型原型是把原型用于设计阶段,通过原型的运行来考察某个设计方案是否可以实现。演化型原型是把原型用于整个开发阶段,通过不断增加原型的功能,将原型逐步演化为最终产品。,增量模型比较灵活,适应用户的可变要求。在开发过程中,要求用户与开发者一起运行原型、一起评价原型,可以经常沟通,加强交流。快速原型模型要求有相应的方法技术和开发环境的支持,因为要快速分析,快速构建、运行、评价和修改原型,没有相应的支持工具是不能做到的。但快速原型模型也有一定的局限性,难于作到彻底的测试,文档难以建立,还缺乏相应的开发规范。,