敏捷开发和迭代开发是一回事么?

对于从事IT行业工作的人来说,每个人都熟悉“敏捷开发”一词。敏捷开发不是一种技术或工具,而只是一种软件开发方法,也可以简单地理解为一种思想方法。那么什么是敏捷开发?敏捷开发和迭代开发是一回事么?

什么是敏捷开发?敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

什么是迭代开发?迭代开发:在迭代开发中,整个开发工作被组织为一系列的短小的、固定长(如3周)的小项目,被称为一系列的迭代,这叫迭代开发。每一次迭代都包括了定义、需求分析、设计、实现与测试。

什么是瀑布式开发?传统的开发有个专有名词叫“瀑布式开发”,分为5个阶段:需求分析、设计、编码、测试和维护。这套方法定义了很完备的过程规范、严格遵从这种方式会使得研发运作过程十分严谨。传统的瀑布式开发要求针对客户需求写出详细的分析说明书,仅仅这一点就耗费了大量时间。

敏捷开发和迭代开发是一回事么?敏捷开发就是以用户的需求进化为核心,迅速迭代、循序渐进地进行软件开发的方法,核心是快速响应和持续迭代。要保证在迭代周期内,团队成员思想保持高度一致、以共同的节奏和共同的周期完成周期性运转。迭代也让团队内外有着共同的预期,知道什么时间点该做什么,该交付什么出来。

和瀑布式开发相比,敏捷开发的特点就是“小步快跑、尽早交付”。在市场环境和客户需求变更非常迅速的情况下,为了让需求方尽早地看到结果,并给出反馈,以小步快跑进行开发并尽早地交付新的版本不失为一种好的解决方式。毕竟在互联网时代,可用的产品一定胜过完备的文档,并且及时的迭代可以不断修正问题。

敏捷开发和迭代开发都有采用迭代的方法进行软件开发。

敏捷开发与迭代式开发是整体与局部的关系,在讨论迭代时,我们还会被一个问题困扰:Scrum guide中把固定时间盒周期称为sprint(冲刺),但是为什么大家在平时都愿意把它称为迭代(iteration)呢?

大家先看下iteration和sprint这两个英文单词的本源之意。

以下是剑桥词典对于iteration和sprint的解释:

Iteration :

the process of doing something again and again, usually to improve it, or one of the times you do it.

Sprint:

to run as fast as you can over a short distance, either in a race or because you are in a great hurry to get somewhere。

在wiki中:

迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。

在Scrum中,Sprint 说的是类似橄榄球比赛中的冲刺:大家团结一致,为了完成该Sprint的目标疯狂向前冲。

我们可以看到迭代的重点在于重复(again and again)过程,而冲刺的重点则是在相对短的时间尽快(run as fast as you can)到达终点。

早在20世纪50年代末期,软件领域中就出现了迭代模型。

最早的迭代过程可能被描述为“分段模型(stagewise model)”。迭代模型是RUP推荐的周期模型。被定义为:迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。

在某种程度上,开发迭代是一次完整地经过所有工作流程的过程:需求分析、设计、实施和测试工作流程。

实质上,它类似小型的瀑布式项目。

RUP认为,所有的阶段都可以细分为迭代,每一次的迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集。

迭代开发承认我们在把事情做对之前有可能做错,在把事情做好之前有可能做坏。(Goldberg and Rubin,1995)

迭代开发本身是一种有计划的修改策略:通过多次开发来改善正在构建的特性,逐步得出一个完善的解决方案。例如,对一个知之甚少的产品,开始时可以先创建原型以获得重要知识,接着可以创建一个更好一点的修订版,再接下来是一个相当好的版本。例如,在文章写作过程中,我在收到反馈以及对如何表达主题有了更深刻的理解后,把每章都修改了几次。

在scrum框架中则整合了迭代和产品增量2个概念使用冲刺(sprint)来作为固定时间盒的描述。Sprint 是 Scrum 的核心,其长度(持续时间)为一个月或更短时间的限时,在这段时间内构建一个“完成的”、可用的和潜在可发布的产品增量。在整个开发过程期间, Sprint 的长度通常保持一致。前一个 Sprint 结束后,新的下一个 Sprint 紧接着立即开始。

冲刺则更强调在短的时间内“撞线”,团队成员确定冲刺的目标之后,以尽可能快的速度来进行协同工作,帮助团队在冲刺结束的时候达成目标。这个目标可能是产品增量,也可能是一些独立的特性,但是在Scrum中称其为PSP(潜在可交付)。冲刺的另外一个特性则是在每个冲刺中一定要有计划/评审/回顾/每日站会等仪式来确保冲刺能够达到应用的效果。而在迭代中则不必须要。

相关文章

扫描二维码关注我们

扫描二维码 关注我们