敏捷开发

2018年01月08日 11:25 | 2872次浏览

在Web开发领域你大概听到过“敏捷开发”,或者接触过一些敏捷的方法和工具,比如站立会议、结对编程(Pair Programming)、持续集成,等等,你甚至可能正某个使用XP或Scrum开发方式的团队里工作(XP和Scrum都是敏捷的一种流派)。那么敏捷究竟是什么?为什么要敏捷以及如何做到敏捷呢?

什么是敏捷开发?为什么要敏捷?

敏捷开发是一套软件工程理论,同时也是一套实践方法;区别于传统的瀑布流(waterfall)模式,敏捷强调积极地适应需求的变化(与之相对,传统瀑布流模式在一开始就锁定需求,直至最终产品完成),通过渐进的开发方法。

按照Wiki的定义——“敏捷开发(agile software development)是指一系列的软件开发原则,在这种开发中需求和解决方案都逐渐演化,通过由自组织(self-organizing)、跨功能(cross-functional)的开发人员组成的开发团队的合作来达到。”1

这句话概述了敏捷的目标和方法:敏捷是为了适应需求的变化,提供逐渐演化的解决方案,由自组织和跨功能的开发人员组成的团队合作达成。下面详细阐述这句话的含义。

变化的需求

需求会变化,主要是因为有些软件在一开始难以预计最终的需求,或者需求随着时间的推移在改变(比如三月前的需求跟三个月后的不一样,如果一个软件按三个月前的需求开发了三个月,那么完成之后也是无用的)。这些都是传统瀑布流模式难以应对的,而敏捷开发可以做得很好。

迭代

逐渐演化的解决方案一般通过迭代(iteration)来完成。下图通过与瀑布流模式的对比解释了什么是迭代:

通常瀑布流模式通常包含“计划”、“分析”、“设计”、“编码”、“测试”、“部署”这几个阶段,最后产出可用的软件产品;迭代则是把整个产品开发周期分割为若干个小的迭代周期(一般1~4个礼拜),在每个迭代周期内完成从“计划”到“部署”的全部工作,并且在每个迭代周期结束时都产出可以工作的软件。通过在每个迭代周期新增或改进一部分产品功能,使产品变得越来越完善;同时,需求的变化也会得到及时的处理。


自组织

自组织(self-organizing)的团队是一个自治团队:

每个成员都能自主工作,而不是由他人指派工作

成员之间可以有效地(面对面)交流

相互信任,相互配合,共同完成工作

1、敏捷开发强调自治团队的重要性和积极性

2、如果团队不能按照敏捷的方式工作,那么开发就无法达到敏捷。


跨功能

跨功能(cross-functional)是指团队成员来自相关的各个部门。其中很重要的一点是:须要有客户代表加入,共同开发。客户代表的作用是传达客户的业务需求、随时解答各种关于业务的细节问题;并在每个迭代周期结束时验收产品,保证产品的功能都是客户需要的并且达到了客户的需求。这是敏捷开发适应变化的关键之一:如果没有客户的参与,开发会很快失去方向或者向错误的方向进行。


如何进行敏捷开发?

上面提到,敏捷需要“组织自治、跨功能的团队进行迭代式开发”。但这句话还是太宽泛了,不足以指导具体的开发活动。实际上,敏捷不只是一套理论,更是一套详细的实践指南,告诉你具体应该怎么做,包括:如何在一个迭代中做计划、如何进行有效率的沟通、每个开发者如何领取任务……等等。这套行动指南的内容十分丰富,而且在具体做法上形成了不同的流派,如XP(eXtreme Programming,极限编程)和Scrum等。但不论是何流派,在敏捷的宗旨上都是一致的。如果你想进一步了解敏捷开发,我推荐:

另外,敏捷还涉及一些工具,它们能帮助你更好/更容易地达到敏捷,包括:

  • 版本控制系统,如Git——敏捷对版本控制系统没有特殊的要求,但是敏捷的实践要求这种版本控制系统必须具有很好的“分支-合并”功能,在这方面Git是一个上佳选择。

  • 持续集成(Continuous Integration)工具,如Jenkins

  • 项目管理/协作系统,如Rally

  • 敏捷的Web开发框架,如Ruby on Rails

敏捷开发的内涵和实践都十分丰富,即使你不能从头到尾读完一本敏捷专著,了解一下敏捷的基本概念也是十分有益的。



小说《我是全球混乱的源头》

感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程


上一篇:UDP编程 下一篇:redis PUBSUB
^