软件开发生命周期模型 瀑布模型、增量模型、原型模型、螺旋模型、喷泉模型总结

在校期间学习过这些模型,现在来复习一下。

瀑布模型/改进的瀑布模型

 虽然瀑布模型仍然存在很多的问题有待解决,但瀑布模型仍然是最基本的和最效的一种可供选择的软件开发生命周期模型.瀑布模型要求软件开发严格按照需求
->分析->设计->编码->测试的阶段进行,每一个阶段都可以定义明确的产出物和验证准则.瀑布模型在每一个阶段完成后都可以
组织相关的评审和验证,只有在评审通过后才能够进入到下一个阶段.

 由于需要对每一个阶段进行验证,瀑布模型要求每一个阶段都有明确的文档产出,对于严格的瀑布模型每一个阶段都不应该重叠,而应该是在评审通过,相关的产出物都已经基线后才能够进入到下一个阶段.
  
 瀑布模型的优点仍然是可以保证整个软件产品较高的质量,保证缺陷能够提前的被发现和解决.采用瀑布模型可以保证系统在整体上的充分把握,使系统具备良好
的扩展性和可维护性.但对于前期需求不明确,而又很难短时间明确清楚的项目则很难很好的利用瀑布模型.另外对于中小型的项目,需求设计和开发人员往往在项
目开始后就会全部投入到项目中,而不是分阶段投入,因此采用瀑布模型会导致项目人力资源过多的闲置的情况,这也是必须要考虑的问题.

 很多人往往会以进度约束而不选择瀑布模型,这往往是一个错误的观点.导致这种情况的一个关键因素往往是概念需求阶段人力不足.因此在概念需求阶段人力能
够得到充分保证的情况下,瀑布模型和迭代模型在开发周期上并不会存在太大的差别.反而是很多项目对于迭代或敏捷模型用不好,为了赶进度在前期需求不明确,
没有经过一个总体的架构设计情况下就开始编码,后期出现大量的返工而严重影响进度.

架构设计是软件开发中一个重要的关注点.因此在RUP中也提及到软件开发要以架构为核心.因
此在架构设计完成后系统会被分为相关的子系统和功能模块.每个功能模块间的接口都可以定义清楚.在这种情况下,当模块B的详细设计做完成后往往就没有必要
等到其它模块的详细设计都要完全作完才开始编码,因此在架构设计完成后可以将系统分为多个模块并行开发,每个模块仍然遵循先设计和编码测试的瀑布模型思
路.这是瀑布模型的一种最重要的改进思路,也可以说这是一种增量开发的模型.

当一个新系统的开发存在多个完全不相关的独立需求的功能开发的时候,这个时候也可以选择将整个开发过程按独立的需求来分为多个小瀑布进行操作.这种方式的最大问题就是没有一个完全总体的设计,架构设计人员无法在洞悉了所有需求后从系统的可扩展性,复用等方面总体规划.

 在项目管理中有一种压缩进度的方法叫赶工,因此瀑布模型的另外改进处就在适当的重叠各个阶段过程,达到资源的有效利用.比如我们通过讨论,会议确定的实现方式就可以开始执导下一个阶段的工作而不一定完全等到相关的交付物文档化出来.

螺旋模型

 首先螺旋模型是遵从瀑布模型的.即需求->架构->设计->开发->测试的路线.螺旋模型最大的价值在于整个开发过程是迭代和风险驱动的.通过将瀑布模型的多个阶段转化到多个迭代过程中,以减少项目的风险.

螺旋模型的每一次迭代都包含了以下六个步骤
  1.决定目标,替代方案和约束
  2.识别和解决项目的风险
  3.评估技术方案和替代解决方案
  4.开发本次迭代的交付物和验证迭代产出的正确性.
  5.计划下一次迭代
  6.提交下一次迭代的步骤和方案.

 螺旋模型实现了随着项目成本投入不断增加,风险逐渐减小.以帮我我们加强项目的管理和跟踪,在每次迭代结束后都需要对产出物进行评估和验证,当发现无法继续进行下去时可以及早的终止项目.

 螺旋模型复杂的地方在于尽责,专心和知识渊博的管理.因为对于每一次迭代我们要制定出清晰的目标,分析出相关的关键风险和计划中可以验证和测试的交付物并不是一件容易的事情.

 螺旋模型的每一次迭代只包含了瀑布模型的某一个或两个阶段.如第二次迭代重点是需求,第三次迭代是总体设计和后续设计开发计划等.因此这是和RUP提倡
的迭代模型是有区别的,RUP的每一次迭代都会包含需求,设计,开发和测试等各个阶段的活动.RUP迭代的目的在于逐步求精而不是仅仅完成瀑布模型某一阶
段的工作.

增量和迭代模型

 增量迭代是RUP统一过程常采用的软件开发生命周期模型.增量和迭代有区别但两者又经常一起使用.所以这里要先解释下增量和迭代的概念.假设现在要开发
A,B,C,D四个大的业务功能,每个功能都需要开发两周的时间.则对于增量方法而言可以将四个功能分为两次增量来完成,第一个增量完成A,B功能,第二
次增量完成C,D功能;而对于迭代开发来将则是分两次迭代来开发,第一次迭代完成A,B,C,D四个基本业务功能但不含复杂的业务逻辑,而第二个功能再逐
渐细化补充完整相关的业务逻辑.在第一个月过去后采用增量开始时候A,B全部开发完成而C,D还一点都没有动;而采用迭代开发的时候A,B,C,D四个的
基础功能都已经完成.

RUP强调的每次迭代都包含了需求,设计和开发,测试等各个过程,而且每次迭代完成后都是一
个可以交付的原型.迭代不是并行,在每次迭代过程中仍然要遵循需求->设计->开发的瀑布过程.迭代周期的长度跟项目的周期和规模有很大的关
系.小型项目可以一周一次迭代,而对于大型项目则可以2-4周一次迭代.如果项目没有一个很好的架构师,很难规划出每次迭代的内容和要到达的目标,验证相
关的交付和产出.因此迭代模型虽然能够很好的满足与用户的交付,需求的变化,但确是一个很难真正用好的模型.
 

就对风险的消除上,增量和迭代模型都能够很好的控制前期的风险并解决.但迭代模型在这方面更有优势.迭代模型更多的可以从总体方面去系统的思考问题,从最早就可以给出相对完善的框架或原型,后期的每次迭代都是针对上次迭代的逐步精化.

 业界比较标准的增量模型往往要求在软件需求规格说明书全部出来后后续的设计开发再进行增量.同时每个增量也可以是独立发布的小版本.由于系统的总体设计
往往对一个系统的架构和可扩展性有重大的影响,因此我们推荐的增量最好是在架构设计完成后再开始进行增量,这样可以更好的保证系统的健壮性和可扩展性.

 原型法

 原型一般都不是单独采用的一种生命周期模型,往往会结合瀑布和增量迭代等方法一起使用.对于螺旋模型就可以理解为瀑布+迭代+原型+风险的一种生命周期
模型.对于迭代开发来讲,每一个迭代周期的产出都可以看做是下个阶段要精化的原型.而对于瀑布模型开发来讲,我们在需求阶段也可以进行界面和操作建模,形
成DEMO后和用户做进一部的需求沟通和确认.

 当你的用户没有信息系统的使用经验,你的系统分析员也没有过多的需求分析和挖掘经验的时候,需求分析和调研过程则更需要是一个启发式的过程.而原型则是
这种很好的启发式方法,可以快速的挖掘用户需求并达成需求理解上的一致.否则即使双方都签字认可的需求往往仍然不是客户真正想要的东西.

 原型可以分为抛弃型的和不抛弃型的.如果原型仅仅是需求阶段方面和用户沟通画的DEMO,则这种原型一般都建议抛弃掉.而对于迭代开发来将,每次迭代的
产出都是可以独立运行和包含基础功能的系统,是后续细化的基础,这类原型一般都不建议抛弃,后期的设计开发也要基于该原型逐渐的进行完善.

 快速和敏捷开发

 我们一般将快速和敏捷开发做为方法论,而很少将其做为一种软件开发生命周期模型.敏捷的目的是减少繁重和不必要的工件的输出,提高效率.而不是要我们去
挑阶段或过程,不是分析设计都还没有做就去做开发.因此对于瀑布,增量迭代或原型我们都可以借鉴敏捷方法论中的一些好的实践,这些实践都是对传统的生命周
期模型很好的补充.对于敏捷方法论在此不再做过多的叙述.

关于选择生命周期模型的最后的总结

  1.在前期需求明确的情况下尽量采用瀑布模型或改进型的瀑布模型.
  2.在用户无信息系统使用经验,需求分析人员技能不足情况下一定要借助原型.
  3.在不确定性因素很多,很多东西前面无法计划情况下尽量采用增量迭代和螺旋模型
  4.在需求不稳定情况下尽量采用增量迭代模型
  5.在资金和成本无法一次到位情况下可以采用增量模型,软件产品分多个版本进行发布
  6.对于完全多个独立功能开发可以在需求阶段就分功能并行,但每个功能内都应该遵循瀑布模型
  7.对于全新系统的开发必须在总体设计完成后再开始增量或并行.
  8.对于编码人员经验较少情况下建议不要采用敏捷或迭代等生命周期模型.
  9.增量,迭代和原型可以综合使用,但每一次增量或迭代都必须有明确的交付和出口准则。

转载自 http://blog.csdn.net/waj89757/article/details/7984134

时间: 2024-10-22 08:28:24

软件开发生命周期模型 瀑布模型、增量模型、原型模型、螺旋模型、喷泉模型总结的相关文章

以软件开发生命周期的过程来说明不同测试的使用情况

此图为软件开发生命周期的模型图,下面以此图为例说明在软件开发生命周期各个阶段所使用的测试类型的异同. 1.在最初的原始计划制定阶段,需要进行文档编写测试. 2.开始参考某些软件原型并编写需求计划时,要进行手工测试来提取原型的优缺点,以及文档编写测试.每一次参考原型和风险分析时都需要进行所说的测试. 3.最终确定需要的开发计划,需要文档编写测试. 4.详细设计阶段:进行数据和数据库完整性测试. 5.编码阶段:依次进行单元测试.集成测试.系统测试,并穿插着功能测试和性能测试. 6.组装测试阶段:进行

软件开发生命周期中测试的使用情况

软件开发的生命周期主要包括以下的阶段: 1.问题定义. 2.可行性研究. 3.需求分析. 4.概要设计. 5.详细设计. 6.编码和单元测试. 7.综合测试. 8.软件维护 以上就是一个软件开发的完整生命周期,能比较明显的看出,到详细设计为止,之前的阶段很少涉及到测试的环节,从编码实现开始,测试就开始贯穿之后的阶段,编码实现中,用的最多的就是单元测试,编码人员或测试人员主要通过一些测试用例来检测编写的代码块是否实现了所需要的功能,但是单元测试中又分为黑盒测试和白盒测试,黑盒测试是不知道内部的详细

软件开发生命周期总结

软件开发生命周期过程 软件开发的标准过程包括六个阶段,而六个阶段需要编写的各类文件达14种之多,在每个阶段需要编写哪些文件,以及这些文件的主要内容见下: 1.可行性与计划研究阶段 可行性研究报告:在可行性研究与计划阶段内,要确定该软件的开发目标和总的要求,要进行可行性分析.投资一收益分析.制订开发计划,并完成应编制的文件. 项目开发计划:编制项目开发计划的目的是用文件的形式,把对于在开发过程中各项工作的负责人员.开发进度. 所需经费预算.所需软.硬件条件等问题作出的安排记载下来,以便根据本计划开

软件开发生命周期及文档

软件开发,同任何事物一样要经历孕育.诞生.成长.成熟.结束等阶段,称之为软件开发生命周期. 通常,软件开发生命周期包括可行性分析与项目开发计划.需求分析.设计.编码.测试.发布维护等. 1)可行性分析与项目开发计划 这个阶段主要确定软件开发的目标及其可行性,明确要解决的问题及解决办法,以及解决问题需要的费用.资源.时间.要进行问题定义.可行性分析,制定项目开发计划. 该阶段产生的文档主要有可行性分析报告(一般很少需要)和项目开发计划. 2)需求分析 需求分析是明确软件系统要做什么,确定软件系统的

软件工程—软件开发生命周期

正如任何事物一样,软件也有其孕育.诞生.成长.成熟以及衰亡的生命过程,一般称其为“软件生命周期”.把整个软件生存周期划分为若干阶段,使得每个阶段有明确的任务,使规模大,结构复杂和管理复杂的软件开发变的容易控制和管理.通常,软件生存周期包括: 一,问题定义.要求系统分析员与用户进行交流,弄清“用户需要计算及解决什么问题”然后提出关于“系统目标与范围的说明”,提交用户审查和确认. 二,可行性研究.一方面在于把待开发的系统的目标以明确的语言描述出来,另一方面从经济.技术.法律等多方面进行可行性分析.

以软件开发生命周期来说明不同测试的使用情况

在软件生命周期的编码和单元测试阶段:用单元测试的方法完成“写出正确的容易理解.容易维护的程序模块”的任务.在综合测试阶段,使用的最基本的测试是集成测试和验收测试,来完成“通过各种类型的测试(及相应的调试)使软件达到预定的要求”的任务,必要时在这一阶段,还可以在通过现场测试或平行运动等方法对目标系统进行进一步的测试检验.

以软件开发生命周期来说明各种测试的使用情况

说到软件生命周期,我们首先来温习一下.一个软件产品或软件系统也要经历孕育.诞生.成长.成熟.衰亡等阶段,一般称为软件生存周期(软件生命周期)通常,软件生存周期包括:1.问题定义:2.可行性研究:3.需求分析:4.总体合计:5.详细设计:6.编码和单元测试:7.综合测试. 接下来,在了解一下软件测试.从软件测试的阶段分类,测试可分为4个主要阶段:单元测试.集成测试.系统测试.验收测试.这是一种由小到大,循序渐进的测试过程. 从基于功能的角度: 1.单元测试 这个步骤主要是开发者针对开发过程中,程序

软件开发生命周期-酒店销售管理系统实例---1.数据库设计

软件项目开发模式 一  螺旋开发模式 适合于项目前期部分需求不确定的情况,对于每一个模块进行一个个开发: 分析.设计.编码.测试.上线. 好处:降低软件开发的风险(产品尽量满足用户需求) 二  瀑布模式 先进行所有模块的需求分析,当分析结束后,才进入项目下一个阶段,即设计.编码.测试.上线 更容易项目把控,项目质量有控制. "餐馆王" 系统功能分析 1.餐桌管理 2.菜类别管理(菜系) 3.菜信息(菜品) 4.订单管理 详细分析 1.后台录入的餐桌,要在前台显示:且只显示未预订 2.后

软件开发生命周期来说明不同的测试的使用情况

1.编码阶段:单元测试 单元测试是对软件中的基本组成单位进行测试,检验其函数的正确性.其测试周期贯穿整个开发期间. 2.合并功能模块:集成测试 集成测试在基本功能单元模块完成时,进行模块的整合时需要进行一定的测试,检测所提供的接口是否正确. 3.完成时:系统测试 系统测试是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性以及性能等是否满足各系统的需要. 4:.验收阶段:验收测试: 验收测试时在软件完成交付用户使用时有用户完成的测试