敏捷模型与螺旋模型在软件开发生命周期中的比较

26

我认为敏捷开发只是螺旋模型的另一种实现。自螺旋模型提出以来,我一直是其坚定支持者。螺旋模型是一种软件开发过程,结合了自上而下和自下而上概念的优势,采用分阶段的设计和原型制作。许多项目在不知情的情况下就已经实施了螺旋模型,敏捷开发开始普及后,螺旋模型的概念被稍微忽略了一点。我相信对于复杂的项目来说,螺旋模型仍然是最好的选择,但我想更好地了解敏捷开发和螺旋开发技术之间的相似之处和差异。有人能解释一下它们的不同/相似之处吗?


3
我投票关闭此问题,因为它涉及方法论而非编程。 - EJoshuaS - Stand with Ukraine
6个回答

48

敏捷开发是螺旋式的。完全是这样的。部分原因是出于市场营销考虑而更改了名称。

问题在于螺旋模型往往暗示着“大量的前期设计”,其中你要规划很多个螺旋,每一个按照风险顺序进行。然而,螺旋模型并不是敏捷开发——只是按风险顺序进行的逐步执行。

敏捷开发增加的一个重要区别是“不要过度计划你现在无法了解的事情。”敏捷开发是螺旋式的,但你仅为一个增量创建详细计划。

此外,敏捷开发还添加了许多其他东西。螺旋模型是一种非常技术性的方法。然而,敏捷开发认识到技术是由人来实现的。《敏捷宣言》有四个原则,超越了博姆的简单风险管理方法。


我想我明白你的意思了。感谢分享知识。 - Chanakya
3
我认为敏捷并不等同于螺旋模型。敏捷是螺旋模型的一个子集,它使用非常紧密的螺旋 - 一个螺旋(在Scrum中称为冲刺,有时称为迭代)为2周。在一般的螺旋模型中,你可以有持续数月甚至数年的螺旋(Barry Bohem没有指定长度),而敏捷方法则建议采用短周期的螺旋。 - Thomas Owens
1
@Thomas Owens:我不理解你的评论。如果敏捷开发是由短螺旋组成的螺旋,那么它就是螺旋,对吧? - S.Lott
我被指出了一个问题,你在说“完全”时。敏捷开发比螺旋式开发更加受限制。这是一个正方形/矩形的关系 - 是的,敏捷是螺旋式的一种,但螺旋式并不敏捷,它们之间的区别不仅仅是“按风险顺序进行增量执行”。敏捷开发考虑到更短的时间表和更频繁的发布,以及其他一些因素。在我看来,你的前两段有点含糊不清。但这可能只是我阅读方式的问题。 - Thomas Owens
5
@Thomas Owens说:“是的,敏捷开发是一个螺旋形过程”。我想这就是我所说的。“但是螺旋形并不代表敏捷开发”。我也认为我说过这个。我真的很难理解你在纠结什么。 - S.Lott

15
我认为基本的区别在于大多数螺旋式开发模型仍然坚持大量的前期设计。重点是尽可能多地了解系统将如何使用;发现所有用例。一旦你知道这些,那么就设计系统并将其分解成遵循迭代详细设计、实现、测试、重构设计循环的阶段。在敏捷开发中,有些前期规划——比如收集大粒度理解(故事标题)——以便可以描述合理的发布计划,但每个发布计划都是独立规划的,我们会延迟发现细节,直到准备开始实施该发布计划。我们预期变化,并不试图在一开始就知道所有细节。
另一个不同之处在于大多数敏捷哲学涉及“先测验”方法。这与螺旋式开发不同,后者通常是一项单独的活动,测试并不是在编写代码之前开发的。它们经常是预先计划好的,但是与编码并行或在编码之后开发。许多敏捷方法坚持先开发测试作为代码规范。
它们相似之处在于它们都是迭代的。它们在迭代的实现和理解上有所不同。

2
我不是螺旋模型的专家,但从维基百科的定义来看,似乎存在一些显著的差异。
例如,在敏捷项目中,迭代结束时不是原型,而是包含功能列表中最高优先级功能的完全功能、经过充分测试、潜在可部署(1)的系统。
项目开始时的需求收集仅意味着足够启动(进行下一步),并且在实际实现之前很快就会详细说明。欢迎对需求进行更改。
此外,敏捷开发远不止于进行迭代开发——强调面对面交流而非书面沟通,注重将业务人员和技术人员融合到日常工作中。注重协作地最大化价值,而不是定义然后履行合同。
如果您还没有看到它,请查看敏捷宣言,这基本上是敏捷软件开发的定义。
这并不意味着部署系统必须在商业上有意义,只要技术上可行即可。最终是否部署该系统应该是一个纯粹的商业决策。

感谢分享知识。我认为对于更大型的项目来说,在迭代结束时生产完全可部署的东西是很困难的,考虑到复杂应用程序中某些实体的可靠性。 - Chanakya
不是这样的。我想说的是,可能没有花足够的时间来挖掘出更小、实际可用并能提供商业价值的块。你不需要构建一个庞大的单体来启动反馈循环。 - Gishu
欢迎来到SO Ilja ;) 我在Ron的敏捷论坛上花了一些时间。 - Gishu
@Gishu 感谢欢迎! :)@Chanakya 不允许在几个迭代中实现一个功能是常见的敏捷实践 - 如果需要,它需要被拆分。我还没有遇到过无法拆分的情况,也无法想象。而且“完成”意味着可部署。 - Ilja Preuß

1

我相信敏捷开发是一种迭代式软件开发生命周期(SDLC),而螺旋式开发则是一种增量式SDLC。Scrum是敏捷开发的一种类型,其他类型包括DSDM/FDD/XP等。 所有瀑布模型之后的SDLC都遵循相同的一组步骤(需求分析、设计、编码和测试),只是组合方式有所不同。因此,顺序式、迭代式或增量式的基本行动是相同的。

就敏捷开发和螺旋式开发而言,它们都具有共同的优势: 1. 处理变更需求 2. 短期发布 3. 由于SDLC周期较短,风险管理更容易 4. 跨团队协助产品和项目顺利进行


0

我认为螺旋式开发和敏捷开发很相似。然而,最近敏捷开发似乎经常成为一种宣传系统,用来为牛仔编码辩护。例如:

  • 极简要求
  • 最少的技术分析
  • 最少的文档
  • 没有代码注释
  • 特别奖励——滥用领域驱动设计来过度复杂化对象模型

这从来不是螺旋式开发的初衷。我认为这也不是敏捷开发的重点,尽管最近我看到了很多这样的情况。越来越多有经验的开发人员/项目经理开始意识到瀑布式和“敏捷”之间更加平衡的方法的智慧,也许这只是让我们回到了螺旋式开发。

虽然敏捷思维空间中有一些有用的想法,但它似乎经常表现出来的是,它源于那些拥有特别繁琐/无用的软件设计方法的组织中的人,并且是对此的反应/过度反应。


你列举的这些问题并非敏捷开发固有的,而是表明了劣质工作产品和可能存在的领导力不足。 - ntwrkguru
我同意@ntwrkguru的观点。列出的这些问题是糟糕的开发实践,而不是任何方法论固有的问题。 - Zimano

0

首先,敏捷开发实际上是遵循相似哲学的多种不同过程。使其与众不同的哲学之一是每个迭代都会产生一个可工作的产品。它可以被描述为迭代和增量式的。强调工作产品和测试。在许多敏捷模型中,测试在编码之前进行。

在螺旋模型中,迭代次数是固定的,而敏捷模型的每个阶段可能包含任意数量的迭代。

您说得对,它们有相似之处,但基础哲学使它们不同。这个页面更详细地解释了敏捷方法与其他方法的比较。

您可以说敏捷过程是用例驱动的...非常注重人员和最终用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接