Agile 发布频率是敏捷和瀑布之间唯一真正的区别吗?

Agile 发布频率是敏捷和瀑布之间唯一真正的区别吗?,agile,waterfall,Agile,Waterfall,显然,应用这两种方法对团队、客户、投资回报率等的影响是巨大的,并且是许多书籍和无休止的讨论和会议的主题 但当我仔细思考时,我很难找到两者之间的任何差异,而这些差异最终不会映射到一个根差异,即发布频率 瀑布花时间在设计上,然后编写代码,然后测试,最后发布。但是敏捷的步骤是完全相同的——只是每个步骤都更小 敏捷方法的一个关键部分是从每个版本中学习,并使用它来让更大的设计出现,而不是试图在一开始就预测它 但瀑布也能做到这一点。只是瀑布团队不是每3或4周学习一次,而是每6或9个月学习一次。但是瀑布式的设

显然,应用这两种方法对团队、客户、投资回报率等的影响是巨大的,并且是许多书籍和无休止的讨论和会议的主题

但当我仔细思考时,我很难找到两者之间的任何差异,而这些差异最终不会映射到一个根差异,即发布频率

瀑布花时间在设计上,然后编写代码,然后测试,最后发布。但是敏捷的步骤是完全相同的——只是每个步骤都更小

敏捷方法的一个关键部分是从每个版本中学习,并使用它来让更大的设计出现,而不是试图在一开始就预测它

但瀑布也能做到这一点。只是瀑布团队不是每3或4周学习一次,而是每6或9个月学习一次。但是瀑布式的设计仍然出现。也就是说,瀑布式版本2将反映在版本1中学到的东西。所以这个过程并没有什么不同,只是它以不同的速度执行

敏捷关注紧密的客户协作。但瀑布也能做到这一点。只是因为瀑布有较长的迭代时间,所以更需要以契约形式列出需求列表,以便在很长一段时间内让每个人都保持在同一页面上。但再一次,这只是频率的一个伪影。交付频率越高,对合同的需求就越低


我还缺少其他一些基本的差异吗?或者说,这真的只是频率的差异吗

  • 你设计产品
  • 你来建造它
  • 你测试一下
  • 你把它记录下来
  • 当您开发了所有的需求时,就可以发布它
敏捷

  • 首先设计最有价值的功能(或
    用户故事
  • 您可以测试它(TDD;)
  • 是你造的
  • 你把它记录下来
  • 您可以使用下一个最有价值的功能重复此过程
  • 您可以随时释放它
(在您完成每个功能之后或在时间段之后(通常称为
sprint
iteration

我很清楚两者的区别


使用敏捷,您可以通过频繁交付一小部分软件来调整要构建的内容。当你有足够的时间时,你可以停下来。

一个不同点是透明度:在开发周期中,开发团队之外的人是否对过程、进度、障碍以及最终结果有任何可见性

瀑布并不意味着透明。通常(尽管不一定)它的实现方式是“程序员进入他们的洞穴,n周/月后带着‘成品’出现”。业务专家提前编写规范,这可能是他们参与的结束——当程序员在实现过程中遇到问题时,这些规范可能不再可用。在周期结束之前,程序员可能不会向任何人展示任何可交付成果

敏捷需要透明性——它是基本结构的一部分。团队之外的人将(或至少可以)看到团队正在做什么。(如果不是的话,团队在撒谎说自己是敏捷的。)这可能是Scrum的每日站立会议,或者是大型可见图表和信息辐射器,或者是迭代结束时的演示。XP可能要求客户做出所有的业务决策,而不是让程序员在需求不明确时挠头,盲目地选择一个选项。这可能是因为测试人员和客户被认为是团队的一部分,而不是独立的团队


您当然可以透明地运行瀑布,在运行良好的瀑布商店中,您可能会这样做。但是对于敏捷来说,这是一个既定的因素。

更快的反馈——在所有规模上,而不仅仅是发布,当然是许多敏捷实践中的一个常见因素。但我并不认为这是敏捷和瀑布的主要区别。例如:

  • 瀑布式团队往往是围绕着一组狭隘的专业领域建立起来的。分析员/架构师/设计师/编码员/测试员往往是单独工作的独立群体。敏捷团队一起工作

  • 瀑布式流程依赖于大量文档和交接。敏捷团队以工作代码/产品为导向

  • 我不同意瀑布专注于客户协作。有一个单一的联络点,与整个开发团队的一个小组进行联络,通常只在流程的开始阶段。敏捷是建立在整个开发过程中持续协作的基础上的。非常不同

  • 瀑布式流程是围绕着这样一个理念构建的,即您可以在开发开始之前完全定义产品和体系结构。敏捷过程是围绕着这样一个理念构建的,即您在开发过程中发现产品/体系结构

瀑布花时间在设计上,然后编写代码,然后测试,最后发布。但是敏捷的步骤是完全相同的——只是每个步骤都更小

敏捷不是一个单一的实体,而是许多不同方法的保护伞

正如其他人所指出的,至少在其中一些国家,这些“阶段”的重叠更多,并且在正常顺序上有所不同

事实上,在XP中,顺序大致如下:

  • 测试(TDD/先测试)
  • 代码
  • 设计(重构)
  • 重复并最终释放
哪种类型反转了序列的大部分

测试、代码和设计都是在比发行版更好的级别上完成的

敏捷方法的一个关键部分是从每个版本中学习,并使用它来让更大的设计出现,而不是试图在一开始就预测它