软件开发模型

在生活中,人们处理问题经常采用建模的方法,在软件工程中,人们通过建立抽象的软件开发模型,把软件生命周期中各个活动或步骤安排到一个框架中,将软件开发的全过程清晰直观的表达出来。可以说软件开发模型是软件工程思想的具体化,它反映了软件在其生命周期中各个阶段之间的衔接和过渡以及软件开发的组织方式,是人们在软件开发实践中总结出来的软件开发方法和步骤。

软件开发模型的内在特征有以下4点

  1. 软件开发模型描述了主要的开发阶段;
  2. 软件开发模型定义了每个阶段要完成的主要任务和活动;
  3. 软件开发模型规范了每个阶段的输入和输出;
  4. 软件开发模型提供了一个框架,把必要的活动映射到这个框架中。

如今,已经有 50 多种公认的 SDLC 模型。它们都不是完美的,每一个都给特定的软件开发项目或团队带来了有利的方面和不利的方面。今天,我们将讨论业内最重要和最受欢迎的 7 种 SDLC 方法:

常见的软件开发模型有很多种,这里主要介绍瀑布模型,快速原型模型,增量模型,螺旋模型,喷泉模型,基于组件的开发模型,统一软件开发过程模型以及敏捷模型与极限编程。

目录

软件开发模型

一、瀑布模型

二、快速原型模型

三、增量模型

增量模型的特点

增量模型的优缺点

四、螺旋模型

螺旋模型的特点

螺旋模型的优缺点

五、喷泉模型

喷泉模型的优缺点

六、基于组件的开发模型

基于组件的开发模型的优缺点

1、基于组件的开发模型的优点

2、基于组件的开发模型缺点

七、统一软件开发过程模型

八、敏捷模型与极限编程

附:各种软件过程模型的特点


一、瀑布模型

瀑布模型是20世纪80年代之前最受推崇的软件开发模型。它是一种线性的开发模型,具有不可回溯性。

概念:瀑布模型是最早出现的软件开发模型,在软件工程中占有重要的地位,它提供了软件开发的基本框架。其过程是从上一项活动接收该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容给出该项活动的工作成果,并作为输出传给下一项活动。同时评审该项活动的实施,若确认,则继续下一项活动;否则返回前面,甚至更前面的活动。对于经常变化的项目而言,瀑布模型毫无价值。

优点:过程模型简单,执行容易

缺点:无法适应变更

适用于具有以下特征的软件开发项目

  1. 在软件开发的过程中,需求不发生或很少发生变化,并且开发人员可以一次性获取到全部需求。否则,由于瀑布模型较差的可回塑性,后续阶段中,需求经常性变更需要付出高昂的代价。
  2. 软件开发人员具有丰富的经验,对软件应用领域很熟悉。
  3. 软件项目的风险较低,瀑布模型不具有完善的风险控制机制。

二、快速原型模型

快速原型的基本思想是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上使用它,通过实践来了解目标系统的概貌。通常用户使用原型系统之后,会提出许多修改意见,开发人员按照用户的修改意见,快速修改原型系统,然后再次请用户试用,反反复复的改进,知道系统满足用户需求。
快速原型是利用原型辅助软件开发的一种新思想。经过简单快速分析,快速实现一个原型,用户与开发者在试用原型过程中加强通信与反馈,通过反复评价和改进原型,减少误解,弥补漏洞,适应变化,最终提高软件质量。

优点:克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险。

这种模型适合预先不能确切定义需求的软件系统的开发。

缺点:所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。

使用这个模型的前提是要有一个展示性的产品原型,因此在一定程度上可能会限制开发人员的创新。

快速原型模型适用于具有以下特征的软件开发项目

  1. 已有产品或产品的原型,只需客户化的工程项目
  2. 简单而熟悉的行业或领域
  3. 有快速原型开发工具
  4. 进行产品移植或升级

三、增量模型

增量模型融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。当使用增量模型时,第1个增量往往是核心的产品,即第1个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。采用增量模型的软件过程如下图所示:

增量模型与原型实现模型和其他演化方法一样,本质上是迭代的,但与原型实现不一样的是其强调每一个增量均发布一个可操作产品。早期的增量是最终产品的“可拆卸”版本,但提供了为用户服务的功能,并且为用户提供了评估的平台。

增量模型的特点

  增量模型的特点是引进了增量包的概念,无须等到所有需求都出来,只要某个需求的增量包出来即可进行开发。虽然某个增量包可能还需要进一步适应客户的需求并且更改,但只要这个增量包足够小,其影响对整个项目来说是可以承受的。

增量模型的优缺点

  1、增量模型的优点

  采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源。如果核心产品很受欢迎,则可增加人力实现下一个增量。当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径。这样即可先发布部分功能给客户,对客户起到镇静剂的作用。此外,增量能够有计划地管理技术风险。

  2、增量模型的缺点

  增量模型存在以下缺陷:

  1) 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。

  2) 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。

  3)如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程。


四、螺旋模型

 1988年,巴利·玻姆Barry Boehm正式发表了软件系统开发的“螺旋模型”,它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。

 螺旋模型采用一种周期性的方法来进行系统开发。这会导致开发出众多的中间版本。使用它,项目经理在早期就能够为客户实证某些概念。该模型是快速原型法,以进化的开发方式为中心,在每个项目阶段使用瀑布模型法。这种模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。软件开发过程每迭代一次,软件开发又前进一个层次。采用螺旋模型的软件过程如下图所示:

螺旋模型基本做法是在“瀑布模型”的每一个开发阶段前引入一个非常严格的风险识别、风险分析和风险控制,它把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。

螺旋模型的特点

螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解,继而做出应有的反应,因此特别适用于庞大、复杂并具有高风险的系统。对于这些系统,风险是软件开发不可忽视且潜在的不利因素,它可能在不同程度上损害软件开发过程,影响软件产品的质量。减小软件风险的目标是在造成危害之前,及时对风险进行识别及分析,决定采取何种对策,进而消除或减少风险的损害。

螺旋模型的优缺点

  1、螺旋模型的优势包括:

  1)设计上的灵活性,可以在项目的各个阶段进行变更。

  2)以小的分段来构建大型系统,使成本计算变得简单容易。

  3)客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。

  4)随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。

  5)客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。

  螺旋模型很大程度上是一种风险驱动的方法体系,因为在每个阶段之前及经常发生的循环之前,都必须首先进行风险评估。在实践中,螺旋法技术和流程变得更为简单。迭代方法体系更倾向于按照开发/设计人员的方式工作,而不是项目经理的方式。螺旋模型中存在众多变量,并且在将来会有更大幅度的增长,该方法体系正良好运作着。下表是螺旋法能够解决的各种问题:

经常遇到的问题螺旋模型的解决方案
用户需求不够充分允许并鼓励用户反馈信息
沟通不明在项目早期就消除严重的曲解
刚性的体系(Overwhelming architectures)开发首先关注重要的业务和问题
主观臆断通过测试和质量保证,作出客观的评估
潜在的不一致在项目早期就发现不一致问题
糟糕的测试和质量保证从第一次迭代就开始测试
采用瀑布法开发在早期就找出并关注风险

  2、但是,螺旋模型并不是比其他模型拥有绝对优越,事实上,这种模型也有其自身的如下缺点。

  1)采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失。

  2)过多的迭代次数会增加开发成本,延迟提交时间。


五、喷泉模型

喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。该模型认为软件开发过程自下而上周期的各阶段是相互重叠和多次反复的,就像水喷上去又可以落下来,类似一个喷泉。各个开发阶段没有特定的次序要求,并且可以交互进行,可以在某个开发阶段中随时补充其他任何开发阶段中的遗漏。采用喷泉模型的软件过程如下图所示:

喷泉模型主要用于面向对象的软件项目,软件的某个部分通常被重复多次,相关对象在每次迭代中随之加入渐进的软件成分。各活动之间无明显边界,例如设计和实现之间没有明显的边界,这也称为“喷泉模型的无间隙性”。由于对象概念的引入,表达分析、设计及实现等活动只用对象类和关系,从而可以较容易地实现活动的迭代和无间隙。

喷泉模型的优缺点

  1、喷泉模型的优点

  喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。

  2、喷泉模型的缺点

  由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。


六、基于组件的开发模型

基于组件开发方法的需求分析和系统验证与其他过程类似,不同之处在于中间的几个阶段。在需求确定后,开发人员会搜寻可供使用的组件,并分析得到的组件。通常没有刚好满足要求的组件,在分析组件信息基础。开发人员可能调整需求以适应组件或者修改现有组件以适应需求。所选的组件可能是从市场上采购或从旧组件中提炼出来的,也可能是新开发的。选完组件后,开发人员要依据所选组件设计系统架构或者复用已有的架构。最后,将所有组件集成起来并完成测试工作。

基于组件的开发模型的优缺点

1、基于组件的开发模型的优点

基于组件的开发方法可以减少待开发软件数量,减低软件成本,提高软件质量,相对其他过程具有明显的优势。

2、基于组件的开发模型缺点

然而,该方法的使用也受到一些因素的制约。为适应组件,需求的修改通常是不可避免的,而这种修改有可能导致系统不符合用户的需要。此外,系统的进化无法控制,因为可复用组件的新版本不一定是出开发机构控制的。


七、统一软件开发过程模型

统一软件开发过程(RUP)又称为统一软件过程,是一个面向对象且基于网络的程序开发方法论。根据Rational(Rational Rose和统一建模语言的开发者)的说法,好像一个在线的指导者,它可以为所有方面和层次的程序开发提供指导方针,模版以及事例支持。统一软件开发过程和类似的产品,如面向对象的软件过程(OOSP),以及OPEN Process都是理解性的软件工程工具,把开发中面向过程的方面(例如定义的阶段,技术和实践)和其他开发的组件(例如文档,模型,手册以及代码等等)整合在一个统一的框架内。


八、敏捷模型与极限编程


附:各种软件过程模型的特点

模型名称技术特点适用范围
瀑布模型简单,分阶段,阶段间存在因果关系,

各个阶段完成后都有评审,允许反馈,不支持

用户参与,要求预先确定需求

需求易于完善定义且不易变更的软件系统
快速原型模型不要求需求预先完备定义,支持用户参与,

支持需求的渐进式完善和确认,能够适应用户需求的变化

需求复杂、难以确定、动态变化的软件系统
增量模型软件产品是被增量式地一块块开发的,

允许开发活动并行和重叠

技术风险较大、用户需求较为稳定的软件系统
迭代模型不要求一次性地开发出完整的软件系统,将软件

开发视为一个逐步获取用广需求、完善软件产品的过程

需求难以确定、不断变更的软件系统
螺旋模型结合瀑布模型、快速原型模型和迭代模

型的思想,并引进了风险分析活动

需求难以获取和确定、软件开发风险较大的软件系统