软件生存周期模型.ppt
软件工程 第三讲 软件生存周期模型 朱建凯,上次课布置的阅读内容,问题:什么是基本过程?什么是支持过程?什么是组织过程?软件开发过程的主要活动是什么?每个活动都有什么输出?,基本过程:与软件生产直接相关的活动集;支持过程:有关各方按他们的支持目标所从事的一系列相关的活动集;组织活动:与软件生产组织有关的活动集。,本次课程重点,瀑布模型,其优缺点,适应范围(非常重要)增量模型、演化模型,优缺点,适应范围(重要)螺旋模型、喷泉模型(了解)软件原型和软件重用的概念及其作用(重要)项目生存周期过程(了解),2.2 软件生存周期模型基本概念 称软件生存周期模型为“软件开发模型”,并把它定义为:软件过程、活动、任务的结构框架。,系统需求,软件需求,需求分析,设 计,编 码,测 试,运 行,瀑布模型,关于瀑布模型的几点说明()瀑布模型的优点 虽然瀑布模型是一个比较“老”的、甚至过时的开发模型,但其优点为:在决定系统怎样做之前,存在一个需求阶段,鼓励对系 统“做什么”进行规约(即设计之前的规约)。在建造构件之前,存在一个设计阶段,鼓励规划系统结 构(即编码之前的设计)。在每一阶段结束时进行复审,允许获取方和用户的参与。允许基线和配置早期接受控制。前一步工作产品可作为下一步被认可的、文档化的基线。,()瀑布模型存在的不足 客户必须能够完整、正确和清晰地表达他们的需求;开发 人员一开始就必须理解其应用。在开始的两个或三个阶段中,很难评估真正的进度状态;设计、编码和测试阶段都可能发生延期。在一个项目的早期阶段,过分地强调了基线和里程碑处 的文档;可能要花费更多的时间,用于建立一些用处不 大的文档。当接近项目结束时,出现了大量的集成和测试工作。直到项目结束之前,都不能演示系统的能力。,(3)瀑布模型适用的情况在开发中,向下、渐进的路径占支配地位。也就是说,需求已被很好地理解;并且 过程设计人员也很清楚:开发组织非常熟悉为实现这一模 型所需要的过程(或经过培训后,熟悉什么时候来支持这 一项目,以实现这一模型所需要的过程)。因此为了避免产生过多的反复迭代工作,增加开发成本,一般在准备采用瀑布模型(也包括其他模型)时,需要考虑以下2个问题:第一个问题是,过程设计人员必须对初始产品(通常 是软件需求规约,SRS)的不确定性进行评估。另一个问题是,组织是否具有熟练实施每个活动和 任务的历史经验。,1,3,2,5,9,10,11,6,7,12,13,8,4,增量1 1,2,5,9 增量2 3,6,7,4,10,11 增量3 8,12,13,管理,增量规约,增量设计,纠错性分析,增量实现,增量1,增量2,增量3,3 增量模型,该模型有一个假设,即需求可以分段,成为一系列增量产品,每一增量可以分别地开发。,关于增量模型的几点说明:,(1)增量模型的优点 作为瀑布模型的第一个变体,具有瀑布模型的所有优点。此外,它还有以下优点:第一个可交付版本所需要的成本和时间是很少的;开发由增量表示的小系统所承担的风险是不大的;由于很快发布了第一个版本,因此可以减少用户需求 的变更;允许增量投资,即在项目开始时,可以仅对一个或两 个增量投资。,()缺点:如果增量模型不适于某些项目,或使用有误,则有以下缺点:如果没有对用户的变更要求进行规划,那么产生的初始 增量可能会造成后来增量的不稳定;如果需求不像早期思考的那样稳定和完整,那么一些增 量就可能需要重新开发,重新发布;管理发生的成本、进度和配置的复杂性,可能会超出组 织的能力。注:如果采用增量投资方式,那么客户就可以对一些增量进行招标。然后,开发人员按提出的截止期限进行增量开发,这样客户就可以用多个契约来管理组织的资源和成本。,()该模型的适用情况 在开始开发时,需求很明确,且产品还可被适当地分解为一些独立的、可交付的软件(构造增量:Build increments如果一个增量并不需要交付给客户的话,那么这样的增量通常称为一个“构造”(Build)。如果增量被交付,那么它们就被认为是发布版本(Released version)。);在开发中,期望尽快提交其中的一些增量产品。例如:一个数据库系统,它必须通过不同的用户界面,为不同类型的用户提供不同的功能。在这一情况下,首先实现完整的数据库设计,并把一组具有高优先级的用户功能和界面作为一个增量;以后,陆续构造其它类型用户所需求的增量。,需求,设计,编码,测试,集成,需求,设计,编码,测试,集成,开发,反馈,开发,反馈,.,核 心 系 统 开 发,第 二 次 迭 代,演化模型(Evolutionary model)是一种有弹性的过程模式,由一些小的开发步组成,每一步历经需求分析、设计、实现和验证,产生软件产品的一个增量。通过这些迭代,完成最终软件产品的开发。针对事先不能完整地定义需求 针对用户的核心需求,开发核心系统 根据用户的反馈,实施活动的迭代,关于演化模型的几点说明(1)主要特征 该模型显式地把增量模型扩展到需求阶段。由图可以看出,为了第二个构造增量,使用了第一个构造增量来精化需求。这一精化可以有多个来源和路径。首先,如果一个早期的增量已向用户发布,那么用户会以变更要求的方式提出反馈,以支持以后增量的需求开发。第二,通过实实在在地开发一个构造增量,为以前还没有认识到的问题提供了可见性,以便实际地开始这一增量的工作。,(2)与瀑布模型的关系 在演化模型中,仍然可以使用瀑布模型来管理每一个演化的增量。一旦理解了需求,就可以像实现瀑布模型那样开始设计阶段和编码阶段。(3)使用演化模型应注意的问题 不能弱化需求分析阶段的工作。其原因是:在项目开始时,考虑所有需求来源的重要性和风险,对这些来源的可用性进行评估。只有采用这一方法,才能识别和界定不确定的需求,并识别第一个增量中所包含的需求。,(4)演化模型的长处和不足 演化模型还具有以下优点:与增量模型是类似的。特别地,在需求不能予以规约时,可以使用这一演化模型。用户可以通过运行系统的实践,对需求进行改进。与瀑布模型相比,需要更多用户/获取方的参与。缺点有:演化模型的使用仍然处于探索阶段,因此具有较大 的风险,需要有力的管理。演化模型的使用很容易成为不编写需求或设计文档的借口,即使很好地理解了需求或设计。用户/获取方不易理解演化模型的自然属性,因此当结果不 够理想时,可能产生抱怨。,演化,维护,确认,实现,设计,分析,喷泉模型 特征:迭代 无缝 与面向对象技术 的关系,螺旋模型 该模型是由Dr.Barry Boehm Boehm 1988开发的。该模型将软件生存周期的活动分为四个可重复的阶段:规划、风险分析、开发和评估:项目的进度是“螺旋”式的。,risk analysis stage,Development stage,Planning stage,Evaluation stage,start,Resource use,其中:评估和风险分析阶段都可作出一个决策:项目是否继续。螺旋循环的次数指示了已消耗的资源;在规划阶段、风险分析阶段和开发阶段均进行需求规约活 动;在早期螺旋循环中,为了为最终的实现给出一些指导性决 策,经常使用原型构造;设计和实现活动一般是在开发阶段进行;V&V 活动在开发阶段和评估阶段进行;,关于螺旋模型的几点说明:(1)该模型关注解决问题的基本步骤:标识问题;标识一些 可选方案,选择一个最佳方案;遵循动作步骤,并实施 后续工作。其中只要完成了开发的一个迭代,开发的另 一个迭代就开始。(2)螺旋模型的一个特征是,实际上只有一个迭代过程真正 开发可交付的软件。因此,如果 项目的开发风险很大,或 客户不能确定系统需求,在更广泛的意义上来讲,还 包括系统或系统类型的要求,这时螺旋模型就是一个好的生存周期模型。,(3)与其它模型的关系 与演化模型一样,螺旋模型也使用瀑布模型作为一个嵌入的过程-即分析、设计、编码、实现和维护的瀑布过程,是螺旋一周的组成部分。尽管螺旋模型和一些迭代模型在框架和全局体系结构方面是等同的,但所关注的阶段以及它们的活动是不同的。具体地说:标识客户想要的是一个什么样的系统;确定风险和效益的可选路线;选择最优方案;开发系统;评估完成情况等;重新开始。即 螺旋模型扩展了增量模型的管理任务范围。而增量模型是基于以下假定:需求是最基本的、并且是唯一的风险源。而在螺旋模型中,决策和降低风险的空间是相当广泛的。,7 模型中的三个重要修饰原型、并发、商业构件的复用。(1)原型与原型构造 何谓原型 显式地规划如何使用一个或多个演化的增量,这作为一个明确的需求揭示工具,是生存周期模型的发展的必然。遵循其它工程领域所使用的术语,我们把这样的一个增量称为一个原型。,注:尽管原型可以由用户以某一受限的方式使用,但不能把原型看作是一个具有完备功能的增量。,原型的作用 揭示那些以后将在具有完备功能的、可交付的、可支持的增量中予以实现的需求。可以用于为一个项目或一个项目的某些部分,确定技术、成本和进度的可能性。例如,原型有助于回答以下问题:一个新的开发环境或工具,是否能够满足客户成本和进 度约束?一个被安装的、可用的软/硬件基础设施,是否可以支持 客户新的性能和能力需求?是否能够创建这一产品,即这是可行的吗?,原型构造 原型构造,有时它也被称为快速应用开发(Rapid ApplicationDevelopment,RAD)。适用范围:对那些具有较多用户界面和数据库的系统开发中,可使用之 使用条件:需要相应RAD方法和工具的支持。,注:近年来,由于VB(Visual Basic)、Delphi、。NET等开发环境的出现,这一术语得到了广泛的应用,使用这些工具几乎可以无缝地建造原型和最终系统。,()生存周期模型中的并发 问题的提出:当一个工作程序经过其所选择的生存周期时,一些过程之间的重叠几乎是不可避免的,不论这一重叠是规划的还是没有规划的。例如,即使在需求是非常清楚的,出于对成本和进度的考虑,可能就选择通常的瀑布模型的情况下,表面上看,这排除了并发的可能性事实上这是非常困难的。例如,如果一个子系统的详细设计在另一个子系统之前完成,并且这两个子系统之间的接口是稳定的,那么就可以提前对已完成详细设计的那个子系统进行编码,从而导致一个系统的详细设计阶段和编码阶段的并发。,还要注意,在所有生存周期模型的反向流(即对已经完成的一个文档或其它产品必须要做的改变)中,也可能隐含地存在 一些并发。使用并发的基本要求-要求组织的管理必须有能力支持并发,包括进度安排、成本控制、状态跟踪和配置管理系统,包括技术复审机制和任何设计工具。-如果两个子系统同时处在同样的开发阶段,那么就要求严格监控这两个子系统之间的界面。,使用中的问题围绕并发的使用,存在以下两个重要的问题:并发程度。并发的程度可以从偶然的,只有少量反向改变的要求;到过分的,存在一个增量正在设计,而前面那个增量正在集成。注意:以上两种情况,对技术系统和管理系统的需求是非 常不同的。并发的管理。一旦出现并发,就要很好地进行规划。其中应重视由于使用并发所出现的这些问题。,(3)商业构件的复用 问题的提出 现代软件系统的创建趋势是,使用商业应用框架和商业构件,或复用组织内部已开发的构件和框架,当然,也复用组织的实践和规程。这一趋势的出现,有以下三个原因:(1).市场和成本的竞争压力;(2).交付环境的日趋复杂和标准化,例如Internet;(3).产品线工程的出现,其中系统地规划和实施:多个相关软件产品的开发和演化;那些可复用的设计和 实现;用于产品线的所有产品。,重用软件构件的意义(1)生产率:有效提高开发进度;(2)质量:软件质量能得到提高;(3)成本:节省人力资源。使用中的问题重用包含两个方面:开发重用的构件和重用构件的选择重用的制品是多方面的;公司需要制定鼓励重用的政策。,软件开发本质,软件生存周期过程,定义,软件生存周期模型,软件工程生存周期过程,支持过程方向(活动与定序)的建立,形成,软件开发方法学结构化方法面向对象方法面向数据结构 方法维也纳开发方 法(VDM),给出实现开发过程的途径,支持/管理技术与方法,作用于,回答:如何建立一项软件工程的生存周期过程并管理之.,2.3 软件工程生存周期过程管理,1)引言 一个项目的软件生存周期过程管理,是该软件工程项目管 理的一个子集.何谓一个项目的软件生存周期过程?无论是软件项还是硬件项,在其开发上的演化一般被称 为该项的生存周期。通常,一个项的开发往往始于一个 想法,依其服务情况,不断地进行改进。因此,项目的 生存周期可概括为:,Recognition of need,Acq.Decision&Strategy,Specification,Design Acceptance,New Requirements,Maintenance,Release to field,Implementation,在一个项目生存周期中,每一个任务(例如Design)都通过一个或多个过程的方式来完成。在生存周期中所有这些相关过程的组合,称为项目的软件生存周期过程。,注:在这一定义中,关注开发产品所需要的工程技术和管理技 术活动,从规约(Specification)一直到验收(Acceptance).,软件生存周期过程的管理 管理的一般模型:所谓软件生存周期过程的管理,即从需求规约到验收,对 过程、过程之间的关系以及过程产品流进行定义和 控制.,P,A,D,C,具体地说,可分为4个主要阶段:选择合适的软件生存周期模型(the Software Life Cycle Model,SLCM),作为发布、支持产品所需要的一个全局过程网,作为完成其中活动所需要的活动网。通过标识和定义那些单个的任务(例如需求),创建软件生存周期(the Software Life Cycle,SLC)。建立组织上和技术上的软件生存周期过程(the Software Life Cycle Process,SLCP)。在整个产品的生存周期中,管理该SLCP。,2)软件生存周期模型的选择在实际工程中,可供选择的四个主要软件生存周期模型为:(1)瀑布模型,(2)增量模型,(3)演化模型,(4)螺旋模型。(1)选择步骤 在每一模型的优缺点评估完成之后,过程设计师必须为指定的项目选择最合适的生存周期模型。(注:这是一项重要而复杂的任务.)IEEE Standard 1074-1997列出了选择项目生存周期模型的步骤(5步).,标识开发项目可用的SLCMs。在所期望的最终系统和开发环境中,标识那些会影响SLCM选 择的属性。标识为选择生存周期模型所需要的任何约束,包括外部的 或是内部的。例如,来自客户合同上的需求,或关键开发技能 的缺乏,特别是客户强制的、具有里程碑的程序进度,以及使 一个特定的应用框架或关键构件成为有用的一个策略决策。基于以往的经验和组织能力,评估第一步所选择的那几个 SLCM。最后,选择最能满足项目属性和约束的SLCM。,3)生存周期过程的精化选择了一个软件生存周期模型之后,下一个任务就是将相关的生存周期活动映射到该软件生存周期模型。-精化IEEE Standard 1074-1997和IEEE/EIA Standard 12207将活动定义为组成一个过程的元素;把任务定义为一个活动中的最小的工作单元。至于如何确定每一个任务,这是管理的责任,这涉及到成本和进度评估和管理,即必须考虑项目的完成时间和监控它们的状态。,在确定任务的工作中,应注意:一般来说,任务是可分配给项目组成员的、定义良好的工作。一些相关的工作通常组合在一起形成活动,通常称之为“工作包”。由此可见,创建生存周期过程的任务是,选择一些要实施的任务及其所需要的方法、工具和能力。,4)项目软件生存周期过程的实现将合适的活动映射带所选择的软件生存周期模型之后,就完成了一个完整生存周期的精化.下一个任务是将组织的过程资产应用到将精化的生存周期中,其结果就是项目的软件生存周期过程的实现.组织的过程资产一般包括:l政策;l 标准;l规程;l 已有的SCLPs;l 度量;l 工具;l 方法学,5)软件生存周期过程的监控(1)软件生存周期过程的监查 在项目实施中,必须监查软件生存周期过程的执行情况,以确保软件开发是按规划、高效进行的。以下各任务中形成的数据,有助于过程的监查:进展与进度的跟踪。这一跟踪可以揭示过程的偏离、不期望 的过程范围增大、工具或资源等问题。质量数据趋势的检查。这一检查可以用于确定软件实现组是 否遵循期望的生存周期过程。,设计、编码和测试计划复审记录和动作的检查。这一检查可以用于确定过程是否产生预期结果。即给出正在实施的过程是否有效?变更要求和测试异常报告趋势的检查。这些检查提供了过程有效程度的深入了解,也能确定配置管理系统的负载是否在可支持的范围内。关键资源的有效使用。有时,这可以检测出计划中存在的隐性偏离。与项目组成员的交谈。与项目组成员进行正式或者非正式的对话,了解过程的运作情况。他们的观点,一旦由描述的客观数据所支持,那么对发现过程问题、寻找过程改善的机会是非常有价值的。,而且,还必须定期监控以上信息源.由于生存周期的监控必然带来额外的进度评估,因此应按基本的周期对进度进行修正。一个一般的原则是,在一个特定的生存周期过程中,每当进展到其进度的10%或者20,就应该进行一次检查。例如,对一个中等规模的产品来说,设计过程进行到20、40和60时,都要对已完成的工作进行检查。原因是如果完成的工作少于20,不可能产生足够的有效数据,但是如果超过了60,一旦发现问题,改变设计过程已经太晚了,以至于会产生灾难性错误。,利用以上信息,软件程序管理者和过程设计师应能确定是否需要改变生存周期和所要求的过程。作出这一决定必须非常谨慎,因为对生命周期过程的一个不合适的改变,可能会打乱整个工作程序,影响技术工作和人员情绪。另一方面,实现一个合理的改变,只有当项目组成员都认识到这一需要,才能最终有助于开发工作。,(2)生存周期过程改变所产生影响的评估一旦监控活动的过程发现一个生存周期过程并没有按预期实施,那么软件程序管理人员和过程设计师就要对可能采取的措施进行评估,这些措施包括:l什么也不做。当改变的负面影响可能超过带来的好处时。l强化过程。如果只因初始培训不充分或组织制度不够严格,导致过程没 有按预期实施,那么这是一个正确的举措。,l 调整过程。如果过程需要进行少量调整(如,核对表的修订或同级复 审过程的调整),就可以修改过程,并调整员工的培训。l过程替换。如果一个过程根本就存在缺陷(如,只集成了系统的10,但用于监控性能的工具集却消耗了90的处理资源),那么 必须替换这一过程。l以上措施的某一组合。,按以下几方面,评估以上进行的过程改变所造成的影响。l所要求的“返工”在有的情况下,一个改变只影响当前进行的过程步。而很多时候,可能需要重新实施该过程前面一些阶段的工作。无论是哪一种情况,都要考虑一个过程改变对进度和成本的影响。l资源需求进行过程改变可能会增加或者减少资源的需求,包括人员、硬件和工具。必须考虑由生存周期过程的改变所产生的全部成本,以及为获得这些资源所需要的时间。,l实施时间 如果一个项目采用演化或螺旋生存周期模型,并在前面一个迭代周期中已标识了过程改变的要求,那么最好把这一改变推迟到下一个迭代周期。这样就可以用有序的方式进行这一改变。l对项目和用户的益处。建立并实施生存周期过程的理由,是为了向用户交付一个产品,这是占主导的一个考虑,因此对那些与项目和用户益处相关的因素,都要进行评估。,l员工情绪 进行一个过程改变,特别是进行一个重要的改变,可能会对员工的情绪产生负面影响。当这一改变涉及到组织里那些有威信的人,包括员工、管理人员和专家,其影响尤其严重。虽然这些顾虑不应该停止项目管理人员和结构设计师进行正确的改变,但是需要认真地考虑实现这一改变的时间。如果向项目人员(他们可能是首先发现问题的员工)进行了正确、合适的说明,那么才能真正地实现这一改变。,(3)改变的实施对项目进展中的一个过程进行一个改变,必须十分谨慎。依据进行改变的时刻,要求实施以下全部或一部分工作:l围绕一个初期的主要问题,与客户进行讨论;l向项目有关成员宣布改变的需求。这是一件相当关键的事情,必须是客观的、理性的。受到一些抱怨不是什么问题,关键的是以最低成本建造一个最好的产品。,l规划改变。规划改变的工作包括:确定过程改变的时间、需要的资源和培训:可能需要返工的项;对软件规划文档的任何改变,(过程、进度);涉及到的合同或业务需求(必须与客户协商);标识并冻结所涉及的配置项;规划必要返工;标识不需要改变的、可以继续工作的范围。这一改变的进度必须包括获得和实现所需要的资源和培训的时间和活动。对一个增加的成分或改变的成分,.必须确定要做哪个(以上描述的)监督活动的过程。l实现改变。执行这一改变计划,继续关注并保持与项目成员的交流。,课后阅读思考,阅读教材的 2.2节。给出瀑布模型适应的情况,并说出理由?给出演化模型适应的情况,并说出理由?,