瀑布模型
描述:每个软件过程顺序衔接、一次性通过,最常用。
优点:由文档和风险驱动,利于提高大型项目开发的质量和效率。
缺点:建设周期长、风险大、难以满足用户需求。
适用场合:需求明确且很少变更的项目,如二次开发或升级型项目。
螺旋模型
描述:以原型为基础沿螺线旋转、每转一圈都经过计划/风险分析/实施/评估等过程且得到相应新版本、经过若干次螺旋上升得到最终版本。
优点:由文档和风险驱动,利于提高大型项目开发的质量和效率。
缺点:建设周期长、风险大、难以满足用户需求。
适用场合:需求经常变化的大型复杂系统。
增量模型:
描述:采用随时间进展而交错的线性序列、每个序列产生一个可发布的增量、每个增量产生一个可操作的产品、第一个增量是核心产品。
优点:开始时不用投入大量人力资源、可以先推出核心产品以稳定用户、可以有计划的管理技术风险。
缺点:需要开放式体系结构,可能会产生设计效果差、开发效率低的情况。
适用场合:需求经常发生改变的软件开发过程。
快速原型模型
描述:快速构建可运行的软件模型,以便理解和澄清问题,进一步细化需求,在新获取需求基础上进行系统开发。
优点:避免由于用户需求不明带来的开发风险。
缺点:快速建立的模型加上连续的修改可能造成产品质量低下。
适用场合:用户需求模糊不明的情况下。
迭代模型
描述:一次迭代过程包括了所有软件开发流程、每一次迭代均产生一个可发布的产品、该产品为最终产品的一个子集。
适用于事先不能完整定义产品的所有需求,计划多期开发的项目。
喷泉模型
描述:以用户需求为动力、以对象为驱动的模型,支持软件复用及多项开发活动的集成,主要支持面向对象的开发方法。
V模型
描述:以测试为中心,为软件生命周期的每一个阶段指定了相应的测试级别:编码阶段<—>单元测试;详细设计阶段<—>集成测试;概要设计阶段<—>系统测试;需求分析阶段<—>验收测试。
敏捷方法(最著名的是极限编程:XP)
一种轻量、高效、低风险、更强调团队协作和沟通的开发方式,适合于中小型开发团队,客户需求模糊或多变。
统一过程
即UP/RUP,基于构件,具有用例驱动、以基本架构为中心、迭代和增量的特点;在时间上分为四个连续的阶段,即初始阶段、细化阶段、构建阶段和交付阶段。
常用开发模型总结归纳:
瀑布模型(生命周期法,是生命周期法中最常用的开发模型),它将开发的过程分成软件计划、需求分析、软件设计、程序编码、软件测试和运行维护6个阶段,规定了它们自上而下,适用于大型软件开发过程。
变换模型(演化模型)是在快速开发一个原型的基础上,根据用户提出的反馈和建议,对原型进行改进,直到演化成最终软件产品。
螺旋模型:将瀑布模型和变换模型相结合,并增加了风险分析;
喷泉模型:为软件复用和生存周期中多项开发活动的集成提供了支持,是一种面向对象的开发方法;
智能模型:基于知识的软件开发模型,与专家系统结合在一起,是一种基于规则的系统;
V模型:以测试为中心的开发模型;
增量模型:融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征;它采用随着时间的进展而交错的线性序列。其最大优点是人员分配灵活;
RAD(快速应用开发)模型,是一个增量型的软件开发过程模型,强调极短的开发周期。它是采用基于构件的开发方法。
CBSD(基于构件的开发)模型,是利用模块化方法,将整个系统模块化。整个过程分为需示分析和定义、体系结构设计、构件库的建立、应用软件构建、测试和发布5个阶段。
构件工具常见的有Microsoft的DCOM , Sun的EJB和OMG的CORBA.
原型方法模型,是适用于产品开发的早期阶段需求不确定时采用。其常分为水平原型(功能导航)和垂直原型(实现部分功能,重点在复杂算法的实现)两种
XP方法模型,是一种轻量(敏捷)、高效、低风险、柔性、可预测、科学且充满乐趣的软件开发方式。它由价值观(沟通、简单、反馈、勇气)、原则(小步快走)、实践和行为四个部分组成
RUP(RationalUnified Process)方法模型,是一个统一的软件开发过程,也是一个通用过程框架,能应用于多领域的项目开发,它也是基于构件,使用的建模语言是UML,它有三个特点:用例驱动、以基本架构为中心、迭代和增量。其软件过程在时间上分为四个阶段:初始阶段—细化阶段—-构建阶段—-交付阶段。
软件开发模型对比
软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。
软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目工作的基础
下面对瀑布模型 增量模型 快速原型模型 螺旋模型 喷泉模型做简要分析。
1.瀑布模型
软件过程模型
瀑布模型是经典的软件开发模型,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,每个阶段之间的依赖性强
优点:1)为项目提供了按阶段划分的检查点 2) 当前一阶段完成后,只需要去关注后续阶段
缺点:1) 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;
2) 与用户见面晚,从而增加了开发的风险;
3) 早期的错误可能要等到开发后期的测试阶段才能发现,发现问题越晚代价越高
适用范围:需求很明确的软件开发项目;
在开发时间内需求没有或很少变化;
分析设计人员应对应用领域很熟悉;
低风险项目(对目标、环境很熟悉);
用户使用环境很稳定;
用户除提出需求以外,很少参与开发工作
2.增量模型
增量模型是一种非整体开发的模型,分为两种形式:基于瀑布模型的渐增模型;基于原型的快速原型模型
软件过程模型
增量模型的优点:人员分配灵活,刚开始不用投入大量人力资源。如果核心产品很受欢迎,则可增加人力实现下一个增量客户可以不断地看到所开发的软件,从而降低开发风险
缺点: 1) 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。
2) 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。
软件开发模型对比
快速原型模型又称原型模型,它是增量模型的另一种形式;它是在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。
优点:减少由于软件需求不明确带来的开发风险。
缺点:所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。
3.螺旋模型
软件开发模型对比
螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析,主要分为四个工作步骤:
(1)制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;
(2)风险分析:分析评估所选方案,考虑如何识别和消除风险;
(3)实施工程:实施软件开发和验证;
(4)客户评估:评价开发工作,提出修正建议,制定下一步计划。
优点:1)设计上的灵活性,可以在项目的各个阶段进行变更。
2)以小的分段来构建大型系统,使成本计算变得简单容易。
3)客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。
4)随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。
5)客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品
缺点:1)采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失。
2)过多的迭代次数会增加开发成本,延迟提交时间。
4.喷泉模型
软件开发模型对比
喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。
优点:该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
缺点:由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。