TDD和BDD差异

我真的没有看到BDD和TDD之间的区别。 我的意思是,两者都只是testing,如果预期会发生。 我已经看到BDDtesting是如此充实,他们实际上算作TDDtesting,而且我看到TDDtesting非常模糊,以至于黑盒子里有很多代码。 让我们只是说我相当相信,两者都更好。

这里有一个有趣的问题。 我从哪说起呢? 我是否从高水平的BDDtesting开始? 我是否从低级TDDtesting开始?

我真的没有看到BDD和TDD之间的区别。

那是因为没有

我的意思是,两者都只是testing,如果预期会发生。

那是错的 BDD和TDD与testing完全没有关系。 没有。 纳达。 小人物。 压缩。 尼克斯。 丝毫不在。

不幸的是,TDD在几乎所有的东西中都有“testing”一词(不仅在名字上,而且在testing框架,unit testing, TestCase (你可以从中inheritance的类), FooTest (通常持有你的testing的类), testBar (testing方法的典型命名模式)以及诸如“assertion”和“verification”等很多与testing相关的术语,这使得一些人认为它实际上与testing有关。 所以,一些聪明的人说:“嘿,让我们改名”,以消除任何混乱的可能性。

而这正是BDD的。 这只是TDD与任何与testing相关的术语而被与行为相关的术语代替:

  • testing→例子
  • 断言→期望
  • assertshould
  • 单位→行为
  • validation→规范
  • … 等等

BDD只是用不同的单词来表示TDD。 如果你正确地做TDD,你正在做BDD。 不同之处在于,只要你相信至less在萨皮尔 – 沃尔夫假说的弱forms中,不同的词语就更容易做到这一点。

BDD是从客户的angular度出发 ,重点关注整个系统的行为。

TDD是从开发人员的angular度来看 ,重点是实现一个单元/类/function。 它从更好的体系结构中受益匪浅(可testing性devise,模块间耦合更less)。

技术angular度 (如何写“testing”)他们是相似的。

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

从我在维基百科获得的信息来看,BDD包括验收和QAtesting,如果没有利益相关者/用户的意见,这是无法做到的。 此外,BDD使用自然语言来指定其testing,而TDD通常使用编程语言。 两者之间可能有一些重叠,但我认为这不是模糊的,但BDD的语言是主要的区别。

至于你从哪里开始,那么这真的取决于你的开发过程,不是吗? 我假设你是自下而上的,你会先写TDD,一旦达到更高的水平,你将使用BDD来testing这些function是否按预期工作。

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

只是抄袭Matthew Flynn的回答,我认为这比“TDD和BDD与testing毫无关系”:

行为驱动开发是testing驱动开发的扩展/修订。 其目的是帮助人们devise系统(即开发人员)确定合适的testing,即testing,反映利益相关者所期望的行为。 效果结果是一样的 – 开发testing,然后开发通过testing的代码/系统。 BDD的希望是,testing对于显示系统符合要求是非常有用的。

UPDATE

代码单元(单独的方法)可能太粒度化,不能表示行为testing所代表的行为,但是您仍然应该使用unit testing来testing它们,以确保它们正常运行。 如果这就是“TDD”testing的意思,那么是的,你仍然需要它们。

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

http://www.lostechies.com/blogs/sean_chambers/archive/2008/12/07/starting-with-bdd-vs-starting-with-tdd.aspx

应该给你所需要知道的一切,包括问题和例子。

BDD是关于让你的TDD正确的。 它为TDD提供了“结构和diciplene”。 它指导你testing正确的东西,做适量的testing。 这是一个关于BDD和TDD的精彩小贴子,

http://codingcraft.wordpress.com/2011/11/12/bdd-get-your-tdd-right/

术语是不同的,但在我的工作中,我使用TDD来开发细节,主要是unit testing,对于客户,QA或者没有技术的人来说,BDD是更高层次的。

主要区别只是措辞。 BDD使用更详细的风格,以便可以像读句子一样阅读。

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

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

如果产品所有者想要围绕开发团队编写的代码的行为,他自己可以运行他编写的场景并testing不同的数据集。

太棒了! 客户坐在中心位置,而不仅仅是问他真正想要的是什么,而是validation和体验交付成果。