家好,我是IT修真院武汉分院第15期的JAVA学员,一枚正直纯洁善良的java程序员。 今天给大家分享一下,修真院官网Java任务10,深度思考中的知识点————什么是敏捷开发流程?
1.背景介绍
为什么需要敏捷开发?
在很久以前,软件项目的开发都是以年来计算的,这代表什么意思呢 ?需求设计了半年多,方案设计做了半年多,开发了三年多,
测试了半年多,修改Bug用了半年多。总计花了很长很长的时间,然后上线后发现有很多需求已经不存在了,同时又出现了很多新的需求。
这是困扰软件开发项目的最大的问题,越大的项目,参与的人越多,风险越大。文档越规范,维护起来的难度就越高,导致项目中遇到的问题越来越多。
2.知识剖析
什么是敏捷开发?
敏捷开发(AgileDevelopment)是一种以人为核心、迭代、循序渐进的开发方法。
怎么理解呢?首先,我们要理解它不是一门技术,它是一种开发方法,也就是一种软件开发的流程,它会指导我们用规定的环节去
一步一步完成项目的开发;而这种开发方式的主要驱动核心是人;它采用的是迭代式开发;
什么是迭代?
迭代是指把一个复杂且开发周期很长的开发任务,分解为很多小周期可完成的任务,这样的一个周期就是一次迭代的过程;
同时每一次迭代都可以生产或开发出一个可以交付的软件产品。
为什么说是以人为核心?
以前大多是瀑布开发模型,它是以文档为驱动的,为什么呢?因为在瀑布的整个开发过程中,要写大量的文档,把需求文档写出来后,开发人员都是根据文档进行开发的,
一切以文档为依据;而敏捷开发它只写有必要的文档,或尽量少写文档,敏捷开发注重的是人与人之间,面对面的交流,所以它强调以人为核心。
老大强调的理念就是:产品和开发必须是一个Team,大家只是分工不同,角色不同,并不是两个对立的团队,出了问题,不要说这
是产品设计出来,这是开发团队实现不了的。这是一个开发小组所有人的责任,这个后果是所有的人都需要承担的。
如果我们认真的区分这是什么问题,那么也只是为了避免下次出现同样的情况,而用户只会知道是一个公司出了一款垃圾产品,没有
人关心到底是产品还是开发的锅。
这是做敏捷开发的大前提。或者不仅仅是产品和开发,责任共担,One Team这个理念是贯穿始终的。
产品和开发必须是一个Team还体现在需求分期上,实际上,需求分期如果没做好,敏捷开发只能流于形式。
在敏捷开发中职责明确,每个人要负责的事情必须清晰无误,谁该做哪些事情,必须要提前讲清楚。
最为后端,项目进入真正的开发阶段后,开发组的成员就应该是主动去控制项目的进度,和风险,以及主动去测试项目中存在的问题,
在这个阶段,除了一些需求不明,或者是发生变动的情况出现,不应该去打扰产品经理。不要让产品经理做开发团队的保姆。
开发组的成员的目标就是做好项目的进度控制,
有风险就及时反馈给Leader,确保自己理解的需求是明确无误的,确保自己的
测试是完整和严谨的,确认自己写出来的代码是可以维护的。一定要理解清楚,一旦PM通过Story讲解,将需求交付给开发组成
员,那么开发组成员就应该主动而独立的为这件事情负责。当项目完工以后,开发组成员应该交叉去做CodeReview,
并且给出性能测试报告,以及组织Demo。
敏捷开发包括了哪些内容?
1.需求规划和分期
2. 需求评审
3. 需求讲解
4. 方案评审
5. 每日晨会
6. 性能测试
7. CodeReview
8. Demo
9. 测试阶段
10.线上Bug修改流程
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
敏捷开发与传统开发方法的比较:
1、优势:
敏捷开发的高适应性,以人为本的特性,和轻量型的开发方法即以测试为驱动取代了以文档为驱动,这三个主要的特点,
也就是敏捷开发相对与传统开发方式的主要有点。因为他更加的灵活并且更加充分的利用了每个开发者的优势,调动了每个人的工作热情。
2、劣势:
与传统开发方式相比,敏捷开发的最主要的劣势在于敏捷开发欢迎新的需求,而在每次新的需求产生时都可能引起整个系统的大幅度的修改。
因为开发者在开发上一个版本的时候,完全没有考虑以后的优化将要如何进行。这样的开发方式实际的软件开发过程中,并不一定总是有效的。
而另一个方面,敏捷开发因为缺乏很多在敏捷开发中被认为“不重要”的文档,这样在一个大型项目比如一个操作系统开发的时候,
由于其项目周期很长,所以很难保证开发的人员不更换,而没有文档就会造成在交接的过程中出现很大的困难。
3.敏捷开发和瀑布模型开发通俗比较
敏捷开发
-
客人到餐馆来点菜(新项目)
-
不确定客户想吃什么的时候,通常选好餐厅后会先看看餐厅的菜单(客户往往提不出具体的需求)
-
根据图文菜单,客人点了是个菜(根据原型和设计稿,基本确定了需求)
-
后厨开始准备(项目启动)
-
配菜、炒菜,先上了两盘,让客人尝了尝味道(先提供可用实例给客户用)
-
客人说还不错,后厨继续准备后面的菜,陆续上菜(不断迭代,不断测试)
-
上菜过程中,客人突然发现有个菜的味道太淡了,让后厨加了点盐又端上来了(敏捷的好处,可以不断测试和需求变更)
-
又上了两盘,不够辣,又拿到后厨加了辣(敏捷的坏处,需求没有提前明确,反复迭代,增加了工作量)
-
到最后两盘时,客人要求换两个菜,还好没炒(迭代的好处,随时接受需求变更)
-
客人吃完,很满意(基本满足了全部的要求)
瀑布模型开发
-
客人到餐馆来点菜(新项目)
-
不确定客户想吃什么的时候,通常选好餐厅后会先看看餐厅的菜单(客户往往提不出具体的需求)
-
根据图文菜单,客人点了十个菜(根据原型和设计稿,基本确定了需求)
-
后厨开始准备(项目启动)
-
根据客人的下单配菜,炒菜(基本上不会主动去了解完整需求)
-
半个小时了,菜还没上桌,客人饿极了(项目启动后很长一段时间客户什么都看不到)
-
再过了二十分钟,十个菜都一起上来了(项目最终一次交付)
-
客人说,有几个菜挺好的,但是有个菜味道淡了,有两个不够辣,还有两盘重复了想换掉(我是买单的,我要变需求)
-
这时候大堂经理来了,说,“味道淡了可以加盐,不辣可以加辣,但是换菜不行,已经炒好的那两盘菜也是要算成本的”(瀑布的坏处,需求变更比较麻烦)
-
于是,后厨只给客户加了盐,加了辣
-
客人吃完,不是很满意,下次不来了(没有满足需求)
7.参考文献
https://www.zhihu.com/question/39757751/answer/82927612?group_id=685376196313116672
https://www.cnblogs.com/yt96/p/5983265.html
8.更多讨论
1.“敏捷开发” 知多少?
敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方式。
2.计划纸牌的用处
计划纸牌,它的作用是防止项目在开发过程中,被某些人所领导。
3计划纸牌的怎么用?
比如A程序员开发一个功能,需要5个小时,B程序员认为只需要半小时,那他们各自取相应的牌,藏在手中,最后摊牌,如果时间差距很大,那么A和B就可以讨论A为什么要5个小时