敏捷开发和瀑布开发的区别

  • 引言
  • ”敏捷”的理由
  • “瀑布”对“敏捷”的驳斥
  • 焦点碰撞
  • 敏捷开发的优势
  • 敏捷开发的劣势:
  • 瀑布开发的优势
  • 瀑布开发的劣势
  • 结论

引言

最近和朋友谈起敏捷开发和瀑布开发模式,很多人认为敏捷开发是未来的项目实施的趋势,瀑布实施太老土已经过时了。另外确实一些跨国企业如索尼,联想也在使用敏捷的方式实施一些项目。但实际上我们看到绝大多数公司还是依然在采用瀑布的方式实施项目。我之前参与过敏捷开发的项目,但当时比较“年轻”,认识不是很深刻,于是最近又补习了下和大家一起分享下我对敏捷和瀑布的感悟。

”敏捷”的理由

在敏捷看来,很多情况下面,我们都无法去了解到全部的内容,或者即使是了解到,我们也不能保证这些内容是不会变化的。所以先根据主路径,完成主要功能后,我们再通过不断地迭代,去完善我们的工作,这样当我们产生变化的时候,我们推翻的工作量也是少量的,可以很快的去完成新的需求变更。通过这样的不断地变更、重构,我们可以获得一个相对客户满意的产品。

对于瀑布的开发模型来看,似乎依然具备很可靠的工作逻辑,一个工程或项目分为多个阶段,每一个阶段都投入相应的资源,来完成本阶段的工作。每一个阶段到下一个阶段,都有明确的输入输出产物,不同的阶段根据自己所需的输入,进行工作活动之后,产生自己阶段的产出,投入到下一个阶段的工作中。如果不放心的话,每一个阶段还可以增加一个审批环节,让每一个环节都可以经过可靠的审批之后,再投入到下一个环节当中。


很多支持敏捷的同学会说瀑布缺乏与业务的沟通和迭代次数,所以如果在项目的后期才发现要更改需求的话,则项目可能会失败或需要重新启动。这张图好像也解释了瀑布开发经常所面临的困境。


在高举效率与拥抱变化的大旗之下,似乎敏捷模式,就是最好的开发模式。与之相比的是瀑布模式,在这样的呼喊之中,显得有些无法跟得上步伐,体现的是陈旧、死板的。

“瀑布”对“敏捷”的驳斥

敏捷本身不是项目管理框架,也不是“方法论”。它是一套与产品开发相关的原则和价值,特别是互联网产品经常会采用敏捷的方法来进行开发。但是,有一些基于敏捷原则的方法,这些方法是产品开发方法,而不是项目管理框架。
说到需求变更,瀑布也可以走需求变更,提变更申请,按照环节一步一步走,去规划工作量。虽然比敏捷是要慢一些,但是我整个流程是可靠的!为什么就说瀑布是死板的,不符合时代的呢?
似乎瀑布的做法也没有错误,我们何不按照这样的步骤,来完成我们的工作呢?这样的过程听起来是如此的可靠。看,我有明确的阶段;看,我有明确的审批;看,我有明确的变更流程。以瀑布模式进行开发的项目有这么多,已经证明了这是一个有效的实施方法,难道不是么?
另外被敏捷所诟病的瀑布项目经常失败通常是发生了非常严重的错误情况下才会产生。实际上只有在对项目的控制很差的情况下才会发生这种情况。瀑布型项目没有迭代和用户的多次反馈也是不正确的 - 很多项目可以通过产品原型图的方式和业务部门确认操作的流程,只是很多项目中并没有使用这种方法。

焦点碰撞

敏捷模式,两周一个迭代,每个迭代都能进行一定功能模块的交付,让用户更早的看到交付物,虽然只有部分,也可以让用户来提出自己的看法,产生变更的时候,开发人员也可以在下个迭代中进行修改,让用户进行再次的确认。
看来,两者的碰撞就是在交付的及时性上与面对变更的成本上,所看到有极大的变化。瀑布在交付阶段比较靠后,交付的模块比较完整,在面对变更的时候,变更影响范围就比较大,变更的成本就极大。问题发现的阶段越靠后,解决问题所需要付出的成本就更高。这样,就体现出来了敏捷对瀑布在这样的情景下面的优势。
时间和成本,看起来就是敏捷和瀑布在选择时主要考虑的两个方面。未来能更好的指导未来的选择,下面还列出了更详细的敏捷和瀑布的优劣势。

敏捷开发的优势

开发的阶段性成果会在开发过程中尽早的进行审查,项目的风险会降低;
适用于需求不明确情况,因为需求不明确,所以需要在不断迭代的过程中来逐步理清需求。
灵活性较高,几乎可以在任何时间进行需求变更;
敏捷鼓励开发人员与业务用户之间进行多频次的沟通,业务用户的不合理需求以及开发人员的错误理解都会在这些频繁的沟通中进行不断审查和更新,
敏捷的协作通常要高得多,通常能开发出更高质量的产品;
适用于快速变化的项目,特别是面向前端业务人员的CRM项目更容易根据业务的变化而变化。

敏捷开发的劣势:

敏捷的概念接受度还不算太高,初次尝试可能不会非常成功;
最终交付的内容无法预测,预期和实际完成的内容经常会有很大差异;
敏捷需要高水平的协作以及开发人员和用户之间的定期沟通。 业务和IT人员在沟通前需要做大量的准备工作,但很多情况下业务的沟通时间无法保证;
当存在乙方供应商的情况,敏捷会面临更大的挑战性。 客户通常希望尽早了解他们的项目投入。 预估项目时间和成本难度较高;
在敏捷项目中,最大的问题可能是业务部门永远不希望有最终的截止时间。

瀑布开发的优势

在管理良好的项目中,瀑布可以在早期提供交付的信心;
项目团队成员不需要在同一地点频繁沟通;
在需要大量的设计或分析的情况下瀑布是一种更合适的方法;
如果在基本产品开发之外存在许多接口和依赖关系,瀑布式项目会使用工具来建模和管理这些接口和依赖关系。

瀑布开发的劣势

许多企业和业务人员确实不容易在前期定义清楚需求,早期计划中所依据的假设需求可能存在很大风险;
沟通的风险要高得多 - 特别是很多项目都是前期单向的沟通,后期项目和业务人员的预期差别很大;
瀑布项目的风险一般都很高,因为基于无效假设基础上的需求可能会让项目无限度扩大。 所以你会看到很多瀑布项目都出现成本超出预算或延迟的情况。

结论

敏捷和瀑布的实施方法差别还是很大的,瀑布几乎可以应用于任何类型的项目,尤其是大型的项目。
敏捷方法今年来越来越受欢迎,尤其是当前SaaS软件当道,特别像Salesforce这样自带开发平台的SaaS产品可以非常容易的搭建初始原型并进行快速迭代,所以我们才会看到有越来越多的企业采用敏捷的方式来进行项目实施。总的来说敏捷并不能完全替代瀑布,它只是给了我们另外一种好的选择。

敏捷开发和瀑布开发的区别相关推荐

  1. 什么是敏捷开发和瀑布开发

    一:敏捷式开发(极限编程思想的体现) 敏捷开发(AD:Agile Development )以用户的需求进化为核心,采用迭代.循序渐进的方法进行软件开发.在敏捷开发中,软件项目在构建初期被切分成多个子 ...

  2. 瀑布式开发、迭代开发、敏捷开发的区别

    瀑布式开发.迭代开发,区别[都属于,生命周期模型] 两者都是一种开发模式,就像设计模式一样,考虑的角度不一样,个人感觉谈不到取代一说. 传统的瀑布式开发,也就是从需求到设计,从设计到编码,从编码到测试 ...

  3. 五分钟理解瀑布开发、敏捷开发和Devops

    瀑布开发.敏捷开发.Devops概述 无论是瀑布式开发.敏捷开发还是DevOps,整个流程都分为设计.开发.测试和部署四个部分,只不过各个部分的开始和结束时间节点不同而已!下图很好地解释了这一点. 上 ...

  4. 敏捷开发与瀑布式开发的区别(精简比较)

    瀑布模型的特点 (传统的开发方式) 1.强调文档 前一个阶段的输出就是下一个阶段的输入,文档是个阶段衔接的唯一信息.所以很多开发人员好象是在开发文档,而不是开发软件,因为要到开发的后期才可以看到软 ...

  5. 什么是瀑布开发?适用于哪些场景?有哪些瀑布开发管理系统?

    瀑布模型产生的背景是复杂的,多方面的,也是必然的. 一是 1968 年软件危机爆发,需要标准化系统化规范化的软件开发方法来辅助危机的解决: 二是硬件的快速发展催生了新的高级语言,软件的数量和规模急剧增 ...

  6. 软件开发的常用开发模式

    软件开发常用的几种开发模式 ● 瀑布开发模式(也叫线性开发模式) 在瀑布开发模式中,所有的开发活动都遵循一定的顺序.在软件开发里,这些活动的通常顺序是:需求的商业价值分析.需求的细化和需求说明书的制定 ...

  7. 瀑布开发模式和敏捷开发模式的区别和思考

    瀑布开发模式: 瀑布开发模式有以下显著的特点: 1.严格把软件项目的开发分隔成各个开发阶段:需求分析,要件定义,基本设计,详细设计,编码,单体测试,结合测试,系统测试等. 使用里程碑的方式,严格定义了 ...

  8. 敏捷开发与瀑布式开发的区别

    敏捷方法与传统方法的区别与联系   首先,说一下传统开发的方式流程,传统开发也就是本文最开始所说的来自于工程学的软件开发方式,是一种瀑布式的流程,在工程的起始阶段,进行详尽的需求调研,根据需求进行完全 ...

  9. 敏捷开发与传统开发的区别

    首先我们来看看敏捷开发:不管产品针对的群体是普通大众还是企业的人事部,一个铁的事实告诉我们--21世纪的客户对能够立即发布的高质量应用产品总是求"贤"若渴,青睐有加.可遗憾的是老一 ...

  10. 瀑布式开发、迭代开发、敏捷开发、XP与SCRUM的区别

    瀑布式开发.迭代开发,区别[都属于,生命周期模型]          两者都是一种开发模式,就像设计模式一样,考虑的角度不一样,个人感觉谈不到取代一说.          传统的瀑布式开发,也就是从需 ...

最新文章

  1. java列表包含列表_java – 包含另一个列表的列表
  2. 我花了三个小时写了一道题的六千字题解....(POJ 2888 Magic Bracelet)
  3. 面试总结-腾讯产品群面
  4. java 变量锁_一张图看透java的“锁”事
  5. Adapter.getView convertView(重用View) ViewHolder(避免findViewById)
  6. ngx_conf_s
  7. 第三次学JAVA再学不好就吃翔(part32)--方法重写
  8. ie插件获取dom_读书笔记《DOM编程艺术》DOM
  9. java 异常处理发生异常_处理Java中的异常
  10. 第五节 CImage和CBmp(二)
  11. 荒野行动系统推荐观战榜_荒野行动 观战延迟投票结果公示 更新计划抢先看!...
  12. 朴素贝叶斯网络进行邮件分类
  13. 安卓设置屏幕方向后,恢复自动旋转
  14. 【C++ 程序】 解线性方程组(Cramer法则)(分数形式结果)
  15. CIS芯片测试到底怎么测?
  16. linux 安装ros软路由,Centos7安装RouterOS软路由
  17. 史上最经典摇滚柔情曲15首
  18. C语言——计算某日是该年的第几天
  19. webpy+uploadify实现文件异步上传
  20. 电路中滤波电容和退耦电容_去耦电路中,耦合电容容量越大越好吗?

热门文章

  1. 磁带机技术的应用解析
  2. 在Linux下进入目录,目录下创建、修改、删除文件所需权限
  3. 一个简单的apk破解
  4. DNA序列的机器学习方法
  5. 【C语言】二维数组指针,字符数组指针输出程序实例(注释详细)
  6. 【故障处理】ORA-12162: TNS:net service name is incorrectly specified
  7. e480Linux无法发现无线网卡,ThinkPad无线不能用无法连接无线网络的具体排查流程图解...
  8. ThinkPHP5房屋中介管理系统
  9. DBUtils工具类的使用方法详解
  10. 固定资产管理系统项目总结