Testing TDD和BDD差异

Testing TDD和BDD差异,testing,tdd,bdd,Testing,Tdd,Bdd,老实说,我看不出BDD和TDD之间的区别。我的意思是,这两个都只是测试是否会发生预期的事情。我看到过BDD测试非常丰富,几乎可以算作TDD测试,我也看到过TDD测试非常模糊,以至于黑盒了很多代码。让我们说我非常确信两者都有更好的效果 这里有一个有趣的问题。我从哪里开始?我是否从高级BDD测试开始?我是从低级TDD测试开始的吗?根据我在维基百科上收集的信息,BDD包括验收和QA测试,没有利益相关者/用户的输入是无法完成的。此外,BDD使用自然语言指定其测试,而TDD通常使用编程语言。两者之间可能有

老实说,我看不出BDD和TDD之间的区别。我的意思是,这两个都只是测试是否会发生预期的事情。我看到过BDD测试非常丰富,几乎可以算作TDD测试,我也看到过TDD测试非常模糊,以至于黑盒了很多代码。让我们说我非常确信两者都有更好的效果


这里有一个有趣的问题。我从哪里开始?我是否从高级BDD测试开始?我是从低级TDD测试开始的吗?

根据我在维基百科上收集的信息,BDD包括验收和QA测试,没有利益相关者/用户的输入是无法完成的。此外,BDD使用自然语言指定其测试,而TDD通常使用编程语言。两者之间可能有一些重叠,但我认为主要的区别不是含糊不清,而是BDD的语言

至于你从哪里开始,那真的取决于你的发展过程,不是吗?我假设如果您是自下而上的,那么您将首先编写TDD,一旦达到更高的级别,您将使用BDD来测试这些特性是否按预期工作


正如k3b所指出的:主要区别在于BDD是面向问题领域的,而TDD更面向解决方案领域。

BDD是从客户的角度来看的,侧重于整个系统的预期行为

TDD是从开发人员的角度来看的,重点是实现一个单元/类/特性。它得益于更好的体系结构(可测试性设计,模块之间的耦合更少)

技术角度来看(如何编写“测试”),它们是相似的

我会(从敏捷的角度来看)从一个bdd用户故事开始,并使用TDD实现它

老实说,我看不出BDD和TDD之间的区别

那是因为没有

我的意思是,这两个都只是测试是否会发生预期的事情

那是错误的。BDD和TDD与测试完全无关。没有一个娜达。废话。拉链。尼克斯。一点也不

不幸的是,TDD在几乎所有的东西中都有“test”一词(不仅在它的名称中,而且在测试框架、单元测试、
TestCase
(您从中继承的类)、
FooTest
(通常保存您的测试的类)、
testBar
(测试方法的典型命名模式)中也有这个词,加上许多与测试相关的术语,如“断言”和“验证”),这让一些人相信它确实与测试有关。所以,一些聪明人说:“嘿,让我们换个名字吧”,以消除任何潜在的混乱

这就是BDD。它只是TDD,任何与测试相关的术语都被行为相关术语的示例所取代:

  • 试验→ 范例
  • 断言→ 期望值
  • assert
    → <代码>应该
  • 单位→ 行为
  • 核实→ 规格
  • ……等等

BDD只是不同单词的TDD。如果你做的是正确的TDD,你就是在做BDD。不同之处在于,如果你至少相信萨皮尔-沃尔夫假说的弱形式,那么不同的词会使正确的操作变得更容易。

一篇关于TDD和BDD之间差异的精彩文章:


应该提供您需要知道的一切,包括两者的问题和示例。

术语不同,但在我的工作中,我使用TDD来开发详细信息,主要用于单元测试,BDD更高级别,适用于客户、QA或非技术人员。

BDD是关于正确使用TDD。它为您的TDD提供“结构和双烯”。它指导您测试正确的事情,并进行正确数量的测试。这是一篇关于BDD和TDD的精彩小帖子


主要区别在于措辞。BDD使用了更详细的风格,因此它几乎可以像一个句子一样阅读。

只是复制我更同意的答案,而不是“TDD和BDD与测试无关”:

行为驱动开发是测试驱动开发的扩展/修订。其目的是帮助设计系统的人员(即开发人员)确定要编写的适当测试,即反映涉众所期望的行为的测试。结果是一样的——开发测试,然后开发通过测试的代码/系统。BDD中的希望是,测试在显示系统满足需求方面实际上是有用的

更新


代码单元(单个方法)可能过于细粒度,无法表示行为测试所表示的行为,但仍应使用单元测试对其进行测试,以确保其正常运行。如果这就是你所说的“TDD”测试,那么是的,你仍然需要它们。

我认为BDD对TDD或任何其他方法的最大贡献,是让非技术人员(产品所有者/客户)成为各级软件开发过程的一部分

用自然语言编写可执行场景几乎弥补了需求和交付之间的差距

如果产品负责人想了解开发团队编写的代码的行为,他可以自己运行他编写的场景,并使用不同的数据集进行测试


太棒了!客户正坐在中心,不仅要问他真正想要什么,还要验证和体验交付成果

谢谢@Jörg。语言是BDD中最基本的概念之一。唯一缺少的是在编写“测试”之前关注对话和发现。我会说这是有区别的;语言和语言所引发的问题产生了不同,这一点非常重要。话题:我完全同意“语言是BDD中最基本的概念之一”,但我