敏捷开发——互联网时代的软件开发方式
有人要问,这和敏捷有毛关系?
答:关系大了
因为敏捷开发的核心思想恰恰就是小步快跑、不断迭代,在一次次的迭代升级中最终完成那个『大目标』!
正因为敏捷开发的这种不断迭代升级的开发模式,使得其更加适合当今瞬息万变的互联网,可以说是互联网时代的软件开发方式。
好了,下面请看官们聚精会神,用5分钟完成你和敏捷开发的第一次全接触:
一、什么是敏捷开发?
如果用一句话来简单认识一下敏捷开发这四个字,可以这么说:一种应对快速变化需求的软件开发能力
PS:官方解释请自行前往 Agile software development
要理解那句话的含义,我们先来看一张图:
假设你的客户要求你造出一辆兰博基尼lp700,交付时间很紧迫,你有两种选择:
第一种:如图1
先出设计稿,设计通过后开始施工,先造轮胎->底盘->发动机->外壳->内饰->喷漆->打磨抛光->验车->交付,当你没日没夜的终于赶在工期前自信满满的把车交到客户手上的时候,客户却告诉你,我一年前想买一辆兰博基尼,现在觉得这太low了,还是要一辆特斯拉 Model 3吧,这时你的一脸懵逼何处安放。。。
第二种:如图2
先做辆酷炫滑板车,满足客户家小孩儿玩耍的需求;再改造成时尚单车,满足客户上班骑行的需求;再改造成哈雷摩托,满足客户周末拉风的需求;最后依据客户迭代升级成敞篷酷炫的电动特斯拉跑车,客户全程满意,最终妥妥地把支票递给你~~
如果是你,会选哪种?
其实如果把造车换成开发一个软件项目的话,那么第一种方式我们称为传统的瀑布式开发;第二种方式就是我们的敏捷式开发。
请注意上述例子中有两个关键词:需求变更和迭代升级。
由于现实生活中,客户的需求是随着市场在不断变化的,因此那种一张图纸做到底的方式显然无法适应客户频繁变化的需求;通过迭代升级,每一次迭代都能够交付一个最小可用的产品(MVP),客户可以基于此产品继续提出新的需求来不断完善。
如上图所示,一个大的项目在敏捷开发的模式中被分解成多个『小目标』,通过完成所有这些『小目标』,一个大的项目随之完成。
二、互联网时代为什么需要敏捷开发?
这个问题总结下来有两点:快速试错和拥抱变化。
今年张小龙在WXG大会上提到:
『我们今天可以想一些与众不同的点子,然后我们可以很快就看到效果,因为我们可以很快把它上线了,然后可以去验证,如果不对就下线,如果还有改进余地,下个版本再去改它。这是一个能够持续实现你的想法的过程』
张小龙所说的上线、验证、改进的持续循环流程实际上就是一个快速试错和拥抱变化的过程。 当今的互联网,市场变化日新月异,在不断变化的市场中取得成功就要拥有快速试错的能力。
下面是滴滴打车最新的客户端截图。从图中可以看到,滴滴支持的全部车辆服务已经覆盖到了快车、小巴、出租车、顺风车、专车等多达10种服务,而大众刚刚熟悉滴滴时,滴滴仅有出租车、快车和顺风车三种车型。
试想如果滴滴从一开始就计划设计出10种车型再开始上线推广,那估计现在满街跑的就该是Uber或者快的或者什么滴而不是滴滴了。商机转瞬即逝,正是在一次次的上线中,从车主、用户及市场的反馈中不断调整迭代,才造就了今天的滴滴,而这正是敏捷思想的精髓所在。
三、有哪些公司在使用敏捷开发
可以说,在如今的软件开发领域,敏捷开发模式已经成为主流,从BAT等互联网一线大厂到中小创业公司,从传统的银行、保险等企业,再到北大、清华的图书馆,都在使用敏捷开发。
国外使用敏捷开发的公司更不用说, 微软、Google、Facebook的工程师们都已采用敏捷开发的模式进行软件项目的开发。
四、敏捷开发适合哪些项目?
实际上,敏捷开发比较适合那种有明显紧急的时间要求、项目本身复杂程度高且比较新颖、团队自主性强的项目。
首先,这个项目一定是有明确的时间要求,要在某个较短的时间内完成交付成品,传统的瀑布模型无法在如此短的时间内做出快速反应,保持对项目的紧张性和专注性是敏捷开发的优势之一。
其次,这个项目本身复杂度要高些且比较新颖。一般来说,软件开发项目的复杂度都很高,
最后,团队成员自主性要强。实施敏捷开发的基础就是要有一个高度自觉和自主性的团队,敏捷开发是以人为本的。
装修就是一个很好的敏捷项目实践,举个例子:
小明是一名Web开发程序员,经过多年奋斗终于在帝都买了一套100平米的豪宅,接下来的头等大事就是装修。 装修可以看成一个很典型的使用敏捷开发的项目:
紧迫感--恩,装修的工期是非常有限的,因此必须保证在规定时间内完成
复杂度--装修过的人懂的,丈量、设计、采购、装修等等环节,每个环节之间的配合都很关键
团队自主性--全家总动员,热情节节高,你懂的~
我们可以把每个环节想象成一次小的迭代过程,通过完成一次次的迭代最终完成整个项目。
五、相比传统,为什么高效?
敏捷开发讲求Idea的快速落地、高效实践。
怎么理解这句话呢?我们还是先来看一下敏捷开发和瀑布式开发的流程图,左下方是瀑布式开发,右上方是敏捷开发。
首先是人员成本:
试想你是一个程序猿,如果你工作在瀑布模型中,那么当需求人员在与客户沟通需求中,需求文档还没有出来,由于瀑布模型以文档驱动,此时你是处于空闲状态的,你后面的测试兄弟也是如此;而在敏捷模式中,每个开发测试人员都是全程参与每个迭代的,因此人员充分参与所有过程。
其次是沟通成本:
在传统的瀑布模型中,需求、开发、测试人员都在不同的Team中,假设开发要与需求沟通,那么要跨Team去沟通,时间和空间无法保证同步,因此沟通成本较高;而敏捷开发团队中的人员都在一个Scrum Team中,团队不大,沟通起来成本很小。
最后是风险成本:
对于瀑布模式,最大的风险成本来源于一旦开发过程中有需求变更或者严重的问题,所有流程都要回滚到上个阶段推倒重来,且越到后期风险越高,修改的成本越大;而对敏捷模式,可以很灵活轻松的面对需求变更,有任何bug、需求更改可以放到下一个迭代去做,大大降低了开发过程中的风险成本。
六、以人为本
敏捷开发的十二条原则中有一条叫做:激发个体的斗志,以他们为核心搭建项目。
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,在敏捷开发过程中,人是第一位的,过程是第二位的,当然也对个人的能力和自主性提出了更高的要求
七、敏捷开发流程总览
说了这么多,来看一张真正的敏捷开发过程SCRUM的完整流程图吧:
这张图描述了一个敏捷开发项目(Scrum)中的团队成员、流程、交付结果及主要事件。