敏捷开发和测试驱动开发(TDD)有什么不同之处?如果有,主要区别是什么?

7
敏捷开发和测试驱动开发(TDD)真的有所不同吗?如果是这样,主要区别是什么?

TDD是开发特定的,而敏捷更多地涉及项目风格(尽管我知道你在问什么)。当使用正确时,TDD可以成为一种很好的开发实践。在瀑布流中从一开始就使用TDD,在敏捷中在最后加入它。作为额外的内容,请查看BDD,因为有很多时候它会比TDD更重要。 - Jacksonkr
4个回答

9

敏捷开发是与这里列出的价值观一致的任何东西。

XP(极限编程)是一种被认为是敏捷的方法论。还有其他一些方法论,如Scrum、Crystal等。

TDD(测试驱动开发)是XP中的一种具体工程实践,它是一种以增量方式编写代码和驱动设计的方法。你先编写一个测试,用最简单的改变使其通过,然后重构以改进结构/设计。你可以一直循环此过程直到完成。


8

敏捷软件开发是一种以迭代、循序渐进方式进行的软件开发方法,强调快速响应需求变化并持续不断地进行反馈和改进。

测试驱动开发(TDD)则更专注于代码的编写过程,通常只针对个人或小团队的工作周期。

  • TDD非常关注代码的编写方式。

  • 而敏捷开发则真正关注整个开发过程,不仅包括代码的编写和测试,还有项目管理和团队协作等方面。

总之,TDD和敏捷开发并不互斥,各有侧重点。


4
我要做反对者并且说,是的。TDD和敏捷开发是同一件事情,只是在不同的规模上。
首先,TDD鼓励你在实现之前制定你想要实现的计划。你不考虑如何去实现它。你只考虑如何证明你即将编写的东西是有价值的,并且你知道如何验证。这与敏捷方法理论中在项目起源时收集需求十分相似。
然后,你仅仅完成必要的工作以便获得反馈。对于TDD,这意味着红色或绿色的进度条。在更高级别上,敏捷方法鼓励你向利益相关者展示并获得反馈,或(最好的)发布到生产环境中并查看是否有效果,是否有人使用。
然后你会想出下一个要做的工作,并编写下一个计划。
敏捷方法可能还会使用估算和优先级排序,但这些大多数是为了分配预算并确定是否首先执行该项工作 - 这在小范围内开发人员自然而然地做到了。
敏捷方法是迭代的-即计划、实现、交付和反馈周期性循环。TDD也是如此,步骤完全相同。
敏捷方法通常强调沟通、交流和轻量级文档。TDD也可以作为一种文档形式,特别是如果您将测试名称制成有意义的句子,并使用业务使用的相同语言以及现实的示例。这也可以促进沟通和交流。
敏捷方法鼓励反思并从过去学习。TDD具有可爱的红色进度条,可以帮助您快速做到这一点。
如果将TDD扩大规模,则会获得验收测试或BDD风格的场景。更进一步,您将开始进行功能注入和其他形式的视觉驱动分析。更高级别上,您需要考虑发布的项目是否保留了您的市场份额,是否提供了您想要的选项,或者是否实现了其最初的愿景。测试变得更加复杂,但编写足够的代码、获得反馈并持续学习的过程仍然是相同的,不管采用哪种敏捷方法。
所有有助于敏捷成功的规则都可以应用于小规模的TDD,反之亦然。(我很努力地想到任何例外情况,但没有)。所以,不。敏捷开发不同于TDD。它只是更大规模的TDD。

+1,尽管有点不同意。你提出了一个非常好的观点。但是敏捷开发中有一些方面是TDD本身无法涉及的 - 我主要考虑个体和互动优于流程和工具;TDD非常注重流程,单独在人际关系领域做得很少 - 尽管它与配对非常契合,后者完全是关于个体和互动的。尽管如此 - 你提出了一个好的观点。 - Carl Manaster
嗯,我更喜欢BDD,它是TDD的一种变体,被TDD者描述为“做好TDD”。在BDD中,我们使用业务语言来增强对话和鼓励沟通,并且我们比工具更重视它。我将在Agile 2010上进行几个基于此的会议,所以感谢您的鼓励! - Lunivore
你提出了很好的论点,但你错了——仅仅因为你不必要做TDD才能敏捷,或者说你不必敏捷才能使用TDD。你所提出的观点是TDD是敏捷方法的一个很好的例子,这是绝对正确的,但是说这两者是相同的是误导性的——我猜这也是这个问题首先出现的原因。 - Murph

3

差异巨大,因为我认为有一个非常简单的区别:

敏捷是一种哲学,而TDD是一种具体的方法论。

有许多可以采用的敏捷工作方式,但总的来说,你要么在做TDD,要么不做。

你可以在不使用TDD(或其变体)的情况下实现敏捷,也可以在没有敏捷的情况下使用TDD(尽管我会有些惊讶)。


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