瀑布模型/改进的瀑布模型
虽然瀑布模型仍然存在很多的问题有待解决,但瀑布模型仍然是最展本的和最效的•种可供选择的软件开发生命周期模型.瀑布模型要求软件开发严格按照需求-〉分析-〉设计・〉编码-> 测试的阶段进行,每-个阶段都可以定义明确的产出物和验证准则.瀑布模型在每•个阶段完成后都可以组织相关的评审和验证,只有在评审通过后才能够进入到下-个阶段.
由于需要对每•个阶段进行验证,瀑布模型要求每•个阶段都有明确的文档产出,对于严格的瀑布模型每•个阶段都不应该重叠,而应该是在评审通过,相关的产出物都己经基线后才能够进入到下•个阶段.
瀑布模型的优点仍然是可以保证整个软件产品较高的质量,保证缺陷能够捉前的被发现和解决. 采用瀑布模型可以保证系统在整体上的充分把握,使系统具备良好的扩展性和可维护性•但对于前期需求不明确,而又很难短时间明确淸楚的项目则很难很好的利用瀑布模型.另外对于中小型的项目,需求设计和开发人员往往在项目开始后就会全部投入到项目中,而不是分阶段投入,因此采用瀑布模型会导致项目人力资源过多的闲置的情况,这也是必须要考虑的问题.
很多人往往会以进度约束而不选择瀑布模型,这往往是•个错误的观点.导致这种情况的•个关键因素往往是概念需求阶段人力不足.冈此在概念需求阶段人力能够得到充分保证的情况下,瀑布模型和迭代模型在开发周期上并不会存在太人的差别.反而是很多项目对于迭代或嫩捷模型用不好,为了赶进度在前期需求不明确,没有经过•个总体的架构设计情况下就开始编码,后期出现大量的返工而严重影响进度.
架构设计是软件开发中•个重要的关注点.因此在RUP中也捉及到软件开发要以架构为核心.因此在架构设计完成后系统会彼分为相关的f•系统和功能模块.每个功能模块间的接口都可以定义淸楚.在这种情况下,当模块B的详细设计做完成后往往就没有必妥等到其它模块的详细设计都妥完全作完才开始编码,冈此在架构设计完成后可以将系统分为多个模块并行开发,每个模块仍然遵循先设计和编码测试的瀑布模型思路.这是瀑布模型的•种最重要的改进思路,也可以说这是•种增量开发的模型.
当•个新系统的开发存在多个完全不相关的独立需求的功能开发的时候,这个时候也可以选择将 整个开发过程按独立的需求来分为多个小瀑布进行操作.这种方式的最人问题就是没有•个完全 总体的设计,架构设计人员无法在洞悉了所有需求后从系统的可扩展性,复用等方而总体规划.
在项目管理中有•种压缩进度的方法叫赶工,因此瀑布模型的另外改进处就在适当的重叠各个阶 段过程,达到资源的有效利用.比如我们通过讨论,会议确定的实现方式就可以开始执导下•个阶 段的工作而不•定完全等到相关的交付物文档化出来.
螺旋模型
首先螺旋模型是遵从瀑布模型的•即需求・> 架构・> 设计・> 开发-〉测试的路线•螺旋模型最人的价
值在于整个开发过程是迭代和风险驱动的•通过将瀑布模型的多个阶段转化到参个迭代过程中, 以减少项目的风险.
螺旋模型的每•次迭代都包含了以下六个步骤
制定计划
决定目标 方
案和限制
累计 成本 客户评估
凤险分祈 评价方案 识别凤险 消除凤险
风险分析 原型*;原型"原型2 ir
详细设计
实施工程 开
发.验证 下1产品
提交线 设计确认
与验证
品设计
风险分析
1•决定目标,替代方案和约束
2.识别和解决项目的风险
3.评估技术方案和替代解决方案
4.开发本次迭代的交付物和验证迭代产出的正确性.
5.计划下•次迭代
6.提交下•次迭代的步骤和方案.
螺旋模型实现了随着项目成本投入不断增加,风险逐渐减小.以帮我我们加强项目的管理和跟踪, 在每次迭代结束后都需要对产出物进行评估和验证,当发现无法继续进行下去时可以及早的终止项目.
螺旋模型复杂的地方在于尽资,专心和知识渊博的管理.因为对于每•次迭代我们要制定出清晰的目标,分析出相关的关键风险和计划中可以验证和测试的交付物并不是•件容易的事情. 螺旋模型的每•次迭代只包含了瀑布模型的某•个或两个阶段.如第二次迭代重点是需求,第三次迭代是总体设计和后续设计开发计划等.因此这是和RUP提倡的迭代模型是有区别的,RUP的每
•次迭代都会包含需求,设计,开发和测试等各个阶段的活动・Rl;P迭代的目的在于逐步求精而不是仅仅完成瀑布模型某一阶段的工作.
增量和迭代模型
增量迭代是RUP统•过程常采用的软件开发生命周期模型.增量和迭代有区别但两者又经常•起使用.所以这里要先解释下增量和迭代的槪念•假设现在要开发A, B, C, D四个人的业务功能,每个功能都需要开发两周的时间.则对于增量方法而言可以将四个功能分为两次增虽来完成,第•个增量完成A,B功能,第二次增量完成C,D功能;而对于迭代开发来将则是分两次迭代来开发,第- 次迭代完成A, B, C, D四个基本业务功能但不含复朵的业务逻辑,而第二个功能再逐渐细化补充完整相关的业务逻辑.在第•个月过去后采用增量开始时候扎B全部开发完成而C,D还•点都没有动;而釆用迭代开发的时候A, B, C, D四个的基础功能都已经完成. RUP强调的每次迭代都包含了需求,设计和开发,测试等各个过程,而且每次迭代完成后都是•个可以交付的原型.迭代不是并行,在每次迭代过程中仍然耍遵循需求-〉设计->开发的瀑布过程.迭代周期的长度跟项目的周期和规模有很人的关系.小型项目可以•周•次迭代,而对于人型项目则可以2-4周•次迭代.如果项目没有-个很好的架构师,很难规划出每次迭代的内容和要到达的目标,验证相关的交付和产出.因此迭代模型虽然能够很好的满足与用户的交付,需求的变化,但确是•个很难真正用好的模型.
Organization
along
Content
就对风险的消除
上,增量和迭代模型都能够很好
的控制前期的风险并解决.但迭
代模型在这方而 更有优势•迭代
模型更参的可以
从总体力面去系统的思考问题,从最早就可以给出相对完善的框 架或原型,后期的每次迭代都是针对上次迭代的逐步秸化.
业界比较标准的增量模型往往要求在软件需求规格说明书全部出来后后续的设计开发再进行增 量.同时每个增竜也可以是独立发布的小版本•由于系统的总体设计往往对-个系统的架构和可 扩展性有重人的影响,因此我们推荐的增量最好是在架构设计完成后再开始进行增虽,这样可以 更好的保证系统的健壮性和可扩展性. 原型法
原型•般都不是单独采用的•种生命周期模型,往往会结合瀑布和增量迭代等方法•起使用•对 于螺旋模型就可以理解为瀑布+迭代+原型+风险的-种生命周期模型•对于迭代开发来讲,每•个 迭代周期的产出都可以看做是下个阶段要精化的原型.而对于瀑布模型开发来讲,我们在需求阶 段也可以进行界面和操作建模,形成DEMO 后和用户做进•部的需求沟通和确认.
当你的用户没有信息系统的使用经验,你的系统分析员也没有过多的需求分析和挖掘经验的时候, 需求分析和调研过程则更需要是•个启发式的过程.而原型则是这种很好的启发式方法,可以快 速的挖掘用户需求并达成需求理解上的•致.否则即使双力都签字认可的需求往往仍然不是客户 真正想要的东西.
原型可以分为抛弃型的和不抛弃型的.如果原型仅仅是需求阶段方面和用户沟通画的DEMO,则这 种原型•般都建议抛弃掉.而对于迭代开发来将,每次迭代的产出都是可以独立运行和包含基础 功能的系统,是后续细化的基础,这类原型•般都不建议抛弃,后期的设计开发也要基于该原型逐 渐的进行完善.
快速和敏捷开发
我们•般将快速和敬捷开发做为方法论,而很少将其做为•种软件开发生命周期模型.敬捷的目 的是减少繁重和不必耍的工件的输出,捉高效率.而不是妥我们去挑阶段或过程,不是分析设计都 还没有做就去做开发.因此对于瀑布,增量迭代或原型我们都可以借鉴敬捷方法论中的•些好的 实践,这些实践都是对传统的生命周期模型很好的补充.对于敏捷方法论在此不再做过多的叙述.
关于选择生命周期模型的最后的总结
1•在前期需求明确的情况下尽量采用瀑布模型或改进型的瀑布模型.
2. 在用户无信息系统使用经验,需求分析人员技能不足情况下•定要借助原型.
3. 在不确定性因素很多,很多东西前面无法计划情况下尽量采用增量迭代和螺旋模型
4. 在需求不稳定情况下尽量采用增量迭代模型
5. 在资金和成本无法•次到位惜况下可以采用增量模型,软件产品分多个版本进行发布
6. 对于完全多个独立功能开发可以在需求阶段就分功能并行,但每个功能内都应该遵循瀑布模型
Organization along Time
Disciplines
iness En gingering
Requirements Anal/sis
and Design Imp lomo n
la lion
Test Deployment Configuration and Change
Manngement Project Management Environmenl
▼
7.对于全新系统的开发必须在总体设计完成后再开始增量或并行.
&对于编码人员经验较少惜况下建议不要采用敬捷或迭代等生命周期模型.
9.增量,迭代和原型可以综合使用,但每•次增量或迭代都必须有明确的交付和出口准则.。