`
lovnet
  • 浏览: 6672117 次
  • 性别: 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.增量,迭代和原型可以综合使用,但每一次增量或迭代都必须有明确的交付和出口准则.

分享到:
评论

相关推荐

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

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

    论文研究-软件生命周期模型与CMM实施.pdf

    对于采用不同软件生命周期模型的项目在实施CMM 当中遇到的实际问题及其产生机理进行了深入分析,并提出初步的解决方案,主要涉及:采用迭代式生命周期模型的项目在实施需求管理过程域的部分内容时难以满足CMM 的要求...

    所有软件生命周期模型

    软件生命周期的所有模型和图像都进行了详细的说明,及其原理等……

    软件测试经典面试题及解答

    常见的软件生命周期模型有哪些? 什么是版本控制,常用的版本控制系统有哪些? 简述软件测试与软件开发之间的关系? 线上版本如何测试和更新? 初进公司如何熟悉项目? 软件测试的定义和目的分别是什么? 返回目录 ...

    软件工程知识点整理.doc

    瀑布模型的思想、特点及其局限性 思想: (1)软件开发过程与软件生命周期是一致的 (2)相邻二阶段之间存在因果关系 (3)需对阶段性产品进行评审 特点: (1)接受上一阶段活动的结果作为本阶段活动的输入 2....

    2.1 软件项目开发过程1

    2.1 软件项目开发过程软件生命周期,软件过程模型的概念及其关系软件生命周期软件过程模型软件开发过程的典型阶段过程与过程方法典型阶段计划 -> 需求分析 ->

    《软件工程——原理、方法与应用》优秀PPT全套课件

    1、软件工程的内容与方法 2 2、软件生命周期和开发模型 2 3、面向对象的概念与模型 2 4、需求分析 2 (用户需求报告 需求规格说明书) 5、软件设计 2 6、软件实现 2 (概要设计说明书 软件详细设计说明书) ...

    软件工程完整ppt

     122RUP软件开发生命周期和建模  1221RUP软件开发的生命周期  1222RUP的动态结构  1223RUP的静态结构  1224RUP的建模  123面向对象软件开发过程的案例分析  1231系统需求  1232系统的静态结构模型  1233...

    anylogic系统动力学教程

    AnyLogicTM支持多种不同的建模技术。本教程介绍了其中的系统动力学(System Dynamics,简称为SD)建模方法。...我们将创建一个简单的演示范例——产品生命周期模型,此模型用于预测新产品的销售情况。

    软件测试工程师考试大纲及历年真题

     ·标准的类别及生命周期  3. 信息安全知识  ·信息安全基本概念  ·计算机病毒及防范  ·网络入侵手段及防范  ·加密与解密机制  4. 信息化基础知识  ·信息化相关概念  ·与知识产权相关的...

    安阳工学院--软件工程复习指南

    1.软件是计算机系统中与硬件相互依存的另一部分,软件包括程序、数据及其相关文档的完整集合。程序:按事先设计的功能和性能要求执行的...软件生存期模型:是从软件项目需求定义直至软件运行维护为止,跨越整个生命周期

    基于Eclipse+MySQL设计的餐馆点菜系统软件源码+说明文档资料.zip

    通过本课程设计的实践及其前后的准备与总结,复习、领会、巩固和运用软件工程课堂上所学的软件开发方法和知识, 全面掌握软件工程管理、软件需求分析、软件初步设计、软件详细设计、软件测试等阶段的方法和技术,...

    软件质量管理实践 软件缺陷预防、清除、管理实用方法

    4.5 迭代生命周期的审查 12 4.6 同行评审的注意事项 13 4.6.1 同行评审遵循的原则 13 4.6.2 同行评审关注的问题 14 4.6.3 同行评审通过的准则 14 4.6.4 同行评审的经验共享 14 4.6.5 文档审查重点 15 4.7 同行评审的...

    软件工程知识点

    1.软件生命周期 如同任何事物都有一个发生、发展、成熟直至衰亡的全过程一样,软件系统或软件产品也有一个定义、开发、运行维护直至被淘汰这样的全过程,我们把软件将要经历的这个全过程称为软件的生命周期。它包含...

    ISO IEC IEEE 29119-1-2013.xdf

    5.3软件生命周期中的通用测试过程 5.3.1开发项目子过程及其结果 5.3.2持续维护及其结果 5.3.3软件开发生命周期的支持流程 5.4基于风险的测试 5.4.1在组织测试过程中使用基于风险的测试 5.4.2在测试管理过程中...

    软件测试经典面试题 (超实用)

    35、软件测试的文档测试应当贯穿于软件生命周期的全过程,其中用户文档是文档测试的重点。那么软件系统的用户文档包括哪些? 10 36、软件系统中除用户文档之外,文档测试还应该关注哪些文档? 10 37、简述软件系统中...

    2005-2009软件设计师历年真题

     • 主要的软件开发方法(生命周期法、原型法、面向对象法、CASE)  • 软件开发工具与环境知识  • 软件过程改进知识  • 软件质量管理知识  • 软件开发过程评估、软件能力成熟评估基础知识  3.2 系统分析...

Global site tag (gtag.js) - Google Analytics