瀑布模型/改进的瀑布模型
虽然瀑布模型仍然存在很多的问题有待解决,但瀑布模型仍然是最基本的和最效的一种可供选择的软件开发生命周期模型.瀑布模型要求软件开发严格按照需求 ->分析->设计->编码->测试的阶段进行,每一个阶段都可以定义明确的产出物和验证准则.瀑布模型在每一个阶段完成后都可以 组织相关的评审和验证,只有在评审通过后才能够进入到下一个阶段.
由于需要对每一个阶段进行验证,瀑布模型要求每一个阶段都有明确的文档产出,对于严格的瀑布模型每一个阶段都不应该重叠,而应该是在评审通过,相关的产出物都已经基线后才能够进入到下一个阶段.
瀑布模型的优点仍然是可以保证整个软件产品较高的质量,保证缺陷能够提前的被发现和解决.采用瀑布模型可以保证系统在整体上的充分把握,使系统具备良好 的扩展性和可维护性.但对于前期需求不明确,而又很难短时间明确清楚的项目则很难很好的利用瀑布模型.另外对于中小型的项目,需求设计和开发人员往往在项 目开始后就会全部投入到项目中,而不是分阶段投入,因此采用瀑布模型会导致项目人力资源过多的闲置的情况,这也是必须要考虑的问题.
很多人往往会以进度约束而不选择瀑布模型,这往往是一个错误的观点.导致这种情况的一个关键因素往往是概念需求阶段人力不足.因此在概念需求阶段人力能 够得到充分保证的情况下,瀑布模型和迭代模型在开发周期上并不会存在太大的差别.反而是很多项目对于迭代或敏捷模型用不好,为了赶进度在前期需求不明确, 没有经过一个总体的架构设计情况下就开始编码,后期出现大量的返工而严重影响进度.
架构设计是软件开发中一个重要的关注点.因此在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.增量,迭代和原型可以综合使用,但每一次增量或迭代都必须有明确的交付和出口准则。
分享到:
相关推荐
软件开发模型是软件工程中的一种方法,用于指导整个软件生命周期中的活动和任务,从需求收集、设计、编码、测试直至维护。这些模型为项目管理提供了结构化的框架,确保开发过程的有序进行。以下是对几种常见软件开发...
### 计算机开发模式的种类 ...综上所述,不同的开发模型各有优劣,选择合适的开发模式对于项目的成功至关重要。在实际应用中,可以根据项目的具体情况和需求灵活选择或结合多种开发模式来提高开发效率和软件质量。
综上所述,基于软件复用的信息系统开发模型是一个融合了领域工程、应用工程、组件化开发、原型开发方法和面向对象开发方法等多种技术优势的复合型开发模型。通过该模型,开发者能够在不同的开发阶段中,有效地利用...
敏捷开发模型强调持续的反馈和改进,核心思想包括面对面沟通、重可执行程序、团队合作和超强适应变化的能力。敏捷开发注重交付可运行的软件产品,减少了对文档的依赖,同时鼓励团队成员间的合作与激励。 总结,不同...
模型驱动的软件开发模式研究 模型驱动的软件开发模式是指在软件开发过程中,使用模型来描述软件系统的结构、行为和功能,通过模型转换和代码生成来自动产生软件代码的开发模式。该模式的研究旨在探讨模型驱动的软件...
结合了瀑布模型的线性顺序和原型的迭代特性,强调风险分析,每个螺旋周期包括计划、风险分析、开发和评估四个阶段。 7. **同步模式**: 强调开发团队内部的协同工作,通常涉及并行开发和集成。 8. **RUP(统一...
论软件开发模型及应用 软件开发模型是软件开发全过程、活动和任务的框架,是软件系统开发的重要基础。在软件工程发展历程中,出现了线性开发模型(如瀑布模型)和迭代开发模型(如螺旋模型、统一过程和敏捷开发模型...
服务器开发模式是构建高效、稳定、可扩展的服务器系统的核心环节。在服务器开发过程中,我们需要关注几个关键问题:通讯问题、并发问题、存储问题、载衡问题、可用性问题,以及如何在这五个方面找到平衡。 **通讯...
**MVVM(Model-View-ViewModel)开发模式详解** MVVM模式是一种软件设计模式,它在现代应用程序开发中,尤其是在移动应用和Web应用领域中,得到了广泛应用。这种模式源自于经典的MVC(Model-View-Controller)模式...
为了缩短理论教学与实践应用之间的鸿沟,本文提出了一种基于迭代化增量开发模型的教学设计方法。这种方法能更好地将学生带入软件开发的工程实践,让学生亲身感受从需求分析到软件交付全过程的实战经验。 首先,本文...
这种开发模式常被称为MVC(Model-View-Controller)架构,是软件设计的一种经典模式,有助于实现代码的解耦和模块化。下面将详细介绍这个模式以及如何使用它们来开发用户登录注册程序。 **Servlet**: Servlet是Java...
软件开发模型是指导软件项目开发过程的一系列方法、流程和规则,不同的软件开发模型适用于不同类型的项目,各有其特点和使用场景。了解这些模型对于项目经理选择最合适的开发策略至关重要。 首先,讨论的是瀑布模型...
软件生命周期及软件开发模型知识点 软件生命周期是指软件从功能确定、设计,到开发成功投入使用,并在使用中不断地修改、增补和完善,直至被新的需要所替代而停止该软件的使用的全过程。软件生命周期模型是从软件...
书中不仅详细介绍了各个开发模式的应用案例,而且涵盖了开发相关的主要知识,如IP地址的格式、FTP协议规范、应用程序基于的网络模型、客户/服务器模式开发的概念以及SQL Server基础等。这有助于读者深入理解程序设计...
Java EE高效开发模型的提出是基于对传统的人事管理系统开发模式的分析,通过对Spring、Struts和Hibernate框架的研究,整合出了基于Java EE的高效开发模型。该模型可以提高开发效率、降低开发成本、提高软件质量等多...
通俗易懂的解释了什么是敏捷开发模式!敏捷开发带来的好处和优点!传统的瀑布开发模式有哪些弊端,敏捷开发模式和瀑布开发模式的比较和不同!
瀑布模型是最早期的软件开发模型之一,其核心理念是按照一定的顺序和阶段来进行软件开发。该模型的特点包括: 1. **自上而下的开发方式**:整个开发过程分为若干明确的阶段,如需求分析、设计、编码、测试等。 2. *...
### 软件开发模型详解 #### 一、软件开发模型概述 软件开发模型(Software Development Model)是指软件开发过程中所有活动和任务的一种结构化的框架。这个框架为软件项目的生命周期提供了一个清晰、有序的指导...