瀑布模型的开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好“返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。瀑布模型适用于需求比较稳定,很少需要变更的项目。
瀑布模型核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即瀑布模型采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,如图1-4-1所示,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
螺旋模型
它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。
图1-4-4螺旋模型
螺旋模型采用一种周期性的方法来进行系统开发。该模型是快速原型法,以进化的开发方式为中心,螺旋模型沿着螺线旋转,在四个象限上分别表达了四个方面的活动,即:
?制定计划──确定软件目标,选定实施方案,弄清项目开发的限制条件。
?风险分析──分析所选方案,考虑如何识别和消除风险。
?实施工程──实施软件开发。
?客户评估──评价开发工作,提出修正建议。
螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解,继而做出应有的反应,因此特别适用于庞大、复杂并具有高风险的系统。
喷泉模型
喷泉模型如图所示,是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。
V模型示意图
V模型的左边下降的是开发过程各阶段,与此相对应的是右边上升的部分,即各测试过程的各个阶段。在不同的组织中对测试阶段的命名可能有所不同。
在模型图中的开发阶段一侧,先从定义业务需求、需求确认或测试计划开始,然后要把这些需求转换到概要设计、概要设计的验证及测试计划,从概要设计进一步分解到详细设计、详细设计的验证及测试计划,最后进行开发,得到程序代码和代码测试计划。接着就是测试执行阶段一侧,执行先从单元测试开始,然后是集成测试、系统测试和验收测试。
V模型的价值在于它非常明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发各阶段的对应关系。(1)单元测试的主要目的是针对编码过程中可能存在的各种错误,例如用户输入验证过程中的边界值的错误。(2)集成测试主要目的是针对详细设计中可能存在的问题,尤其是检查各单元与其他程序部分之间的接口上可能存在的错误。(3)系统测试主要针对概要设计,检查系统作为一个整体是否有效地得到运行,例如在产品设置中是否能达到预期的高性能。(4)验收测试通常由业务专家或用户进行,以确认产品能真正符合用户业务上的需要。
在不同的开发阶段,会出现不同类型的缺陷和错误,所以需要不同的测试技术和方法来发现这些缺陷。
2.演化模型
演化模型如图1-4-2所示,是一种全局的软件(或产品)生存周期模型,属于迭代开发风范。该模型可以表示为:第一次迭代(需求-->设计-->实现-->测试-->集成)-->反馈-->第二次迭代(需求-->设计-->实现-->测试-->集成)-->反馈-->……。实际上,这个模型可看作是重复执行的多个“瀑布模型”。
图1-4-2演化模型
演化模型根据用户的基本需求,通过快速分析构造出该软件的一个初始可运行版本,这个初始的软件通常称之为原型,然后根据用户在使用原型的过程中提出的意见和建议对原型进行改进,获得原型的新版本。重复这一过程,最终可得到令用户满意的软件产品。采用演化模型的开发过程,实际上就是从初始的原型逐步演化成最终软件产品的过程。演化模型特别适用于对软件需求缺乏准确认识的情况。
3.增量模型
图1-4-3增量模型
增量模型与原型实现模型和其他演化方法一样,本质上是迭代的,但是更强调每一个增量均发布一个可操作产品。增量模型的特点是引进了增量包的概念,无须等到所有需求都出来,只要某个需求的增量包出来即可进行开发。虽然某个增量包可能还需要进一步适应客户的需求并且更改,但只要这个增量包足够小,其影响对整个项目来说是可以承受的。
4.螺旋模型
螺旋模型如图1-4-4所示,它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。
5.喷泉模型
喷泉模型如图1-4-5所示,是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。
图1-4-5喷泉模型
6.构件组装模型
构件组装模型融合了螺旋模型的许多特征。它本质上是演化的支持软件开发的迭代方法。但是,构件组装模型是利用预先包装好的软件构件(有时称为“类”)来构造应用程序的。
7.V模型
V模型如图1-4-6所示,它是瀑布模型的变种,它说明测试活动是如何与分析和设计相联系的。在这种模型的测试过程中,首先,进行可行性研究需求定义,然后以书面的形式对需求进行描述,产生需求规格说明书。之后,开发人员根据需求规格说明书来对软件进行概要设计,测试人员根据需求规格说明书设计出系统测试用例。概要设计之后,开发人员根据概要设计对软件进行详细设计,测试人员根据概要设计设计出集成测试用例。详细设计之后,开发人员根据详细设计进行编码,测试人员根据详细设计设计出单元测试用例。编码完成之后,测试人员根据单元测试用例对设定的软件的测试单元进行测试,单元测试完成之后,进行集成测试,然后进行系统测试,最后进行验收测试。
图1-4-6V模型
8.RUP
RUP(RationalUnifiedProcess,统一软件开发过程)是一个面向对象且基于网络的程序开发方法论。
根据Rational(RationalRose和统一建模语言的开发者的说法,RUP好像一个在线的指导者,它可以为所有方面和层次的程序开发提供指导方针,模版以及事例支持。RUP和类似的产品,例如面向对象的软件过程,以及OPENProcess都是理解性的软件工程工具,把开发中面向过程的方面(例如定义的阶段,技术和实践)和其他开发的组件(例如文档,模型,手册以及代码等等)整合在一个统一的框架内。
细化阶段的目标是分析问题领域,建立健全的体系结构基础,编制项目计划,淘汰项目中最高风险的元素。为了达到该目的,必须在理解整个系统的基础上,对体系结构作出决策,包括其范围、主要功能和诸如性能等非功能需求。同时为项目建立支持环境,包括创建开发案例,创建模板、准则并准备工具。细化阶段结束时第二个重要的里程碑:生命周期结构里程碑。
在构建阶段,所有剩余的构件和应用程序功能被开发并集成为产品,所有的功能被详细测试。从某种意义上说,构建阶段是一个制造过程,其重点放在管理资源及控制运作以优化成本、进度和质量。构建阶段结束时是第三个重要的里程碑:初始功能里程碑,此时的产品版本也常被称为“beta”版。
交付阶段的重点是确保软件对最终用户是可用的。交付阶段可以跨越几次迭代,包括为发布做准备的产品测试,基于用户反馈的少量的调整。在生命周期的这一点上,用户反馈应主要集中在产品调整,设置、安装和可用性问题,所有主要的结构问题应该已经在项目生命周期的早期阶段解决了。在交付阶段的终点是第四个里程碑:产品发布里程碑。