`
liufei.fir
  • 浏览: 685188 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

软件生命周期模型及其选择

阅读更多
瀑布模型/改进的瀑布模型

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

    由于需要对每一个阶段进行验证,瀑布模型要求每一个阶段都有明确的文档产出,对于严格的瀑布模型每一个阶段都不应该重叠,而应该是在评审通过,相关的产出物都已经基线后才能够进入到下一个阶段.

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

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

    架构设计是软件开发中一个重要的关注点.因此在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.增量,迭代和原型可以综合使用,但每一次增量或迭代都必须有明确的交付和出口准则.

分享到:
评论

相关推荐

    谈软件生命周期模型及其选择

    总结来说,选择合适的软件生命周期模型取决于项目的特性和需求。瀑布模型适用于需求稳定、变化较少的项目;螺旋模型适合高风险项目,强调风险控制;而RUP的增量和迭代模型则更适合需求模糊、变化频繁的敏捷开发环境...

    (a)软件生命周期模型

    以下是软件生命周期模型的主要阶段及其详细解释: 1. **需求分析**:这是软件开发的第一步,涉及到对用户需求的理解和收集,以及制定需求规格说明书。此阶段需要与客户进行深入沟通,明确软件的功能、性能和接口...

    (a)软件生命周期模型.rar

    软件生命周期模型是软件开发过程中的一种框架,它定义了从软件项目的启动到最终退役的各个阶段及其顺序,为软件工程提供了一种结构化的方法。本篇文章将深入探讨软件生命周期模型,包括其重要性、常见模型以及在实际...

    cmmi软件生命周期模型描述-V1.0.doc

    软件生命周期模型是软件开发过程中的一个核心概念,它定义了软件从概念形成到最终退役的各个阶段及其顺序。本文档详细介绍了山东政通科技发展有限公司采用的CMMI(能力成熟度模型集成)V1.0版本的软件生命周期模型。...

    CMMI模板-056-CMMI-OPD-PRD-SLCM软件生命周期模型描述

    能力成熟度模型集成)框架下的一种组织级定义的软件生命周期模型,旨在为项目策划提供指导,以便根据项目的特性选择或裁剪合适的生命周期模型,明确软件开发过程的不同阶段及其执行顺序。这一模型的目的是规范化管理...

    生命周期模型及选择指南.doc

    生命周期模型是软件工程中用于规划、设计、实施和维护软件产品的结构化流程,它定义了项目的各个阶段及其顺序,确保项目的高效和有序进行。 2. 生命周期可选模型简介 2.1 瀑布模型 瀑布模型是最经典的软件开发模型...

    软件工程:生命周期模型介绍CHM下载

    生命周期模型是软件工程中的一种概念,它定义了软件开发的各个阶段及其顺序。本篇文章将详细讲解软件工程中的生命周期模型,并以“软件工程:生命周期模型介绍”为主要内容,结合提供的CHM文件进行深入探讨。 生命...

    软件工程-2软件生命周期与模型.pptx

    总的来说,软件生命周期模型的选择应基于项目的特性和需求。理解并灵活运用不同的生命周期模型,是软件工程中至关重要的能力,它能够帮助团队更有效地管理项目,减少风险,提高软件的成功率。随着软件开发技术的发展...

    软件生命周期过程_指导书_测试操作指导书

    ### 软件生命周期过程之测试操作指导书关键知识点解析 #### 一、软件测试指导概览 在软件开发生命周期中,测试是确保产品质量的关键环节。本文档旨在为测试人员和开发人员提供一套标准化的测试流程指南,帮助他们...

    CMMI生命周期模型培训教材

    《CMMI生命周期模型培训教材》是一份详细阐述软件开发生命周期模型的教程,旨在帮助文思创新南京分公司的团队理解并应用项目管理的各个阶段及其关键活动。生命周期模型是软件开发过程中的一种结构化方法,它定义了从...

    软件开发流程生命周期模板文档

    在软件开发过程中,生命周期模型是指导项目从启动到最终完成的关键框架。软件开发流程生命周期模板文档通常包含了多个阶段,每个阶段都有其特定的目标和任务,确保软件产品能够满足用户需求并高质量地交付。以下是...

    软件生命周期.docx

    软件生命周期是软件开发过程中的核心概念,它涵盖了从软件初始构思到最终废弃的整个过程。这一过程被划分为多个阶段,以确保...理解和掌握软件生命周期的各个阶段及其相互关系,对于任何软件工程师来说都是非常重要的。

    软件测试和软件开发生命周期借鉴.pdf

    本文将详细阐述这两个概念及其在不同生命周期模型中的应用。 首先,软件测试是在软件开发生命周期(SDLC)中不可或缺的一环。无论采用哪种生命周期模型,测试都是确保软件质量的关键步骤。软件测试的目的是发现并...

    软件工程过程模型及其选择定义.pdf

    软件工程过程模型是软件开发中用来指导项目实施的框架,它们定义了软件生命周期中的各个阶段以及这些阶段之间的关系。在选择合适的模型时,需要考虑项目的特性、组织的标准、可用资源和风险管理等因素。以下是对几种...

Global site tag (gtag.js) - Google Analytics