敏捷在路上 (一)为什么敏捷
前记
对于敏捷软件开发,听说已久。最近刚刚开始走上敏捷的路上,所以记下自己一路上感受和收获。
为什么我们要采用敏捷软件开发呢?这也许是所有刚开始接触“敏捷”这个概念的第一个问题,那我们就从第一个问题开始我的旅程。通常我们在开发中引入一些新的实践无非就两个原因,要么就是我们现有的开发模式有问题,要么就是这个新的开发模式更有效率。那么我们首先可以回顾一下我们现在被大多数团队采用的瀑布式开发。
在瀑布式开发中我们有开发过程分为一下几个阶段:分析,设计,实现,测试。其中每一个阶段的产出作为下一个阶段的输入。而这里隐含了两个假设:
- 当我进入设计阶段的时候,我假设我的分析是正确的并且不会再变化。
- 当我进入实现阶段的时候,我假设我的设计是满足需求,并且同时满足第一个假设。
所以当我们进入测试阶段,我只需要测试实现。而只有当这些假设成立都成立,瀑布式开发才能真正的工作。然而的现实是:
- 需求是变化的: 因为我们在做定制化软件开发,而当需求发生变化的时候,我们有两种选择: 我们继续遵循我们和用户的合约,然后提交给用户一个并不是他想要的软件;我们重新分析需求,结果是我们走的越远,我们付出的代价越大。
- 无法保证设计一定满足需求: 因为我们的测试阶段只输入只是实现阶段的产出,所以当需求或设计在此时发现不正确是我们团队需要付出极大的代价弥补这些。情况好的化就是整个团队不停的加班,否则就是项目失败。
那么是不是引入敏捷开发,需求就不会变化了吗?就一定能保证设计满足需求了吗?当然不是,引入敏捷软件开发,需求依然在变化,设计也还是可能不满足需求。那么我们引入敏捷软件开发的意义何在呢?我们可以深入的想想,需求变化和设计不满足需求带来最终的结果是什么呢?
浪费
而这种浪费在被瀑布式开发这种阶段式的开发表现的极为严重,而敏捷开发的引入是为了最小化这种浪费。要减少浪费,首先我们需要明白浪费的原因是阶段式的开发模式,我们的步子迈的太大了。敏捷要求我们步子尽量小一点,我们小步的前进,这样我们倒回来一步的代价就变小了。