敏捷开发方法是否有可行的替代方案?


47

两种主要的软件开发方法是瀑布式和敏捷式。在讨论这两者时,通常会着重于将它们区分开的特定实践(结对编程,TDD等与功能规范,大型前期设计等)。

但是真正的差异要深得多,因为这些实践来自一种哲学。

Waterfall说: 更改成本很高,因此应将其最小化。
敏捷说: 改变是不可避免的,所以要使改变便宜。

我的问题是,不管您如何看待TDD或功能规格,瀑布式开发方法真的可行吗?

真的有人认为对于希望交付有价值的软件的人来说,最小化软件更改是一个可行的选择吗?还是真正的问题是,哪种方式在我们的情况下最能应对不可避免的变化?


1
有趣的问题。期待答案。
DevSolo


3
@FarmBoy-好问题。我对敏捷哲学的看法有所不同。我将其写为“敏捷说:改变是不可避免的,所以便宜就可以确定改变的成本。” 变更可能仍然是非常昂贵的,但是在敏捷中,您可以快速而便宜地发现这一点,以便我们始终知道变更的成本。用另一种方式来形容它使人们认为,既然他们在做敏捷,变革将是廉价的。无论采用什么流程,某些更改都会花费很多。
麦克2

1
@Yannis Rizos:为什么没有社区投票就独自结束这个有趣的问题?

1
@ Pierre303因为这个问题,这里的讨论提出了这个问题。
Ryathal

Answers:


59

当然瀑布是可行的。它把我们带到了月球!

这是一位敏捷教练在这里讲话!

除非您能清楚地确定与项目管理方式有关的问题,否则就没有更改的正当理由。

作为敏捷方法和瀑布方法的替代方法,我将建议您使用方法。适用于您的特定业务,您的特定团队,您的产品,您的工作方式,您的公司文化……这就是为什么Scrum被称为简单框架而不是方法。

想要实施一种方法,因为您喜欢的博客上有人谈论它,就像让问题不做任何事情一样愚蠢。


10
在您的方法论上+1,下一位告诉我SCRUM的敏捷教练将是唯一的办法;)
Martijn Verburg 2010年

1
@karianna:我是专门做SCRUM的,但是有时候,这不合适。另一方面,我还看到团队试图将SCRUM出售给他们的老板,认为这将解决他们的问题。他们失败了,因为问题不是他们的老板或总理。没有单一的规则。每种情况都有其解决方案。是的,大多数组织问题都可以通过敏捷技术解决,但是敏捷不是灵丹妙药。

5
不只是月亮。航天飞机的嵌入式系统中有约100万行C代码。在大约30年的时间里,他们只有2个bug进入了生产环境。
丹·尼利

2
瀑布还杀了前三名宇航员。这种将Apollo程序用作Waterfall的海报子的坚持充其量是无知的。当两个程序完全成为财务难题时,瀑布被认为是负责任的,而航天飞机是原始的规格用于“太空卡车”时,过度设计,脆弱,昂贵的“太空法拉利”。我敢肯定,SpaceX会不同意Waterfall。

4
@DanNeely航天飞机软件的高质量水平并不便宜。显然,价格约为每代码$ 1000 。

21

首先,我不同意您的陈述:

Waterfall说:更改成本很高,因此应将其最小化。
敏捷说:改变是不可避免的,所以要使改变便宜。

我的解释是:

Waterfall说:客户知道他们想要什么。
敏捷说:客户不知道他们想要什么,因此我们将不得不制作一些不同的版本。

我见过的“瀑布”的最佳实现是一个庞大的集成项目,该项目具有非常大的金融客户,并且涉及大约40多个子项目。我们提供的桌面和网站软件包只是这40多个子项目中的一个。虽然我认为他们过分地浪费了别人的钱,但他们把自己的东西放在一起,并让40多艘不同的船一起编队。该项目在目标日期上线(目标在项目期间移动了一次),尽管我认为他们可以更加节俭和敏捷地完成它,但它却按时,按规格完成。上夜活动的时间表大约100页,其中大约40页是涉及到的所有人员的紧急恐慌联系方式。这个客户给我留下了深刻的印象。

或者,你可以做什么我们做,这是跑来跑去,做最近期的投诉/ bug报告是什么,叫敏捷。


8
根据Agile Dilbert:is.gd/lDoQgb
Peter K.

11
它更像是“瀑布说:客户不知道他们想要什么,所以让我们坐下来,讨论一下,在他们开始黑客之前就他们想要的东西达成一致”……
scrwtp 2012年

+1:很好的答案。我认为敏捷社区有一个基本问题:敏捷在某些情况下对于某些类别的项目和客户来说是好的,但是他们没有看到有些项目的需求没有改变,因此快速和结构化的方法是更好的选择。我认为,敏捷社区应该尝试现实地确定他们的方法是更好的选择的领域(我认为存在这样的领域),而不应该尝试将其作为一般解决方案,因为事实并非如此。
Giorgio

6
@scrwtp-敏捷更像是“我的客户不知道他们想要什么,也无法/不会谈论和思考它,他们每隔5分钟就会改变主意。我必须面对一些挑战获得有意义的答案”。哇。当我写下来时,这听起来真是不幸。
迈克尔·科恩

1
@scrwtp:我认为百万美元的问题是:您可以“坐下来谈论并同意”的“信念”是否可行?答案是:取决于情况,对吧?这取决于许多变量:项目有多大?我们甚至不知道它有多大?客户需要多少时间与我们“坐下来”?我们已经尝试了数十年,以将软件开发与构建相关联,这几乎是100%的规定性。软件开发介于“完全反动”和“ 100%规范性”之间。在大多数商店中,它更接近“完全反动”,因此被敏捷采用。
Calphool 2014年

21

您首先说:

瀑布式开发和敏捷开发是两种主要的软件开发理念。

这是错误的。这种二分法是敏捷社区构建的,目的是创建一个自己定位的对手。在敏捷流行之前,人们曾经谈论过各种各样的构建软件的方法。它们今天仍然存在,但是不知何故,它们经常被敏捷的拥护者混为一谈,称为“瀑布”。

我使用OPEN / Metis及其变体已有10多年了,取得了巨大的成功。它绝对不是敏捷的,而且绝对不是瀑布。每天都有成千上万的开发人员使用非敏捷方法为飞机,生命攸关的系统,银行业务等创建极其复杂的软件。

因此,是的,当然有可行的替代敏捷的方法。


6
我无法从该链接中快速了解OPEN / Metis是什么。(通常不需要下载方法。)我的问题是:这是什么哲学,尤其是在应对变化方面?它是在尝试使变更最小化还是降低变更成本?请记住,我的问题是关于敏捷哲学的,而不是关于敏捷实践的。
埃里克·威尔逊

OPEN / Metis具有迭代的生命周期,可以逐步构建系统。变革被认为是不仅会发生的事情,而且在发生时会很重要的事情,因为信息系统开发的真正目的是实现某种变革。但是,更改的成本是通过适当的生命周期和相关实践来控制和管理的。
CesarGon

1
关于您对“下载方法论”的评论,好吧...我不下载方法论。您下载描述方法的文档。否则,您如何了解它们?看看书,描述XP,Scrum的,等等千变万化
CesarGon


10

是的,根据您的问题领域,各种软件开发技术都是可行的。这是“课程的马匹”。

例如,您正在编写控制核电站或驱动NASA航天飞机的软件。这类问题域可能更适合瀑布式(甚至更严格)的方法,如果可能的话,您希望提前解决所有问题(或BOOM!)。

建立最新的Web 2.0 / 3.0 / Buzzy营销术语用户界面?敏捷是一种更好的方法(您需要快速的反馈和更改)。

无论哪种方法论,我都可以称之为软件工艺原则,这些原则仍然可以应用:

  • 源代码控制
  • 建立和CI
  • 配对编程
  • TDD
  • 我给一个^%$$&

和更多。

无论您做什么,都不要听从等式两边的狂热分子,去做适合自己,您的团队和问题领域的事情。


如果您负担得起瀑布的工作。上述人士声称,NASA月球项目的软件成本约为每行代码1000美元。大多数商店需要每行代码1到10美元左右的价格,对于这种情况,敏捷性更好。但是,我不认为敏捷可以提供更好的整体质量。基本上可以归结为您可以负担很多钱以确保该软件正确,或者一旦发现该软件不正确,便可以找到解决方案更便宜。
Mikko Rantalainen

2

问题源于软件的复杂性。瀑布对于桥梁建设和铺路等非常有用,因为物理原理永远不会改变。当然,在某个时候,我们将开发一种新的沥青,但不会改变公路的建造方式。桥的悬架中的钢的大小正确或不正确。您不能像使用软件那样拖延或存根真正的建设项目。

软件变更。软件变化迅速。摩尔定律指出,芯片上的晶体管数量每18-24个月就会增加一倍。结果,程序中的代码行数也加倍。因此,这些代码行之间的复杂性会随着bigO之类的2 ^(2t)而增加。

软件变化迅速,并且复杂度随之增加。

在控制软件成本时,您希望控制指数因子,而不仅仅是乘数或加法。更改代码以指数方式增加了复杂性(并且随着项目的进行本身也成倍地复杂)。

变化不可避免的。编程的本质是通过类和自定义方法扩展语言,从而改变了语言本身。您无法在任何其他类型的工程学科中做到这一点(例如,修筑道路。您不能仅仅为了在堪萨斯州的堪萨斯州铺平道路而发明新的路面)。

敏捷方法还为您提供了一个用于处理将来的版本和错误修复的平台。您已拥有开发版本控制软件的管理工具,流程,受过培训的员工。使用瀑布式方法,您将需要对团队进行再培训,以处理甚至较小的错误修复。

无论如何,我的2美分。


2
软件设计的许多方面与物理定律一样绝对。就像瀑布或其他方法一样,敏捷是一种工具,正如其他人所发布的,在许多商业案例中,它是没有意义的。如果我看到您在飞机上排队,而波音公司说他们正处于飞行控制软件敏捷过程的中间,并且他们需要客户反复考虑飞机是否不会在空中翻转,我会感到惊讶。原因。
Hounshell

而就在你的论点猎枪多个孔,也有道路设计所设计的,现在这将是适当的堪萨斯州和加利福尼亚州之间的道路,而不是纽约和波士顿之间。并且,不断出现处理沥青的新技术。
Hounshell

2
最后,您说“采用瀑布式方法,您需要对团队进行再培训,以处理甚至较小的错误修复。” 那就是瀑布过程如何工作的无知。在看台前,应该先尝试一下不错的瀑布店,看看它对于每种软件开发方案都是不合适的。
Hounshell

1
您好,Stephan,并非所有软件需求都在不断变化。
保罗·内森

1
业务总是在变化 ; 没有变化和适应的企业就是濒临灭绝的企业。时间是一个常数,不能很好地与变化交互。一个具有确认预期变更的理念的系统可以适应变更,否则,时间必须适应变更,这是一个永恒的常数!

2

要回答这个问题,是否有可行的替代方法,至少在一般情况下,对于软件可能不是-或尚不可行。我认为这取决于软件的性质。作为信息的软件可以免费复制。与桥梁或房屋不同。这意味着,通过实践,我可以擅长盖房并在相对简单的领域进行操作。在什么时候不使用一次性方法?

但是由于软件的复制成本为零,所以为什么您会做两次相同的事情?软件趋向于脱离制造业。因此,如果所有软件都是新产品的创建,那么我们总是在一个复杂的域中运行,在某种程度上,我们不知道我们在做什么。或者预先知道会很昂贵,而通过做来发现会更便宜。在一个复杂,有风险的领域中,我想尝试进行实验并进行递增和迭代。

核电站和绕线飞行系统通常作为您想瀑布式运行的软件示例。但是航天飞机航空电子系统不是迭代开发的吗?像加拿大和美国的空中交通管制系统一样吗?

如果OPEN / Metis是迭代的和增量的,那么对我来说,即使它不与其他常见的敏捷实践相关联,它听起来也具有敏捷的哲学。


2
因此,现在敏捷正在尝试以迭代和增量为功?自从我从92年开始开发以来,就没关系迭代和增量已成为瀑布开发的核心部分。
Dunk 2012年

1

瀑布方法无疑是可行的,并且在哲学上与其他方法一样合理。请记住,Waterfall比敏捷开发的时间长得多,但是请注意,这并不是要说明一种方法是否优于另一种方法的论点。

当您对整个问题域以及客户希望通过软件包实现的目标非常清楚时,可以使用Waterfall方法。签订合同时,您可能已经报价了固定价格,并且您的客户了解他们不能偏离任何商定的要求。严格来说,您的过程是在开发的各个阶段之间进行一系列签核的过程,通常情况下,每个阶段都是由不同的团队(有时甚至是不同的公司)完成的,每个团队不一定都在与其他人联系。当您将Waterfall招标给外部承包商时,通常会看到它们在军事和政府项目中发挥了良好的作用。当开发人员遇到问题时,Waterfall和其他类似方法获得不良声誉的地方是,例如估算不正确,计划的时间表没有应急时间,或者对问题域的理解不充分或不完整。这个问题从来都不是方法论的真正错,而在于它的应用。

敏捷与任何方法之间的比较都是错误的。敏捷不是一种方法论,它是一种哲学,或者也许最好说它是一个笼统的术语,代表了一种不同的方式来研究开发软件的方式。方法论仅仅是一种工具,因此它的价值将始终小于处于敏捷意义的核心的个人和互动。

真的有人认为对于希望交付有价值的软件的人来说,最小化软件更改是一个可行的选择吗?

最大限度地减少变更的每一个机会对于开发人员和客户都是宝贵的。更改可能导致进度表延误,或者为了满足进度表而忽略了某些功能。这是您管理变更影响项目价值的方式。

还是真正的问题是,哪种方式在我们的情况下最能应对不可避免的变化?

您的实践可能有助于变更管理,或者可能完全忽略变更。重要的是您的开发实践,与您的客户关系的管理以及这些事情对于所有相关方是否有效地结合在一起。

我们这些谁是对所有意图和目的敏捷明白,你选择一个适合自己的方法。如果您喜欢特定的方法,请遵循它。如果它不能完全满足您的需求,请进行更改。制作软件的方式实际上归结为尝试充分利用手头的资源,并最大限度地减少那些可能导致项目失败的做法,而且您经常发现需要更改方法以适合您的需求。即将进行的特定项目。

说“好吧,现在我们是敏捷的”是一回事,而按照敏捷的哲学实际生活和工作则完全是另一回事。无论您使用Waterfall,Incremental,Spiral,SCRUM,XP,FDD还是任何其他方法,您基本上都非常看重敏捷

  • 个人与流程和工具之间的互动
  • 工作软件超过全面的文档
  • 客户合作而非合同谈判
  • 响应计划变更

以及将工具,方法和经验结合在一起的位置,以便成功应用这些价值。


2
哇。这里有很多奇怪的东西。瀑布在更长的基础上可行吗?在国防合同中使用瀑布是合理的吗?难道每一次机会都将改变最小化确实是为了客户的最大利益,还是导致了他认为自己想要的而不是他实际想要的?由于您似乎对此很在意,因此我尝试了解您的来源,但我缺少一些东西。
埃里克·威尔逊

1
在讨论敏捷哲学之前,@ EricWilson Waterfall已经存在了很长时间,并且已经成功使用了。它是可行的,因为它存在并且在正确使用后对希望使用它的人有效。我没有证明使用它是合理的,而只是指出了一个例子,在这个例子中,我有亲身经历,可以看到它起作用,是的,我也看到了一些引人注目的失败。您不是在寻找机会来最大程度地减少变更,而是希望有机会引入变更,但是您需要明智地做到这一点,否则,您的客户得到的收益会少于他们想要的,或者期限缩短。
S.Robins 2012年

0

是的,瀑布,螺旋,迭代和其他混合过程模型都是可行的,但改变是不可避免的。过程不仅仅在于如何处理变更,而且(我声称)最大的决定因素是您对问题的了解/了解的程度以及计划和预测的准确性。

指出“两种主要的软件开发方法是瀑布式和敏捷性”是不恰当的,因为软件开发过程种类繁多,许多公司合成了自己的过程模型版本,这些模型通常会针对给定项目进行更改。有两种以上可行的软件开发方法。尽管Waterfall和Agile往往落在“变化”光谱的两端,但是将这些竞争方法典型地描述为:

Waterfall说:更改成本很高,因此应将其最小化。

敏捷说:改变是不可避免的,所以要使改变便宜。

但这还不是全部。业务需要能够计划和预测,但是软件是一个创造性的过程,而估算通常是错误的。还记得好-快速-便宜的三角形吗?添加第四个维度,即流程,您会发现,当估算结果错误并且项目有延迟的危险时,减少流程工作量也可以压缩进度。软件是一个可替代的(可变的)过程,敏捷,迭代,螺旋式都可以在较短的间隔内提供增量功能。

Waterfall和其他需求驱动的流程模型具有处理变更的控件,因此说Waterfall最小化变更是不准确的,说Waterfall可以识别和管理变更并传达变更的影响(因为变更会在您使用时造成时间表影响)是不准确的。事先有要求和设计)。在构建产品或需要完全定义需求(功能)时,您将被迫采用其中一种混合模型。

当估计错误时,通常会牺牲过程(铁三角的第四段)来满足进度表。


我不是卑鄙的。在各种公司中发展了五年之后,我只遇到了两个,而其中一个仅被命名为pjorative。螺旋?从来没有听说过。
埃里克·威尔逊


我的意思是我在现实世界中没有遇到过。互联网上有各种各样的东西,但我现在不打算立即追捕它们,只是因为我在2010
Eric Wilson

-1

成熟的敏捷方法和瀑布方法是无法区分的。您对瀑布方法的目标的假设是不正确的。他们俩的目标都是生产高质量的软件。如果您对整个公司都没有可靠的开发方法,则需要查看哪种方法对采用的影响最小。在最后的短暂开发周期中,扎实的质量保证团队和推动开发的业务是生产一流软件的最重要条件。


1
我要告诫您的评论。瀑布需要有才能的人,否则它会倒在脸上。学习好设计很难。学习编码相对来说非常容易。IMO,这就是大多数开发人员似乎更喜欢敏捷的主要原因。
Dunk 2012年

4
我可以说敏捷一样。没有指导的Jr.开发人员会很快变得一团糟。
查尔斯·兰伯特
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.