敏捷开发入门教程

敏捷开发(agile development)是很是流行的软件开发方法。据统计,2018年90%的软件开发采用敏捷开发。程序员

可是,到底什么是敏捷开发,能说清的人却很少。本文尝试用简洁易懂的语言,解释敏捷开发。架构

1、迭代开发

敏捷开发的核心是迭代开发(iterative development)。敏捷必定是采用迭代开发的方式。ide

那么什么是"迭代开发"呢?迭代的英文是 iterative,直译为"重复",迭代开发其实就是"重复开发"。工具

对于大型软件项目,传统的开发方式是采用一个大周期(好比一年)进行开发,整个过程就是一次"大开发";迭代开发的方式则不同,它将开发过程拆分红多个小周期,即一次"大开发"变成屡次"小开发",每次小开发都是一样的流程,因此看上去就好像重复在作一样的步骤。测试

举例来讲,SpaceX 公司想造一个大推力火箭,将人类送到火星。可是,它不是一开始就造大火箭,而是先造一个最简陋的小火箭 Falcon 1。结果,第一次发射就爆炸了,直到第四次发射,才成功进入轨道。而后,开发了中型火箭 Falcon 9,九年中发射了70次。最后,才开发 Falcon 重型火箭。若是 SpaceX 不采用迭代开发,它可能直到如今还没法上天。ui

迭代开发将一个大任务,分解成屡次连续的开发,本质就是逐步改进。开发者先快速发布一个有效但不完美的最简版本,而后不断迭代。每一次迭代都包含规划、设计、编码、测试、评估五个步骤,不断改进产品,添加新功能。经过频繁的发布,以及跟踪对前一次迭代的反馈,最终接近较完善的产品形态。编码

2、增量开发

迭代开发只是要求将开发分红多个迭代,并无回答一个重要的问题:怎么划分迭代,哪一个任务在这个迭代,哪一个任务在下个迭代?这时,通常采用"增量开发"(incremental development)划分迭代。lua

所谓"增量开发",指的是软件的每一个版本,都会新增一个用户能够感知的完整功能。也就是说,按照新增功能来划分迭代。spa

举例来讲,房产公司开发一个10栋楼的小区。若是采用增量开发的模式,该公司第一个迭代就是交付一号楼,第二个迭代交付二号楼......每一个迭代都是完成一栋完整的楼。而不是第一个迭代挖好10栋楼的地基,第二个迭代建好每栋楼的骨架,第三个迭代架设屋顶......设计

增量开发加上迭代开发,才算真正的敏捷开发。

3、敏捷开发的好处

3.1 早期交付

敏捷开发的第一个好处,就是早期交付,从而大大下降成本。

仍是以上一节的房产公司为例,若是按照传统的"瀑布开发模式",先挖10栋楼的地基、再盖骨架、而后架设屋顶,每一个阶段都等到前一个阶段完成后开始,可能须要两年才能一次性交付10栋楼。也就是说,若是不考虑预售,该项目必须等到两年后才能回款。

敏捷开发是六个月后交付一号楼,后面每两个月交付一栋楼。所以,半年就能回款10%,后面每月都会有现金流,资金压力就大大减轻了。

3.2 下降风险

敏捷开发的第二个好处是,及时了解市场需求,下降产品不适用的风险。

请想想,哪种状况损失比较小:10栋楼都造好之后,才发现卖不出去,仍是造好第一栋楼,就发现卖不出去,从而改进或停建后面9栋楼?

对于软件项目来讲,先有一个原型产品,了解市场的接受程度,每每是项目成功的关键。有一本书叫作《梦断代码》,副标题就是"20+个程序员,三年时间,4732个bug,100+万美圆,最后失败的故事",这就是没有采用敏捷开发的结果。相反的,Instagram 最初是一个地理位置打卡 App,后来发现用户不怎么在意地理位置,更喜欢上传照片,就改作照片上传软件,结果成了独角兽。

因为敏捷开发能够不断试错,找出对业务最重要的功能,而后经过迭代,调整软件方向。相比传统方式,大大增长了产品成功的可能性。若是市场需求不肯定,或者你对该领域不熟悉,那么敏捷开发几乎是惟一可行的应对方式。

4、如何进行每一次迭代

虽然敏捷开发将软件开发分红多个迭代,可是也要求,每次迭代都是一个完整的软件开发周期,必须按照软件工程的方法论,进行正规的流程管理。

具体来讲,每次迭代都必须依次完成如下五个步骤。

  1. 需求分析(requirements analysis)
  2. 设计(design)
  3. 编码(coding)
  4. 测试(testing)
  5. 部署和评估(deployment / evaluation)

每一个迭代大约持续2~6周。

5、敏捷开发的价值观

《敏捷软件开发宣言》里面提到四个价值观。

  • 程序员的主观能动性,以及程序员之间的互动,优于既定流程和工具。
  • 软件可以运行,优于详尽的文档。
  • 跟客户的密切协做,优于合同和谈判。
  • 可以响应变化,优于遵循计划。

6、十二条原则

该宣言还提出十二条敏捷开发的原则。

  1. 经过早期和持续交付有价值的软件,实现客户满意度。
  2. 欢迎不断变化的需求,即便是在项目开发的后期。要善于利用需求变动,帮助客户得到竞争优点。
  3. 不断交付可用的软件,周期一般是几周,越短越好。
  4. 项目过程当中,业务人员与开发人员必须在一块儿工做。
  5. 项目必须围绕那些有内在动力的我的而创建,他们应该受到信任。
  6. 面对面交谈是最好的沟通方式。
  7. 可用性是衡量进度的主要指标。
  8. 提倡可持续的开发,保持稳定的进展速度。
  9. 不断关注技术是否优秀,设计是否良好。
  10. 简单性相当重要,尽最大可能减小没必要要的工做。
  11. 最好的架构、要求和设计,来自团队内部自发的认识。
  12. 团队要按期反思如何更有效,并相应地进行调整。

7、参考连接

(完)

相关文章
相关标签/搜索