软件开发模式对比(瀑布、迭代、螺旋、敏捷)

2023-10-27

转自:http://www.cnblogs.com/-OYK/archive/2012/10/08/2714669.html


1、瀑布模型是由W.W.Royce在1970年最初提出的软件开发模型, 瀑布式开发是一种老旧的计算机软件开发方法。
瀑布模型式是最典型的预见性的方法,严格遵循预先计划的需求分析、设计、编码、集成、测试、维护的步骤顺序进行。
步骤成果作为衡量进度的方法,例如需求规格,设计文档,测试计划和代码审阅等等。 

瀑布式的主要的问题是它的严格分级导致的自由度降低,项目早期即作出承诺导致对后期需求的变化难以调整,
代价高昂。瀑布式方法在需求不明并且在项目进行过程中可能变化的情况下基本是不可行的。 


2、迭代式开发也被称作迭代增量式开发迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。
什么是迭代式开发?
每次只设计和实现这个产品的一部分, 
逐步逐步完成的方法叫迭代开发, 
每次设计和实现一个阶段叫做一个迭代. 

在迭代式开发方法中,整个开发工作被组织为一系列的短小的、
固定长度(如3周)的小项目,被称为一系列的迭代。
每一次迭代都包括了需求分析、设计、实现与测试。
采用这种方法,开发工作可以在需求被完整地确定之前启动,
并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。
再通过客户的反馈来细化需求,并开始新一轮的迭代。

迭代式开发的优点:
  1、降低风险
  2、得到早期用户反馈
  3、持续的测试和集成
  4、使用变更
  5、提高复用性



螺旋开发,1988年,巴利·玻姆(Barry Boehm)正式发表了软件系统开发的“螺旋模型”,它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。
“螺旋模型”刚开始规模很小,当项目被定义得更好、更稳定时,逐渐展开。 

  “螺旋模型”的核心就在于您不需要在刚开始的时候就把所有事情都定义的清清楚楚。您轻松上阵,定义最重要的功能,实现它,然后听取客户的意见,之后再进入到下一个阶段。如此不断轮回重复,直到得到您满意的最终产品。 
       (1)制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件; 

  (2)风险分析:分析评估所选方案,考虑如何识别和消除风险; 

  (3)实施工程:实施软件开发和验证; 

  (4)客户评估:评价开发工作,提出修正建议,制定下一步计划。 
螺旋模型很大程度上是一种风险驱动的方法体系,因为在每个阶段之前及经常发生的循环之前,都必须首先进行风险评估。


 



敏捷软件开发又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。它们的具体名称、理念、过程、术语都不尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。

  • 人和交互 重于过程和工具。
  • 可以工作的软件 重于求全而完备的文档。
  • 客户协作重于合同谈判。
  • 随时应对变化重于循规蹈矩。


其中位于右边的内容虽然也有其价值,但是左边的内容最为重要。
人员彼此信任 人少但是精干 可以面对面的沟通

项目的敏捷开发:
敏捷开发小组主要的工作方式可以归纳为:作为一个整体工作; 按短迭代周期工作; 每次迭代交付一些成果; 
关注业务优先级; 检查与调整。

最重要的因素恐怕是项目的规模。规模增长,面对面的沟通就愈加困难,
因此敏捷方法更适用于较小的队伍,40、30、20、10人或者更少。
大规模的敏捷软件开发尚处于积极研究的领域。




四者对比区别:

传统的瀑布式开发,也就是从需求到设计,从设计到编码,从编码到测试,从测试到提交大概这样的流程,要求每一个开发阶段都要做到最好。
特别是前期阶段,设计的越完美,提交后的成本损失就越少。

迭代式开发,不要求每一个阶段的任务做的都是最完美的,而是明明知道还有很多不足的地方,却偏偏不去完善它,而是把主要功能先搭建起来为目的,以最短的时间,

最少的损失先完成一个“不完美的成果物”直至提交。然后再通过客户或用户的反馈信息,在这个“不完美的成果物”上逐步进行完善。

螺旋开发,很大程度上是一种风险驱动的方法体系,因为在每个阶段之前及经常发生的循环之前,都必须首先进行风险评估。

敏捷开发,相比迭代式开发两者都强调在较短的开发周期提交软件,但是,敏捷开发的周期可能更短,并且更加强调队伍中的高度协作。
敏捷方法有时候被误认为是无计划性和纪律性的方法,实际上更确切的说法是敏捷方法强调适应性而非预见性。 

适应性的方法集中在快速适应现实的变化。当项目的需求起了变化,团队应该迅速适应。这个团队可能很难确切描述未来将会如何变化.


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件开发模式对比(瀑布、迭代、螺旋、敏捷) 的相关文章

  • JavaScript的设计模式解析——工厂模式

    这几天一直在看 JavaScript高级程序设计 在第六章面向对象的程序设计中 自我感觉对于小白而而言 会一定程度的难以理解 什么意思啊 根本不明白哇等等 注意 大神请略过 小小码农 不敢妄言 首先 我们开门见山 什么是工厂模式 工厂模式能
  • python语法(高阶)-设计模式(单例模式)

    参考内容 黑马程序员
  • 行为型模式-策略模式

    package per mjn pattern strategy 抽象策略类 public interface Strategy void show package per mjn pattern strategy 具体策略类 用来封装算法
  • 设计模式的 C++ 实现---工厂方法模式(二)

    前文回顾 单例模式 一 单例模式 二 观察者模式 简单工厂模式 工厂方法模式 一 前言 对于工厂方法模式 当增加新产品时 也需要对应增加一个工厂类 可以使用模版进行封装 减少代码工作量 实现举例 产品抽象基类 class Animal pu
  • java需会(转载)

    一 基础篇 1 1 Java基础 面向对象的特征 继承 封装和多态 final finally finalize 的区别 Exception Error 运行时异常与一般异常有何异同 请写出5种常见到的runtime exception i
  • C++设计模式-State状态模式

    State状态模式作用 当一个对象的内在状态改变时允许改变其行为 这个对象看起来像是改变了其类 UML图如下 State类 抽象状态类 定义一个接口以封装与Context的一个特定状态相关的行为 ConcreteState类 具体状态 每一
  • 六大设计原则--开闭原则

    定义 software entities like classes modules and functions should be open for extension but closed for modifications 一个软件实体
  • 设计模式学习之装饰器模式

    装饰器 Decorator 模式跟适配器 Adapter 模式一样 属于构建型设计模式 在学习适配器模式的时候说过 适配器模式的重点在复用能力 装饰器模式的重点在扩展能力 换言之 装饰器模式是先复用后扩展 这也导致了很多人跟适配器模式混淆
  • 程杰“大话设计模式”中的设计原则

    单一职责原则 SRP 就一个类而言 应该仅有一个引起它变化的原因 如果一个类承担的职责过多 就等于把这些职责耦合在了一起 一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力 这种耦合会导致脆弱的设计 当发生变化时 设计会遭受到意想不到
  • 设计模式 -- 工厂模式(Factory Pattern)

    简单工厂模式 Simple Factory Pattern 根据传入的参数决定实例化哪个对象 优点 不直接在客户端创建具体产品的实例 降低了耦合性 缺点 违反了开闭原则 对扩展开放 对修改关闭 不容易形成高内聚松耦合结构 每当我们增加一种产
  • 设计模式-建造者模式

    文章目录 建造者模式 创建复杂对象的优雅方式 什么是建造者模式 建造者模式的使用场景 优缺点 示例 使用建造者模式创建电脑对象 建造者模式 创建复杂对象的优雅方式 在软件开发中 有时候我们需要创建具有复杂结构和多个组件的对象 直接在客户端代
  • 设计模式七大原则

    1 设计模式的目的 编写软件过程中 程序员面临着来自耦合性 内聚性以及可维护性 可扩展性 重用性 灵活性 等多方面的挑战 设计模式是为了让程序 软件 具有更好 1 代码重用性 即 相同功能的代码 不用多次编写 2 可读性 即 编程规范性 便
  • Tomcat 系统架构与设计模式之工作原理篇

    本文以 Tomcat 5 为基础 也兼顾最新的 Tomcat 6 和 Tomcat 4 Tomcat 的基本设计思路和架构是具有一定连续性的 Tomcat 总体结构 Tomcat 的结构很复杂 但是 Tomcat 也非常的模块化 找到了 T
  • JavaScript设计模式-02-单例模式

    Javascript 设计模式 02 单例模式 简介 单例就是保证一个类只有一个实例 实现的方法一般是先判断实例是否存在 如果存在直接返回 如果不存在就创建了再返回 确保了一个类只有一个实例对象 在JavaScript里 单例作为一个命名空
  • 二十四种设计模式之策略模式

    一 什么是策略模式 简单来说 策略模式是将每一个算法封装到拥有共同接口的不同类中 使得算法可以在不影响客户端的情况下发生变化 也可以理解为可供程序运行时选择的 不同的类 不同的解决方案 策略模式的特点 高内聚低耦合 可扩展 遵循ocp原则
  • 设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)

    原创 疯狂的狮子Li 狮子领域 程序圈 2023 12 19 10 30 发表于辽宁 原型模式 原型模式 Prototype模式 是指 用原型实例指定创建对象的种类 并且通过拷贝这些原型 创建新的对象 原型模式是一种创建型设计模式 允许一个
  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • 【设计模式之美】理论一:怎么才算是单一原则、如何取舍单一原则

    文章目录 一 如何判断类的职责是否足够单一 二 类的职责是否设计得越单一越好 开始学习一些经典的设计原则 其中包括 SOLID KISS YAGNI DRY LOD 等 本文主要学习单一职责原则的相关内容 单一职责原则的定义 一个类只负责完
  • 系列一、 单例设计模式

    一 单例设计模式 1 1 概述 单例模式 Singleton Pattern 是Java中最简单的设计模式之一 这种类型的设计模式属于创建者模式 它提供了一种创建对象的最佳方式 这种模式涉及到一个单一的类 该类负责创建自己的对象 同时确保只
  • 【设计模式之美】 SOLID 原则之五:依赖反转原则:将代码执行流程交给框架

    文章目录 一 控制反转 IOC 二 依赖注入 DI 三 依赖注入框架 DI Framework 四 依赖反转原则 DIP 一 控制反转 IOC 通过一个例子来看一下 什么是控制反转 public class UserServiceTest

随机推荐

  • 虚拟机搭建Harbor安装和简单使用

    Harbor是用于存储和分发docker镜像的企业级Registry服务器 1 准备前提条件 软硬件前置条件 官方连接 安装docker 方法一 下载安装docker 需要版本Version 17 06 0 ce 或更高 curl fsSL
  • 获取拦截器链MethodInterceptor---Spring源码从入门到精通(二十二)

    上篇文章介绍了AOP代理 主要返回了cglib增强对象 增强对象就是指被aop类切入的目标对象 在创建bean之前 可以用 后置处理器beanPostProcessorBeforeInstantiation返回缓存中存在的 bean 创建A
  • 统计学习之回归分析

    目录 一 什么是回归分析 二 回归分析有哪些 三 回归分析的应用 四 回归分析常用工具 Python代码实现 五 如何选择合适的回归模型 参考文献 一 什么是回归分析 百度百科 回归分析是一种预测性的建模技术 它研究的是因变量 目标 和自变
  • Linux代码调试----gdb使用介绍

    目录 一 简介 二 gdb使用流程 1 gdb的启动 2 调试中查看源代码 3 开始调试 一 简介 GDB 全称 GNU symbolic debugger 是 Linux 下常用的程序调试器 发展至今 GDB 已经迭代了诸多个版本 当下的
  • 解决java.lang.ClassNotFoundException: com.mysql.jdbc.Driver问题(真实有效)

    数据库驱动找不到 这个一场特别奇葩 既然这个异常存在 竟然又能编译通过 项目也不报错 只是在启动的时候 抛出异常 一 看看这个异常 Error starting ApplicationContext To display the condi
  • C++去除字符串中多余的空格

    今天写了个小编程 去除字符串中多余的空格 例如 I am a student 下划线表示空格哈 打多个空格显示的还是一个 最后输出 I am a student 现在把自己的思路贴上 欢迎大家留言指正 思路就是定义两个指针next和tail
  • 2060显卡驱动最新版本_教程:怎么安装更新NVIDIAAMD显卡驱动?

    PART 1 装驱动这么简单的事情真的需要写教程吗 我自己都理解不了我为什么要写这样一个教程 但是如你所见 他确实被我写出来了 而且对大部分人都挺有用 首先 使用鲁大师以及驱动精灵这类软件的同学自己喜欢就好 导致的任何问题也请你们自己解决
  • shell编程 报错 syntax error near unexpected token 最终解决

    刚接触shell编程 问题不断 这个问题有两种情况 第一种是像网上说的那些 因为换行符的问题 其产生的通常情况是你在Windows下编写好的代码 放到linux下运行出错 如果是此种情况 请移步网上方法解决 这里不再赘述 下面说我遇到的第二
  • (Winserver 2019) Hyper-V的安装与使用教程

    一 操作步骤 1 主机开启虚拟化 还需要准备一个大一点的硬盘 2 安装Hyper V服务 3 选择可以使用的网络适配器 4 使用Hyper V工具创建Windows虚拟机 5 输入虚拟机名称 任何名称都可以 5 指定生成虚拟机 在本实验中选
  • 作用域

    作用域 一段程序代码中所用到的名字并不是有效和可用的 而限定这个名字的可用性的代码范围就是这个名字的作用域 作用域的使用提高了程序逻辑的局部性 增强了程序的可靠性 减少了名字冲突 全局作用域 作用于所有代码执行的环境 整个script标签内
  • HyperLPR保姆级安装教程

    文章目录 环境 ubuntu18 04 开源地址 https gitee com zeusees HyperLPR 安装步骤 1 安装pip3 2 安装cmake 3 安装scikit build 4 安装 HyperLPR 5 卸载 op
  • linux下PPTP Server测试环境搭建

    1 1 服务器软件安装 安裝PPTP Server 所需的软件 安装PPTP sudo apt get install pptpd PPTPServer的软件安装很简单 只需要安装pptpd就可以了 1 2 配置 执行命令vi etc pp
  • Delphi 编程技巧常见实例问答

    1 delphi怎样调用外部EXE文件 uses WinProcs begin WinExec end 和调用Pascal库函数没什么两样 2 Delphi hint的字体和色彩如何改变 Delphi中Tapplication的属性有Hin
  • Git学习总结(一)git的安装和配置

    git的安装 在这里 因为网上有了很多详尽的教程 我就不赘述了 git安装教程 然后你需要申请一个GitHub账号 点击申请GitHub账号 申请GitHub账号的时候要绑定一个邮箱 绑定QQ邮箱即可 下面将你电脑上的git绑定GitHub
  • 查看思科路由器各种信息SHOW 命令总结----无私奉献版(转载请注明出处)

    我们用putty连接路由器的控制台 console 看到命令提示符后我们就可以执行命令来查看和配置路由器了 这里总结在路由器上的最常用的show 命令 1 show version 查看路由器的型号 IOS的文件名 路由器接口 内存 以及配
  • Python 分割字符串:split()

    代码案例 gt gt gt txt we trust AI 默认是按照空字符来分割 分割所有 gt gt gt txtlist txt split gt gt gt txtlist we trust AI 指定按照哪个字符来分割 gt gt
  • PageRank 笔记

    PageRank 要说到 PageRank 算法的来源 这个要从搜索引擎的发展讲起 最早的搜索引擎采用的是分类目录的方法 即通过人工进行网页分类并整理出高质量的网站 那时 Yahoo 和国内的 hao123 就是使用这种方法 后来网页越来越
  • java spring cloud 企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

    项目说明 随着公司的快速发展 企业人员和经营规模不断壮大 公司对内部招采管理的提升提出了更高的要求 在企业里建立一个公平 公开 公正的采购环境 最大限度控制采购成本至关重要 符合国家电子招投标法律法规及相关规范 以及审计监督要求 通过电子化
  • 残差连接和跳跃连接

    模型解读 resnet中的残差连接 你确定真的看懂了 腾讯云开发者社区 腾讯云
  • 软件开发模式对比(瀑布、迭代、螺旋、敏捷)

    转自 http www cnblogs com OYK archive 2012 10 08 2714669 html 1 瀑布模型是由W W Royce在1970年最初提出的软件开发模型 瀑布式开发是一种老旧的计算机软件开发方法 瀑布模型