瀑布花时间在设计上,然后是编写代码,然后是测试,最后是发布。但是敏捷执行完全相同的一组步骤——只是每个步骤都更小。
敏捷不是一个单一的实体,而是许多不同方法的保护伞。
正如其他人所指出的那样,至少在其中一些中,这些“阶段”重叠得更多,并且正常顺序有所不同。
事实上,在 XP 中,顺序或多或少是:
- 测试(TDD/测试优先)
- 代码
- 设计(重构)
- 重复并最终释放
哪种反转了大部分序列。
并且测试、代码和设计都比发布完成得更好。
敏捷方法的一个关键部分是从每个版本中学习并使用它来让更大的设计出现,而不是在一开始就试图预测它。
但瀑布也这样做。只是瀑布团队不是每 3 或 4 周学习一次,而是每 6 或 9 个月才学习一次。但瀑布设计仍然出现。也就是说,瀑布式第 2 版将反映第 1 版中学到的内容。所以这个过程没有什么不同,只是它以不同的速度执行。
这在很大程度上取决于实践。如DOD-STD-2167A中所述,(第 4.1.1 节)瀑布模型确实允许开发过程的各个阶段重叠和迭代(简而言之,有点敏捷)。但大多数实际实践都忽略了这一点,直到项目结束才学习。
敏捷专注于密切的客户协作。但瀑布也这样做。只是由于瀑布的迭代时间较长,因此更需要以合同形式列举的需求列表,以使每个人在很长一段时间内保持在同一页面上。但同样,这只是频率的产物。交付频率越高,对合同的需求就越低。
再次依赖实践。我在上面提到的规范中根本没有看到太多提到客户责任,更不用说连续了。
正如 Jerry Coffin 在评论中指出的那样,Waterfall 确实是一个曾经支持敏捷的稻草人(事实上我现在正在使用它......),但值得查看这份文档并思考它的含义以及它的含义被应用。
该规范确实显示了对合同、计划和文件的交付和维护以及遵守计划的高度关注。我相信这确实延续到了实践中。
与敏捷的对比不是时间盒,而是价值观的变化。
正如敏捷宣言所宣称的:
我们正在通过开发软件并帮助他人开发软件来发现更好的方法。通过这项工作,我们开始重视:
个人和交互超过流程和工具
工作软件优于综合文档
合同谈判中的客户协作
响应变化而不是遵循计划
也就是说,虽然右边的项目有价值,但我们更重视左边的项目。
奇怪的是,这个价值观声明没有提到交付频率(尽管下面的“原则”部分有)。然而,它确实将价值体系从计划、文件和合同转移到了它所属的地方,真正交付了工作软件。
频繁发布是实现这些价值的一种机制。
如果您在“迷你瀑布”中工作,它确实会比稻草人 BDUF 瀑布更灵活一些。但交付频率肯定不是全部。