首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >谈谈软件开发模式:瀑布与敏捷

谈谈软件开发模式:瀑布与敏捷

作者头像
芋道源码
发布于 2022-09-14 10:15:42
发布于 2022-09-14 10:15:42
49800
代码可运行
举报
文章被收录于专栏:芋道源码1024芋道源码1024
运行总次数:0
代码可运行

点击上方“芋道源码”,选择“设为星标

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

  • 原创 | Java 2021 超神之路,很肝~
  • 中文详细注释的开源项目
  • RPC 框架 Dubbo 源码解析
  • 网络应用框架 Netty 源码解析
  • 消息中间件 RocketMQ 源码解析
  • 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析
  • 作业调度中间件 Elastic-Job 源码解析
  • 分布式事务中间件 TCC-Transaction 源码解析
  • Eureka 和 Hystrix 源码解析
  • Java 并发源码

来源:www.cnblogs.com/jackyfei

/p/10078988.html


瀑布和敏捷不是什么新概念,这里只是个人在团队合作中不得不去思考而做的归纳和总结,同时记录自己曾经踩过的坑,新瓶装旧酒,希望对你有所启发。

瀑布模式

瀑布模型是比较传统一种开发模式,特别是在2B的传统企业,包括ERP,MES,WMS,CRM,OA,IBMS等系统当中可以经常见到他们的影子。现在这种模式仍然流行在一些大的项目或者是外包的一些项目当中。

如上图所示,瀑布模型优缺点都很突出。

优点明显:

  • 阶段清晰。从计划到开发最后到上线运行,三个阶段非常清晰。
  • 时间顺序。每个阶段顺序必须是从上到下,严格按照时间先后进行。
  • 环环相扣。在每一个阶段都必须有产出物然后才能进入到下一个阶段进行。
  • 黑盒模式。每个阶段都有各自的角色和分工,各自只关心自己的任务。比如需求阶段开发人员无需关注。

缺点突出:

  • 需求隔离。由于各阶段的人员只能接触到自己工作范围内的东西,所以对客户需求的理解程度高低不等,开发人员更像是定义为流水线上的工人。
  • 变更代价大。既然叫做瀑布,就意味着不应该走回头路。否则如果出现返工,付出的代价会很大。需求变更,编码人员会很强的抵触情绪。
  • 束缚创造性。由于强调文档管理,所以管理人员会比较喜欢,但是他束缚了开发人员的创造性。
  • 周期漫长。整个开发持续的生命周期很长,需求和设计的时间会耗费特别多,有时候会占用三分之一甚至更多时间,这样整个周期就会变长,大都在半年到一年左右的时间,所以更适合需求相对稳定的大项目。

归纳总结

根据以上分析,我们知道瀑布模式强调里程碑,重视文档,强调分工,避免变化,凡事喜欢规划和做计划,但是代价就是拖沓笨重,反应迟钝。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

敏捷模式

发展背景

敏捷开发借助互联网浪潮开始流行起来,这也是2C的业务特点决定的,看过QQ和微信长大的人,这种体会特别深。互联网产品不可能一步规划到位,一般都是核心功能优先,比如微信,先是实现聊天功能,然后才是漂流瓶,钱包,小程序……

互联网业务有何特点呢?借用雷军的七字诀:专注、极致、口碑、快。

  • 唯有专注才能聚焦能量,引爆燃点。
  • 唯有极致才能排除竞争,争取用户。
  • 金杯银杯不如口碑。
  • 天下武功唯快不破。

敏捷无疑更加贴近互联网的这种业务需求,如果纯用瀑布模式,估计黄花菜都凉了。敏捷还有一个更极致的做法,直接上PPT通过类似众筹的方式进行开发,这种从群众中来到群众中去的个性化定制功能非常的有创意,如果众筹的结果是没有人感兴趣,就可以直接否定该产品开发,可以避免无谓的“库存”导致的开发压力,节省巨大的成本浪费。

Scrum是什么

Scrum的意思是橄榄球运动的一个专业术语,表示“争球”的动作。把一个开发流程的名字取名为一项体育运动,你一定能感受到其中的碰撞,冲突,激情。如果是这样,Scrum如何能提高开发效率呢?敏捷开发是一种指导思想,Scrum和XP则是敏捷开发的具体开发流程,这里只选择Scrum进行探讨。

我们先来看下Scrum的三个角色:

  • 产品负责人: 提供整体产品需求清单,确定产品边界,功能组合图谱,交付内容和日期。另外产品负责人有权拒绝开发团队的开发成果。
  • 开发团队: 因为追求快,开发人员需要很强的自我管理能力,需要主动反馈,主动沟通。
  • 流程管理员: 主要任务是疏通开发和业务的障碍,起到一个胶水的粘合作用,所以一旦开发进行,流程管理员有权拒绝需求的变更或修改。

Scrum是一个理想化的开发流程,前提条件是角色完整,分工明确,配合默契,沟通融洽。如果出现其中任何一个环节的故障,可能都会破坏流程的效率,比如,开发经理和流程管理员脾气一样倔强,脾气互斥,那么整个效率就打折扣。我感觉在招聘人员,团结组建的过程中,我们务必要寻找气味相投的人,这可以减少开发过程中的冲突。

Scrum和瀑布的本质区别是,一个以文档为本,一个以人为本。在以人为本的团队里,领导者的文化就是团队的文化。如果领导者不透明,喜欢玩虚假,自大,官僚气十足,这个团队基本上就没什么希望了。人必须是主人,有能动性,这个高度困难。因为如何让团队觉得公司的事是我家里的事是高度困难的,因为有些开发人员自己家的事都没怎么认真过。想要做到这点,需要老板重视,否则中层领导我感觉一般都心有余力不足。

Scrum流程图

  • 首先需要确定一个产品需求列表 ,由产品负责人负责;
  • 开发团队根据列表,做工作量的预估和安排
  • 有了产品需求列表,我们需要通过计划会来从中挑选出一个故事作为本次迭代完成的最小目标 ,这个目标的时间周期是1~4个星期,然后把这个故事进行细化,形成一个最小产品需求。比如该故事是登陆的功能故事,那么登陆的需求就要进行完整的细化工作;
  • 开发成员根据故事再细化 成更小的任务(细到每个任务的工作量在2天内能完成);

计划纸牌怎么怎么用的呢?比如A程序员开发一个功能,需要5个小时,B程序员认为只需要半小时,那他们各自取相应的牌,藏在手中,最后摊牌,如果时间差距很大,那么A和B就可以讨论A为什么要5个小时...

  • 开发过程需要设置每日站会 ,每次会议控制在15分钟左右,每个人都必须发言,并且要向所有成员当面汇报三个问题:A.你昨天完成了什么;B今天要完成什么;C.什么问题不能解决。

每个人回答完成后,要走到黑板前更新自己的sprint燃尽图;

  • 每日集成 ,也就是每天都要有一个可以成功编译、并且可以演示的版本,可以机制CI,CD工具进行辅助开发;
  • 当一个故事完成,也就是最小目标被完成,这时,我们要进行演示会议 ,也称为评审会议,产品负责人和客户都要参加(最好本公司老板也参加),每一个开发成员都要向他们演示自己完成的软件产品(这个会议非常重要,一定不能取消);
  • 最后就是回顾会议 ,也称为总结会议,以轮流发言方式进行,每个人都要发言,总结并讨论改进的地方,放入下一轮sprint的产品需求中;

大家如果认真的看完整个Scrum的开发流程,会发现这个过程还真的是很完美,不妨可以用在你的团队开发过程中。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

瀑布vs敏捷

对比一览图

瀑布敏捷是有边界的,我觉得团队在整体学习开发模式优劣后,需要对二者的边界有一个清晰的认识,并在整个团队上下都要达成一致的共识,否则后果可能会很严重。双方的边界如下图所示

为什么说共识很重要呢?就我踩过的坑进行盘点,有如下几个问题:

  • 领导指挥不当 :老板重文档,觉得必须有文档往下开发才是规范的,否则后面的工作都是一种浪费,因为你的顶头上司不一定懂技术,这样导致的结果是文档没出来前,底下人只能泡茶聊天了。
  • 团队效率极低 :因为瀑布强调分工,各自为战,所以有可能架构设计人员在等产品经理给需求文档,开发人员在等待架构设计文档,测试人员在等待开发成果,老板在等待产品交付。这里环环相扣,类似电流串联工作,一个环节出错,造成断电,导致交付延期,后果可能就是互相推诿和扯皮,严重的话可能会引发争吵,团队分崩离析。

归纳盘点

就个人的经验来看,瀑布和敏捷不是天然分割的,只是针对业务各有侧重,应该是你中有我,我中有你的混合体。比如微信第一版的时候,聊天核心功能的迭代一定也有内部的小瀑布,如果没有计划-开发-测试-运维根本就无法进行下去。再比如瀑布,特别对创业团队,刚开始人手不多,分工不明,架构师有可能要去画原型图,做需求调研;产品经理业务模糊,还在探索,各种短板和不足就像黑洞一样存在你的周边,你浑然无知。如果你一定要等整个调研完成,PRD文档周全再做开发,估计也要歇菜。

既然各有利弊,那么中间的这个平衡点如何拿捏就非常重要,如何在前期设计的时候既能不过渡导致交付延迟,又能兼顾后续的演进和变化导致的修改可控,这需要开发经理丰富的实战历练和审时度势的判断力。

另外叨叨一下,开发模式贯穿做整个开发的生命周期,但是团队各个成员包括产品经理,技术经理,架构师,开发人员对项目管理的流程理解各不相同,深浅不一,很难想象如果大家没有达成共识,整个开发团队的效率会有多高?但是现实当中,大部分团队成员没有开发模式的培训和上下达成一致依然在进行着开发的工作……



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、RedisMongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
文章有帮助的话,在看,转发吧。谢谢支持哟 (*^__^*
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 芋道源码 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
软件开发模式之敏捷开发
什么是敏捷开发 敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。 在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
PM吃瓜
2019/08/12
1.4K0
软件开发模式之敏捷开发
3. 软件测试——开发模型(瀑布模型,螺旋模型,递增迭代,敏捷开发)
软件工作的范围不仅仅局限在程序编写,而是扩展到了整个软件生命周期; 【软件开发的周期:、需求分析、设计、实现、测试、安装部署、运行维护】
小雨的分享社区
2022/10/26
1.1K0
3. 软件测试——开发模型(瀑布模型,螺旋模型,递增迭代,敏捷开发)
软件开发流变史:从瀑布开发到敏捷开发再到DevOps
作为在20世纪70年代、80年代盛极一时的软件开发模型,瀑布模型通过制定计划、需求分析、软件设计、程序编写、软件测试、运行维护等6个流程将整个软件生命周期衔接起来。这6个流程有着严格的先后次序之分,只有当前面的流程结束之后,下一个流程才能开始运转。这种自上而下的流程像极了瀑布的下落,因此得名瀑布模型。
敏捷开发
2020/09/07
1.6K0
软件开发流变史:从瀑布开发到敏捷开发再到DevOps
瀑布式开发、迭代开发、敏捷开发、XP与SCRUM的区别
传统的瀑布式开发,也就是从需求到设计,从设计到编码,从编码到测试,从测试到上线大概这样的流程,希望每一个开发阶段都要做全做好。特别是前期阶段,设计的越完美,上线后的成本损失就越少。
jack.yang
2025/04/05
4490
【软件测试】敏捷模型(Scrum模型)和V模型、W模型
前面的那些模型以前非常流行,但现在开发人员在使用的时候会遇到各种问题。主要困难包括在项目开发期间处理来自客户的变更请求,以及合并这些变更所需要的高成本和时间。
椰椰椰耶
2024/11/15
1.9K0
【软件测试】敏捷模型(Scrum模型)和V模型、W模型
互联网企业的敏捷开发之道
个人介绍:1999年大学实习期加入初创期的网易,成为第30号员工,8年间从程序员开始,历任项目经理、产品总监。2007年后创业4年,开发过视频直播社区,及多款页游产品。2011年后就职于腾讯游戏研发部
韩伟
2016/10/10
3.2K1
敏捷软件开发 原则_敏捷方法论
由于书是由英文书籍翻译,读起来会难免拗口,本次分享是由《敏捷软件开发》结合网上相关资料总结而成。
全栈程序员站长
2022/11/17
5300
敏捷软件开发 原则_敏捷方法论
推荐一个项目管理工具,落地基于Scrum的敏捷开发!
禅道由青岛易软天创网络科技有限公司开发,国产开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款专业的研发项目管理软件,完整覆盖了研发项目管理的核心流程。禅道项目管理软件的主要管理思想基于国际流行的敏捷项目管理方法—Scrum。Scrum方法注重实效,操作性强,非常适合软件研发项目的快速迭代开发。禅道在遵循其管理方式基础上,结合国内研发现状,整合了Bug管理,测试用例管理,发布管理,文档管理等功能,完整的覆盖了软件研发项目的整个生命周期。
macrozheng
2020/02/19
1.4K0
推荐一个项目管理工具,落地基于Scrum的敏捷开发!
数字化 IT 从业者知识体系 | 软件开发方法 —— 敏捷篇
瀑布式开发的另一个主要问题是每个阶段都是串行的,当前阶段正在进行软件活动时,向下的阶段全部处于等待和阻塞状态,严重浪费团队资源,降低团队效率。
腾讯云 CODING
2022/02/13
6150
数字化 IT 从业者知识体系 | 软件开发方法 —— 敏捷篇
敏捷软件开发简述
前言:由于我读了邹欣老师的《构建之法:现代软件工程(第二版)》,因此对敏捷软件开发有了比较大的兴趣。于是我在网上找了一些论文,比如Requirements Engineering and Agile Software Development、A decade of agile methodologies: Towards explaining agile software development。在读了这些论文之后,对敏捷软件开发有了大致的了解。这篇博文主要是简单介绍敏捷软件开发,重点集中在主要的敏捷开发方法和它的优势,同时也作为一个备忘录,来记录我在这个过程中收获到的重要的知识。
庞小明
2018/09/19
1.6K0
敏捷软件开发简述
敏捷开发实践总结
敏捷开发它是一种指导思想或开发方式,但是它没有明确告诉我们到底采用什么样的流程进行开发,而Scrum和XP就是敏捷开发的具体方式了,你可以采用Scrum方式也可以采用XP方式;Scrum和XP的区别是,Scrum偏重于过程,XP则偏重于实践,但是实际中,两者是结合一起应用的,这里我主要讲Scrum。
PhoenixZheng
2018/09/29
2.7K0
敏捷开发实践总结
软件开发模式有哪些(软件工程开发模式)
  好吧,其实现在许多产品实际都是使用的“边做边改”模型来开发的,特别是很多小公司产品周期压缩的太短。在这种模型中,既没有规格说明,也没有经过设计,软件随着客户的需要一次又一次地不断被修改。
全栈程序员站长
2022/07/29
3K0
软件开发模式有哪些(软件工程开发模式)
浅谈scrum
第一次接触scrum是在加入天天动听之后,前两年实习公司由于都比较小,还停留在家庭作坊式阶段,当时对软件开发流程的了解一直还停留在学校教科书上的瀑布流模式,整个过程可以抽象为UI与客户沟通需求——设计——开发——UI测试——交付几个步骤,因此整个流程走完,UI+开发基本搞定一个项目。 在接触scrum软件开发模式后,给我最大的印象就是敏捷,两个字说起来简单,做起来不易。关于scrum具体有哪些东西等基本理论,我就不做过多介绍,有兴趣的朋友可以参考scrum百度百科。接下来主要谈谈在实际项目中我们是如何应用s
rectinajh
2018/05/17
6300
技术分享 | 想测试入门就必须要懂的软件开发流程
从事软件测试行业,每天面对的被测对象都是软件。如果想要更好的去完成测试工作,首先需要对被测对象,也就是对软件要有基本的了解。
用户9652437
2022/04/18
4880
测试工程师必须要知道的开发模式--敏捷开发
常见的开发模式都有哪些?大家还有印象吗?不记得不要紧,下面的开发模式你可要好好学习下。
吾非同
2020/10/13
5790
敏捷开发模式下如何快速提升产品质量
随着敏捷开发模式逐渐走入大众视野,它开始逐步取代了传统的瀑布式开发模式,被越来越多的研发项目团队采用。敏捷开发采用快速迭代,快速发布可用版本的方法,持续输出、持续改进。不同于传统的软件开发模式,敏捷开发模式有着自己鲜明的价值和方法。 但即使实践了敏捷,我们可能还会发现,Bug并没有消失。
敏捷开发
2022/11/02
5230
敏捷开发模式下如何快速提升产品质量
软件测试:概念篇
目的:验证软件有或没有问题。 原则:以客户为中心,遵循软件测试的规范、流程、标准和要求。
测试开发社区
2019/09/20
7770
软件测试:概念篇
敏捷开发之Scrum扫盲篇
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中的各个环节,主要目的有两个,一个是进行知识的总结,另外一个是觉得网上很多学习资料的讲述方式让初学者不太容易理解;所以我决定写一篇扫盲性的博文,同时试着也与园内的朋友一起分享交流一下,希望对初学者有帮助。  什么是敏捷开发? 敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法
老白
2018/03/19
8900
敏捷开发之Scrum扫盲篇
如何高效地进行敏捷开发管理
很多公司请几个敏捷教练建立流程,把会议室的椅子都搬走宣布从今以后大家站着开会了,使用敏捷管理工具建立迭代、建需求、分任务,可是这真的就意味着敏捷了吗?
笑看
2019/08/23
9100
技术经理精进之路:理解主流的软件开发流程
一个明晰而高效的开发流程有助于降低项目风险、提高团队协作效率,从而更好地满足用户需求。技术经理需要在软件开发流程中担任领导者的角色,确保团队按照既定的计划和标准推进工作,同时灵活应对变化和挑战。
windealli
2024/01/03
7390
技术经理精进之路:理解主流的软件开发流程
推荐阅读
相关推荐
软件开发模式之敏捷开发
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验