Waterfall软件开发方法仍然可行吗?


14

根据我的经验,似乎瀑布模型已被证明过于僵化且对需求变化不敏感,因此在现代软件开发领域中不被视为可行的方法。更加敏捷,迭代的方法的发展和经过证明的往绩似乎表明,没有理由为什么任何人都应该遵循从项目开始到产品交付几乎没有改变的刚性过程。

在时间,成本和质量方面,瀑布式开发方法对于提供软件系统是否仍然可行?


3
因此,如果您还没有体验过,并且不想体验它,那么它就死了吗?我并不是在倡导这样做,但这似乎是一个奇怪的前提。
2012年

9
还没死 这不是当前的流行/趋势/“可以接受的”
保罗

2
@GrandmasterB“死”是指“充分证明不是最好的方法”
CFL_Jeff 2012年

3
@Rachel请不要继续阅读软件开发标签。这是一个元标记,将在以后进行清理
Thomas Owens

3
它没有死,只是在休息。渴望峡湾。;)
FrustratedWithFormsDesigner 2012年

Answers:


20

您所引用的瀑布模型从未打算成为实际项目中使用的过程模型。相反,它是一个稻草人。它确定了软件项目中存在的关键阶段和活动以及它们之间的最基本流程。这种过分简化的软件开发方法是有缺陷的,甚至是通过这种方式提出的。

从维基百科文章:

温斯顿·罗伊斯(Winston W. Royce)在1970年的文章中经常引用瀑布模型的第一个正式描述,尽管罗伊斯在本文中并未使用“瀑布”一词。罗伊斯(Royce)将此模型作为有缺陷,无法正常工作的模型的示例进行了介绍。

讨论的论文标题为“ 管理大型软件系统的开发”。在其中,Royce确实在第二页上展示了该模型。但是,紧接图示下方的文字继续显示为:

我相信这个概念,但是上述实施方式存在风险,并且会导致失败。

他在此之后讨论了开发阶段“完成”之后的测试问题,以及此处的故障如何导致重大的重新设计和代码更改,以及这些故障如何导致成本和进度超支。在整篇论文中,他将原始模型改进为在项目上确实可行的模型。最后,他以一个模型进行了介绍,该模型引入了原型设计,客户交互和人工制品的改进-这些思想最终对于1990年代末和2000年代初开始的敏捷运动至关重要。

回答您的问题:您正在询问的Waterfall从来都不是一种可行的方法,可以按时间和预算交付具有合理质量的软件项目。但是,还有其他计划驱动的方法与敏捷相反,它们可以并且确实可以在项目上工作。


关于敏捷的许多文章都使用“传统方法”来提及瀑布,而隐含瀑布在20世纪一直被使用。现在我知道我错了。
Ming-Tang

@ThomasOwens您介意列举其中几个other plan-driven methodologies that lie opposite of agile that can and do work on project吗?
Laiv

@Laiv螺旋模型往往比敏捷方法更受计划驱动-在开发工作软件之前,您需要进行更多的计划和分析。Cap Gemini SDM是另一个示例,尽管后来的修订确实增加了计划-执行-检查-执行周期,但再次在过程中内置了大量的前期计划和分析。许多可能是瀑布的某种变体,但是内置了某种反馈回路。如果您对领域有深入的了解并且要求相对稳定,则可能不需要敏捷方法的紧密反馈回路,并且可以进行更好的计划。
Thomas Owens

9

人们不使用教科书瀑布模型,而且可能永远不会使用。

这是一种理想的理论构造,其目的是使您思考系统开发中的步骤。主要要点是,您希望尽早进行较大的更改,因为一旦构建了很多代码,您将没有时间或金钱进行较大的更改。

尽管事实上它更多是一种思考方式而不是过程,但实际上,它仍然是许多企业(可能是大多数组织)去构建软件(或房屋,潜艇或其他任何东西……)的方式。

在现实世界中,您在各个阶段之间没有完全严格的界限,有时您会回到小型子项目的先前阶段。方法论告诉您的不是“不允许这些事情”。它告诉您的是“这些事情花费了您的金钱和/或时间”-因此,请避免在将来避免这种情况。

对Agile Snobs(TM)低头看待“老式”开发人员及其古怪,不可行的瀑布方法,这一切都很好,但事实是,敏捷也不是灵丹妙药。有些项目无法使用敏捷来构建,许多团队认为他们是敏捷的,但实际上只是草率而没有组织。

方法论不是重点。关键是要考虑自己在做什么为什么要那样做 -并在最短的合理时间内为客户带来最大的价值。


显然,您对我的“人”体验非常不同。在过去的30年中,我曾在许多公司中工作,这些公司都使用(并且仍然使用)教科书瀑布方法。毫不奇怪,它不起作用。
David Arno

@DavidArno在软件环境中,我所见过的最接近“瀑布”教科书的地方是在一家公司中,该公司构建的软件可以控制火车切换。这样做的动机并不是因为错误而使某人真正死亡。我想这也可能发生在进行嵌入式编程的地方,在这些地方您不想构建一百万个东西只是为了发现由于错误而导致失败。我倾向于认为即使在这些情况下,瀑布也比理想的实践更理想。如您所指出-结果在一定程度上不可避免地会失败。
乔尔·布朗

8

人们通常不将神话般的瀑布过程与敏捷过程进行比较,因此不能认为它是死的。真正的瀑布式流程仍然有效,并且在按时交付符合用户期望的预算软件方面表现出色。


5
不确定“神话”瀑布过程和“真实”瀑布过程之间有什么区别。你能解释一下吗?
CFL_Jeff 2012年

6
敏捷支持者描述的瀑布过程通常是一个稻草人en.wikipedia.org/wiki/Straw_man
jfrankcarr 2012年

11
如果您在答案中解释了敏捷支持者如何创建一个无法正常工作但无法正常运行的“稻草人”流程,那么这将是一个更好的答案。
罗伯特·哈维

4
-1表示:“他们在交付...方面表现出色”。事实是,这是一种洗礼。像所有软件方法论一样,有时它起作用,有时却不起作用。在真正的瀑布方法的情况下,我都看到过。
riwalk 2012年

2
我将不得不说,[需要引用]此答案。和-1,直到提供为止。特别是“擅长按时交付满足用户期望的预算软件” CHAOS报告与您不同意。
Malfist 2012年

5

询问您正在做什么的一种更好的方法可能是,“何时不那么迭代,而更形式化地更好”?

在某些情况下是这种情况:

  • 要求不变时。

  • 满足新的要求比达到原始要求的100%重要。

  • 当所有技术组件都成熟并得到充分理解时。

从某种意义上说,您可以采取相反的措施,使自己变得敏捷。

很少有技术适用于任何地方。很少有没有用。


1
世界上什么是“无用的”或“更正式的”?
亚伦诺特,2012年

1
@Aaronaught-在iPhone上用胖拇指键入的“较少迭代”和“更正式”。:-)
MathAttack 2012年

1
我从来没有在一个满足这些先决条件之一的项目中工作过。:)
Theodor

3

是的,它仍然非常活跃,尽管今天使用的是更常见的“ V模型 ”。

在这两种情况下,敏捷都存在的问题是解决方案几乎永无止境,客户可以继续请求更改,而开发将继续迭代解决这些更改。对于基于时间和材料成本的项目,此方法非常有效。对于具有固定成本的项目,没有。

对于这些固定成本的项目,客户几乎总是希望预定义的里程碑可以显示进度,但是,这些更多是正式的书面形式,而不是工作代码。对于这样的客户,书面规格成为项目,而软件开发是次要考虑的项目(因为他们认为,如果您有一个定义明确的项目,则软件应该易于开发)。这些公司也是大量使用廉价的外包开发资源的公司。

因此,如果您有固定的金钱或时间,不要期望需求会改变或不允许改变任何需求,并且期望提供大量的书面文档,那么瀑布模型是唯一的选择合理。

可以在这些项目的中间阶段引入敏捷来进行开发,但是您仍然需要根据需求创建规格的加速阶段,以及现场安装和测试软件的减速阶段。敏捷对这些情况的反应不佳。


只要范围也未固定,敏捷就可以在固定的金钱或时间下很好地工作。另一点是,客户/承包商可以选择合同的类型(T&M,固定成本或介于两者之间)以与特定的开发方法(敏捷或瀑布式)保持一致-这不是预先确定的。
DNA

1

给谁?我所处理的大多数经理仍然使用Waterfall Software Dev Process进行调度,并且上级似乎更喜欢它以便进行调度。

实际上,我所知很少的开发人员相信它可以工作甚至是有效的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.