Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >瀑布式开发、迭代开发、敏捷开发、XP与SCRUM的区别

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

作者头像
jack.yang
发布于 2025-04-05 06:54:56
发布于 2025-04-05 06:54:56
2530
举报

瀑布式开发、迭代开发,区别在于采用不同的生命周期管理模型


都是一种开发模式,像设计模式一样,考虑的角度不一样,谈不上谁取代谁一说。

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

迭代式开发,在迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度的小项目,被称为一系列的迭代。每一次迭代都包括了需求定义、需求分析、设计、实现与测试。采用这种方法,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。不要求每一个阶段的任务做的都是最完美的,而是以最短的时间,最少的损失先完成一个“不完美的成果物”上线。然后再通过客户或用户的反馈信息,在这个“不完美的成果物”上逐步进行完善。

        这两种开发模式都各自具有自己的特点,迭代式开发适合在一些需求信息不明确的项目中,这样在开发过程中遇到需求的变化时,所带来的影响要比瀑布式开发小。而现在的很多项目中,需求在项目进行中变化的事经常见,所以显得迭代式开发的优势更明显一些。

        但是,从本质上来说,二者都是有着完整的开发流程的一种开发模式。即使是迭代式开发,在每一个迭代的环节中,也是从需求到设计,从设计到编码,从编码到测试吗?这不也是瀑布式模型的体现吗?只不过这个瀑布式中的每一个阶段不需要做到最优化,都留一些任务到下一层迭代中去做而已。

        所以,我觉得面对不同的问题采用不同的模式,模式是为了方便我们开发而服务的,不是要求我们必须按照某一种模式从头走到尾。

        就象迭代式开发,我们其实也经常用到这种模式。比如说开发项目中的某一个模块。我们先把能够实现主要功能的代码写出来。比如一个查询模块,先从模块的构思到设计再到编码,先查询功能的代码,测试一遍查询成功。这算是完成了第一层迭代。然后我们要再考虑一层迭代中的一些还未完成的细节问题,比如查询的check,查询结果的显示以及查询算法的优化等等,这就是第二层迭代。

瀑布式开发,敏捷开发,区别一种生命周期模型,项目管理方法集合


瀑布模型的特点(传统的开发方式)

1、强调文档

前一个阶段的输出就是下一个阶段的输入,文档是个阶段衔接的唯一信息。所以很多开发人员好象是在开发文档,而不是开发软件,因为要到开发的后期才可以看到软件的“模样”。

2、没有迭代与反馈。瀑布模型对反馈没有涉及,所以对变化的客户需求非常不容易适应。瀑布就意味着没有回头路。

3、管理人员喜欢瀑布模型的原因是把文档理解为开发的速度,可以方便地界定不同阶段的里程碑。

敏捷开发

极限编程的思想体现了适应客户需求的快速变化,激发开发者的热情,也是目前敏捷开发思维的重要支持者。

敏捷软件开发是一个开发软件的管理新模式,用来替代以文件驱动开发的瀑布开发模式。

敏捷开发集成了新型开发模式的共同特点,它重点强调:

1.敏捷就是“快”。快才可以适应目前社会的快节奏,要快就要发挥个人的个性思维多一些。

2.客户参与。以人为本,客户是软件的使用者,是业务理解的专家,没有客户的参与,开发者很难理解客户的真实需求。

3.强调软件开发的产品是软件,而不是文档。文档是为软件开发服务的,而不是开发的主体。

4.设计周密是为了最终软件的质量,但不表明设计比实现更重要。

5.迭代。软件的功能是客户的需求,界面的操作是客户的“感觉”。对迭代的强调是缩短了软件版本的周期。

6.小版本。快速功能的展现,看似简单,但对于复杂的客户需求合理地分割与总体上的统一,要很好地二者兼顾是不容易的。

迭代开发,敏捷开发,区别一种生命周期模型,项目管理方法集合


        迭代开发是一种软件开发的生命周期模型,与其对应的还有瀑布模型、螺旋模型等等

        敏捷开发是多种软件开发项目管理方法的集合,其中包括了XP、Scrum等十几种开发模式,这些开发方法有些共同点,比如重视响应变更,重视实现客户的价值,重视开发人员的自身发展等等,其核心体现在他们著名的四句原则中.这些开发方法基本都倾向于采用迭代的软件开发生命周期模型.

        简单来说,迭代模型是敏捷开发普遍使用的软件生命周期模型,敏捷开发所包含的内容比迭代模型宽泛的多.

敏捷开发中,XP与SCRUM的区别


区别之一:  迭代长度的不同

XP的一个Sprint的迭代长度大致为1~2周, 而Scrum的迭代长度一般为 2~ 4周.

区别之二: 在迭代中, 是否允许修改需求

XP在一个迭代中,如果一个User Story(用户素材, 也就是一个需求)还没有实现, 则可以考虑用另外的需求将其替换, 替换的原则是需求实现的时间量是相等的。 而Scrum是不允许这样做的,一旦迭代开工会完毕, 任何需求都不允许添加进来,并有Scrum Master严格把关,不允许开发团队收到干扰

区别之三: 在迭代中,User Story是否严格按照优先级别来实现

XP是务必要遵守优先级别的。 但Scrum在这点做得很灵活, 可以不按照优先级别来做,Scrum这样处理的理由是: 如果优先问题的解决者,由于其它事情耽搁,不能认领任务,那么整个进度就耽误了。 另外一个原因是,如果按优先级排序的User Story #6和#10,虽然#6优先级高,但是如果#6的实现要依赖于#10,则不得不优先做#10.

区别之四:软件的实施过程中,是否采用严格的工程方法,保证进度或者质量

Scrum没有对软件的整个实施过程开出养个工程实践的处方。要求开发者自觉保证,但XP对整个流程方法定义非常严格,规定需要采用TDD, 自动测试, 结对编程,简单设计,重构等约束团队的行为。因此,原作者认为, 这点上,XP的做法值得认同的,但是却把敏捷带入了一个让人困惑的矛盾, 因为xp的理念,结合敏捷模式,表达给团队的信息是“你是一个完全自我管理的组织, 但你必须要实现TDD, 结对编程, ...等等”

不难发现,这四个区别显见的是: Scrum非常突出Self-Orgnization, XP注重强有力的工程实践约束

作者建议, 在管理模式上启用Scrum, 而在实践中,创造一个适合自己项目组的XP(“start with Scrum and then invent your own version of XP.”)

SCRUM介绍


        回顾一下我所认识的scrum,算是对自己知识的一个梳理。         scrum到底是什么,书中都说,它不是方法学,不是过程,而是一个框架。我并没有太理解这句话,所以先把scrum中都有些什么来说一下。

        时间:scrum把时间分成一个个的sprint,也就是迭代周期。这个周期以2-6个星期为宜,但目前使用的最多的,是一个月,即四个星期。

        每一个sprint的开始和结束都会有一个会议,叫做sprint计划sprint演示,这很好理解,计划时计划做什么,演示时演示做完的东西。然后,并不是演示完了就完事的,sprint还有一个回顾会议,用来对这个sprint进行回顾,哪些做的好,哪些做的不好。这就是改进。

        组成sprint的每天中,都会有每日例会,叫做每日站会,所以谓站会,即是时间非常短的会议,众所周知的,没完没了的会议总是让我们,厌倦不已。而这种站会,我想差不多是从这方面来考虑的。

人物:scrum中有scrum master, product owner和scrum团队。我理解scrum master就是project manager,而product owner就是product manager,团队还是那个团队,只是这里的团队,在规模上有一定的限制,它要求人员不要太多,不要太少,3-12个,通常4人团队比较多见,当然这个具体还得看实际情况来定。团队中开发测试人员比是1:1,即pair work。

        scrum中的需求,采用story的形式进行描述,整个产品的需求,被列成product backlog,而每一个迭代周期要做什么,是在每个sprint的计划会议上进行挑选的,根据po对backlog标记的优先级,团队对其进行estimate并挑选出这个sprint里能完成的story,scrum master把它们列入计划中。

        backlog有一个用于统计的东西,叫做燃尽图。从字面理解,就是燃烧掉多少的图,即sprint backlog中的被完成了多少,每完成一个story,就燃烧掉一个story。产品backlog有产品燃尽图,sprint有sprint燃尽图。

        以上基本就是我了解的一些scrum知识点,其中忽略了工具部分和工作开展方式部分。因为采用什么工具或采用什么方式来实现,我认为是根据实际情况来定的,而且,在每个sprint回顾会议中,这些东西都会被改进。使用excel或白板来记录story或backlog并不重要,重要的是,你是否有story或backlog。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
敏捷开发并非一味的追求交付速度
自2001年《敏捷宣言》发布以来,敏捷开发(Agile Development)逐渐成为软件工程领域的主流方法论。然而,许多人对敏捷开发的认知仍停留在“快速交付”、“压缩时间”的层面,甚至将其等同于“加班赶工”或“牺牲质量的短期冲刺”。
JanYork_简昀
2025/05/20
1550
敏捷开发并非一味的追求交付速度
关于敏捷开发的思考
刚接触敏捷一个月左右,看各种设计模式、TDD、scrum、xp,但是当别人问到我什么是敏捷开发的时候,还是不知道怎么去回答,所以就想着,是时候理一下这些天学习的关于敏捷的所有,在心里搭一个框架。
刘开心_1266679
2019/02/14
6680
关于敏捷开发的思考
3. 软件测试——开发模型(瀑布模型,螺旋模型,递增迭代,敏捷开发)
软件工作的范围不仅仅局限在程序编写,而是扩展到了整个软件生命周期; 【软件开发的周期:、需求分析、设计、实现、测试、安装部署、运行维护】
小雨的分享社区
2022/10/26
9830
3. 软件测试——开发模型(瀑布模型,螺旋模型,递增迭代,敏捷开发)
敏捷开发之Scrum扫盲篇
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中的各个环节,主要目的有两个,一个是进行知识的总结,另外一个是觉得网上很多学习资料的讲述方式让初学者不太容易理解;所以我决定写一篇扫盲性的博文,同时试着也与园内的朋友一起分享交流一下,希望对初学者有帮助。  什么是敏捷开发? 敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法
老白
2018/03/19
8460
敏捷开发之Scrum扫盲篇
【软件测试】敏捷模型(Scrum模型)和V模型、W模型
前面的那些模型以前非常流行,但现在开发人员在使用的时候会遇到各种问题。主要困难包括在项目开发期间处理来自客户的变更请求,以及合并这些变更所需要的高成本和时间。
椰椰椰耶
2024/11/15
1.4K0
【软件测试】敏捷模型(Scrum模型)和V模型、W模型
ThoughtWorks的敏捷开发 | 洞见
ThoughtWorks的敏捷开发方法一直是一种神秘存在。在敏捷开发还没有主流化的年代,为了让外界理解ThoughtWorks全球团队怎么做敏捷,我们商定了一个“60% Scrum + 40% XP”的经典答案。当然其实ThoughtWorks的敏捷开发既不是Scrum,也不是XP。
ThoughtWorks
2018/08/03
1.3K0
ThoughtWorks的敏捷开发 | 洞见
Scrum方法
 Scrum的由来—由瀑布等传统开发模型的弊端提出敏捷开发方法 瀑布模型是由Royce在1970年提出的,他把大型软件的开发分为分析与编程. 瀑布模型的弊端: 1). 强调文档性:导致了往往要到开发的后期,才能看到软件的模样.为软件的开发极大的增加了风险性. 2). 没有迭代与反馈:导致了无法应对客户的需求变化.         而在当今ERP盛行的软件市场里面,由于市场带动的软件需求变化和软件初期客户对需求描述的不清楚,都为瀑布模型的使用带来了困难. 3). 采用瀑布模型开发的软件,极
逍遥剑客
2018/05/23
7820
敏捷开发流程之Scrum:3个角色、5个会议、12原则
本文主要从Scrum的定义和目的、敏捷宣言、Scrum中的人员角色、Scrum开发流程、敏捷的12原则等几方面帮助大家理解Scrum敏捷开发的全过程。
宜信技术学院
2020/01/07
13K0
敏捷开发流程之Scrum:3个角色、5个会议、12原则
敏捷软件开发简述
前言:由于我读了邹欣老师的《构建之法:现代软件工程(第二版)》,因此对敏捷软件开发有了比较大的兴趣。于是我在网上找了一些论文,比如Requirements Engineering and Agile Software Development、A decade of agile methodologies: Towards explaining agile software development。在读了这些论文之后,对敏捷软件开发有了大致的了解。这篇博文主要是简单介绍敏捷软件开发,重点集中在主要的敏捷开发方法和它的优势,同时也作为一个备忘录,来记录我在这个过程中收获到的重要的知识。
庞小明
2018/09/19
1.5K0
敏捷软件开发简述
敏捷开发:从理论到团队落地
敏捷开发很早就已经流行过了,之前也零碎地了解了一些相关知识,并在团队中进行了部分实践,但效果都不怎么好。最近又重新梳理了一遍,并结合现状,准备在团队中重新实践敏捷。
oec2003
2021/12/01
7410
敏捷开发:从理论到团队落地
Scrum敏捷开发
什么是Scrum敏捷开发 Scrum是敏捷开发的一种,是一种以人为本,迭代式增量软件开发的过程,以英式橄榄球争球队形(Scrum)为名,因此可以想象,整个团队是高效而富有激情的。以人为本,即Scrum开发特别强调沟通,要求团队所有人员都坐着一起工作,通过高效的沟通解决问题。
葆宁
2019/12/20
2.2K0
Scrum敏捷开发
漫画:三分钟了解敏捷开发
在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。
小灰
2022/07/05
2840
漫画:三分钟了解敏捷开发
敏捷开发--scrum
1.  请简述一下什么是敏捷开发(Agile Development),以及什么是持续集成。 敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。、 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的
smy
2018/04/03
2K0
SCRUM模型与XP模型比较
敏捷软件开发是一种权衡跨职能各方之间的灵活性、迭代和团队合作的方法。它基于敏捷宣言,这是软件开发的一套指导价值观和原则。此外,它还促进适应性规划、进化发展、早期交付和持续改进。
jack.yang
2025/04/05
1290
SCRUM模型与XP模型比较
一只猪的 Scrum 开发经历
Scrum 是一种方法论,有很多术语、定义、规则。 本文不是讲 Scrum 理论,而是从应用的角度,讲述我自身 Scrum 实践的经验体会。理论运用到实践中时,一定会有所变化。本文中根据我切身经历,对
CSDN技术头条
2018/03/26
1.6K0
一只猪的 Scrum 开发经历
敏捷模型-开发方法入门系列
在这篇博客中,我们将讨论敏捷模型的关键功能、阶段、测试方法及其优缺点,但在探索所有这些之前,让我们看看引入敏捷模型的必要性以及它何时出现。我们不断扩大的数字世界越来越渴望更复杂和多样化的应用程序。不幸的是,这种需求与高软件开发失败率相冲突。为了解决这一失败,敏捷方法应运而生。敏捷方法最初是在软件开发业务中管理软件开发的一种新技术。许多软件开发项目都失败了,或者需要很长时间才能完成,行业领导者明白他们需要提出一个新的、创造性的解决方案。
jack.yang
2025/04/05
1680
敏捷模型-开发方法入门系列
瀑布开发与敏捷开发的区别
敏捷开发,首先把客户最关注的软件原型先做出来,交付或者上线,在实际场景中去修改弥补需求中的不足,快速修改,再次发布版本。再次上线或者交付。通过一些敏捷实践方式,细化story,可以提供更小的迭代。如此循环,直到用户(客户)满意。适用于需求不明确的项目、创新性的项目或者需要抢占市场的项目。
风君子
2020/05/20
4K0
瀑布开发与敏捷开发的区别
软件开发模式之敏捷开发
什么是敏捷开发 敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。 在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
PM吃瓜
2019/08/12
1.3K0
软件开发模式之敏捷开发
敏捷开发:5种主流开发方法介绍
极限编程(ExtremeProgramming,简称XP)是由KentBeck在1996年提出的。极限编程是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。
DevOps时代
2019/07/30
2K0
开发模型的理解:瀑布模型/增量式/迭代/敏捷开发——笔记
既然所有的开发模型都具有相同的开发周期,那不同的开发模型的差别从哪里体现呢?或者说不同的开发模型在指导开发过程中的差异点在哪里?
周陆军博客
2023/03/18
5K0
相关推荐
敏捷开发并非一味的追求交付速度
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档