敏捷开发的神话和误解

33

什么是与敏捷开发相关的误解或谬论?

在敏捷开发领域中,存在许多误解,新手可能会陷入其中。什么是敏捷开发中的误解,以及如何证明这确实是一个误解?


更新:敏捷开发误解总结

  • 敏捷不需要文档
  • 敏捷方法不能扩展
  • 敏捷意味着没有计划
  • TDD涵盖了所有单元测试需求
  • 成对编程总是会产生更好的代码
  • 敏捷是软件工程问题的银弹解决方案(有一个银弹解决方案)
  • 敏捷不需要预先设计
  • 我们正在做Scrum,所以不需要进行TDD,重构,成对编程等操作
  • 一个人可以从书本上学习敏捷
  • 敏捷只适用于琐碎的项目
  • 敏捷总是使用“用户故事”

阅读下面的答案,了解关于以上误解的更多信息以及更多的误解。

18个回答

22
“优先考虑可运行的软件而非全面的文档”意味着您不需要功能规格说明书...”
“错了!”这只是意味着您可以与用户迭代地解决问题 - 作为供应商来说,您仍需要良好的文档来协助QA和签署阶段...”

这是非常真实的,任何匆忙开始项目并期望如此的人都会有一个不愉快的惊喜。 - Jay
2
敏捷开发在构建阶段使用“用户故事”而非文档。例如,QA可以很好地使用用户故事,因为它们定义了可测试的功能。因此,敏捷开发认为,在构建阶段不应花费时间创建文档,因为它们往往会发生变化。相反,“尽可能晚地进行文档编写”。对于维护和业务目的,敏捷开发完全可以创建文档。 - Varuna
1
这也意味着你需要编写设计文档(无论是什么类型),而不是随意跳入开发。 - Richard Levasseur
1
谬论:敏捷开发(总是)使用“用户故事”! - Pascal Thivent

20
  1. "我们正在实行Scrum - 所以我们不需要(配对|重构|进行TDD|...)" 实际上,Scrum的创始人Ken和Jeff一直在说所有高生产力的Scrum团队都会实施完整范围的Extreme Programming实践。

  2. 测试驱动开发无法找到所有bug/难以应用于所有情况 - 所以我们不打算尝试! - 学习TDD并不是一个“全有或全无的交易”,您会更好地判断要测试什么以及如何高效地测试它。我已经这样做了十年,仍然在寻找更好的方法以及需要考虑的新事物。

  3. 我可以从书中学到应用敏捷方法所需的全部知识。 - 您需要通过实践来学习,这通常意味着得到辅导并与其他可以提供帮助的人见面。很多事情在人们仅仅试图通过书本自学时会出现问题。

  4. 可怕(而且非常真实)的“候选人必须听从并支持Scrum Master的指示”(我上周收到的职位说明书…) - Scrum Master 不应该告诉人们该做什么。他/她的作用是促进 - 即帮助团队学会自己解决问题。拥有一个“命令”人的Scrum Master是一种巨大的失败模式!

  5. 谈论“敏捷方法” - 是无知的体现。首先,像它是一个具体的东西一样谈论“敏捷”,而它实际上是一个非常模糊的涵盖许多不同内容的抽象术语。其次,使用“the”敏捷方法 - 有很多种,并且许多种都有不同的方式进行!第三,敏捷社区的许多人在反对90年代的大型、过度使用UML的方法时加入了这里。这些人不倾向于使用“方法论”这个词...

  • 要采用敏捷开发的方式开发软件,需要特别有才能的人。 Jeff Sutherland表示,他们曾考虑在银行管理团队时使用“首席程序员团队”模型,但发现他们没有足够多的“首席程序员”。Scrum旨在从许多能力适中的程序员中获得最佳生产力。事实上,移除一个不愿意帮助其他人,产出异常高的团队成员可以“解锁”平庸的团队成员,并将他们的联合生产力提高到超过超级高产前团队成员的水平......这是Jeff的说法。

  • 我们最近在一个开放空间工作坊中提出了相当多与XP相关的问题http://xpday-london.editme.com/WhereHasXpGone


    1
    哈哈,#1 真是太有趣了!除了那些反对 Scrum 的人口中提到过,我从未听说过这个。 - Pascal Thivent
    1
    就第五点而言,我喜欢称之为小敏捷与大敏捷之间的差异。 - kyoryu
    我不理解这个“大/小”敏捷的概念。它从来没有一个具体的含义,只是一组我们更喜欢的事情而已。 - Dafydd Rees
    第四点——Scrum Master始终是一个促进者。我同意一个已经成熟的团队的Scrum Master不会给出指示,而是作为促进者,但是对于一个新的、缺乏经验的团队来说,Scrum Master充当强有力的领袖至关重要。大多数新团队看不到敏捷开发的好处,如果从瀑布模型背景下实施,通常会持敌对态度。 - SpoonerNZ

    18

    迷思:使用敏捷开发方法是解决软件工程问题的灵丹妙药。


    17
    神话:有一种银弹解决软件工程问题。 - Jeremy McGee

    15

    迷思:测试驱动开发会迫使项目拥有充分的单元测试。

    事实:许多开发人员会变得懒惰,他们在编写代码之前撰写的单元测试往往是薄弱和不充分的。

    迷思:结对编程总是能够产生更好的代码。

    事实:程序员往往稍微有些反社交,并且彼此的思维过程有明显的差异。在编写代码时被人紧盯着非常不愉快,结果常常会导致紧张的工作氛围,以及代码质量和数量的减少。


    2
    我知道我不喜欢敏捷开发的原因了,你说中了。编程既是团队活动,也是独立活动。你在独自工作的同时也是团队的一部分。 - Ken Lange
    4
    我认为他并不是说配对编程从来不起作用。无论如何,这种说法都是错误的。如果找到合适的搭档,配对编程非常有效。请查看维基百科上有关此主题的文章,它引用了适当的研究,而不仅仅是随意的观点。此外,配对编程实际上与敏捷开发没有太大关系。 - Jacob Poul Richardt
    3
    你说得对,我并不是意味着它从来不起作用。我的意思是把它作为整个项目必须执行的政策往往是一个坏主意。结对编程绝对被认为是敏捷开发的标准实践;即使维基百科也这么认为。 - RickNZ
    +1,我是两者的粉丝。第一个尤其重要:大量糟糕的测试可以说比没有测试更糟糕... - Mathias
    @Ken Lange - 敏捷开发并不一定意味着使用配对编程 - 配对编程通常更具体地与XP敏捷开发相关联。 - Cocowalla
    显示剩余3条评论

    10

    神话:敏捷开发意味着没有文档

    事实:敏捷开发更加重视工作软件而不是全面的文档,但这并不意味着完全没有文档。文档应该及时书写,并适量书写。而且,敏捷开发并不会说一个人必须总是使用用户故事。只有在适当的情况下才使用。

    神话:敏捷开发意味着没有计划

    事实:敏捷开发不支持没有计划的开发。敏捷采用持续的规划和估计来最大化投资回报率。实际上,敏捷开发关注范围管理。

    神话:敏捷开发意味着没有纪律性

    事实:为了成功,敏捷开发人员必须更具有纪律性。

    神话:敏捷开发仅适用于琐碎的项目

    事实:敏捷(实际上是Scrum)已经被用于:

    • 经过FDA认证、对X光和MRI进行生命关键型软件,
    • 金融支付应用程序,
    • 要求99.99999%运行时间的24x7应用程序,
    • 多TB数据库应用程序等。

    神话:敏捷开发不能扩展

    事实:Sutherland将Scrum用于超过500人的团队,Cohn将Scrum用于100人以上的团队。


    你有提到 Scrum 被使用的一些案例参考吗?这将会丰富本帖! - GmonC
    这是来自CSM课程的内容,并且在Mike Cohn的《Scrum简介》中也有提到(请参见http://www.mountaingoatsoftware.com/presentations/30-an-overview-of-scrum-january---in)。 - Pascal Thivent
    你比我先提到了无纪律/更多纪律的问题! - kyoryu
    你有哪些大型项目的例子可以证明敏捷开发方法的有效性? - Beep beep

    8
    神话:“不需要事先进行大量设计”并不意味着不需要设计。

    3
    那么你的意思是“边设计边开发”同样好吗? - leppie
    1
    @leppie:你是说“只考虑一次设计”也同样好吗?我不知道你怎么看,但在我参与的每个项目中,最后我对空间的了解比一开始更多... - kyoryu
    2
    我认为在大多数情况下,边设计边开发更好。关键是在你拥有足够数据之前不要做出太多不可逆转的决定。如果你不确定是使用SQL Lite还是Oracle,并且在项目进行了3个月之后才能知道,那么请将数据库抽象出来。 - Chris Simmons

    6

    错误观点:瀑布模型总是失败的。

    事实情况:你在敏捷项目中使用的大多数软件都是采用瀑布模型开发的,甚至在许多情况下采用了BDUF瀑布模型。


    http://cleancoder.posterous.com/what-killed-waterfall-could-kill-agile - leebrandt

    4

    没有真正的神话——但任何事情如果过分就会出错。一个敏捷项目如果希望“边开发边设计”而不做任何设计,很可能会失败。瀑布项目如果把每一个分号都设计好,很可能因为预算、时间或者用户需求的变更而失败。


    一个极端的瀑布项目如何在预算或时间上失败?你是指在编写一行代码之前就失败了吗? - Jacob Poul Richardt
    2
    我认为Wade的意思是,如果你花费太长时间来设计一个应用程序,可能会失败,因为你把所有的资源都用于计划而不是编码。此外,如果你已经花费太长时间来规定应用程序的每个可能部分,在开发过程中应用程序无疑会从规格中变化,你可能没有时间找到解决这些在设计阶段并未出现的问题的解决方案。这只是在Wade上面提到的极端情况下。 - Jay

    3

    有人反复说过“敏捷设计方法不可扩展”,但是如果正确实施和考虑,敏捷开发将有效地适用于任何规模。


    1
    "thought out properly":经过深思熟虑 同样适用于敏捷开发,最好与思考并不断完善自己工作的好奇心旺盛的开发人员一起合作。 - Jeremy McGee

    2

    迷思:你需要仔细计划和安排每个迭代。

    这会导致你需要进行大量的前期规划,以便能够完全规划每个迭代。

    这会破坏敏捷性并创建一个名为“敏捷”的瀑布流。


    你必须做足够的工作...什么是足够的,这取决于你的项目和团队。回顾会议中的讨论应该能够给你一个线索,告诉你是否做得不够(问题/挑战/低效率)或者过度(计划很好,但花费了大量时间)。持续调整。 - Jim Rush

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