瀑布模型花费时间在设计、编写代码、测试和最终发布上。但是,敏捷开发也执行同样的步骤 - 只是每个步骤更小。
敏捷开发不是单一实体,而是许多不同方法的总称。
至少在其中一些方法中,如其他人所指出的,这些“阶段”重叠得更多,并且顺序有所不同。
事实上,在XP中,顺序或多或少为:
- 测试(TDD /先测试)
- 编码
- 设计(重构)
- 重复并最终发布
这几乎颠倒了大部分顺序。
而测试、编码和设计的精度比发布要高。
敏捷方法的一个关键部分是从每次发布中学习,并使用它来让更大的设计出现,而不是试图在开始时预测它。
但是瀑布模型也是如此。只是瀑布团队每6到9个月才学习一次,而不是每3到4周学习一次。但是瀑布设计仍然会出现。也就是说,瀑布发布2将反映在瀑布发布1中学到的内容。因此,过程并没有不同,只是以不同的速度执行。
这在很大程度上取决于实践。正如
DOD-STD-2167A(第4.1.1节)所述,瀑布模型确实允许开发过程的阶段重叠和迭代(简而言之,有点敏捷)。但是,大多数实际实践都错过了这一点,直到项目结束才开始学习。
敏捷方法专注于与客户紧密合作。但是瀑布模型也是如此。只是由于瀑布具有更长的迭代时间,因此需要一个以合同形式列出的需求清单,以在长时间内使每个人保持一致。但是,这再次只是频率的产物。交付频率越高,需要合同的需求就越低。
再次强调,这取决于实践。我在上面引用的规范中几乎没有提到客户责任,更不用说持续了。
正如Jerry Coffin在评论中指出的,瀑布模型确实是用来支持敏捷开发的稻草人(就像我现在正在使用它一样...),但是值得看看这个文档并考虑它意味着什么以及如何应用它。
该规范所显示的是对合同、交付和计划和文档的维护以及遵守计划的强烈关注。我相信这种情况确实发生了。
与敏捷方法的对比不是时间盒,而是价值观的变化。
正如
《敏捷宣言》所宣布的那样:
我们正在通过实践和帮助他人实践,揭示开发软件的更好方式。通过这项工作,我们开始重视:
个体和交互胜过流程和工具
可工作的软件胜过详尽的文档
与客户合作胜过合同谈判
响应变化胜过遵循计划
也就是说,虽然右边的项目有其价值,但我们更重视左边的项目。
有趣的是,这个价值观声明没有提及交付频率(尽管下面的“原则”部分有)。然而,它确实将价值体系从计划、文件和合同转移到了真正交付可工作的软件上。
频繁发布是实现这些价值的一种机制。
如果您在“微型瀑布”中工作,它确实比稻草人BDUF瀑布更加敏捷。但是,交付频率当然不是全部。