BDD与TDD的关系是什么?
据我所知,BDD在TDD上增加了两项主要内容:测试命名(ensure/W应当)和验收测试。在BDD的开发过程中,我应该遵循TDD吗?如果是,我的TDD单元测试是否应该在相同的“确保/应该”样式中命名?
发布于 2011-10-01 14:46:27
BDD在TDD循环周围添加一个循环。
所以你从一种行为开始,让它驱动你的测试,然后让测试驱动开发。理想情况下,BDD是由某种验收测试驱动的,但这并不是100%必需的。只要你有预期的行为定义,你就会没事。
那么,假设你在写一个登录页。
从快乐的道路开始:
Given that I am on the login page
When I enter valid details
Then I should be logged into the site
And shown my default page在行为驱动的开发中,这种给定的和当时的语法是常见的.它的优点之一是它可以被非开发人员阅读(并且,通过培训,编写) --也就是说,您的利益相关者可以查看您为成功完成一项任务而定义的行为列表,并在发布不完整的产品之前查看它是否符合他们的期望。
有一种称为Gherkin的脚本语言,它看起来非常类似于上面的语言,它允许您在这些行为中的子句后面编写测试代码。您应该为您通常的开发框架寻找一个基于Gherkin的翻译。这超出了这个答案的范围。
不管怎么说,回到行为。您的当前应用程序还没有这样做(如果是这样的话,为什么有人请求更改?),所以您正在测试失败,无论您使用的是测试运行程序还是只是手动测试。
所以现在是时候切换到TDD循环来提供这个功能了。
无论您是否正在编写BDD,您的测试都应该被命名为一个通用语法。其中最常见的是您描述的“应该”语法。
编写一个测试: ShouldAcceptValidDetails。经历红绿重构循环,直到你满意为止。我们现在是否通过了行为测试?如果没有,编写另一个测试: ShouldRedirectToUserDefaultPage。红-绿-重构直到你快乐。清洗,冲洗,重复,直到你达到行为中规定的标准。
然后我们继续下一种行为。
Given that I am on the login page
When I enter an incorrect password
Then I should be returned to the login page
And shown the error "Incorrect Password"现在你不应该先发制人来改变你以前的行为。在这一点上你应该通过这个测试。所以回到你的TDD周期。
等等,直到你有了你的页面。
强烈推荐Rspec书来了解更多关于BDD和TDD的信息,即使您不是Ruby开发人员。
发布于 2015-11-26 15:13:52
我对此的理解是:
因此,为了解决TDD所做的正确的部分BDD。BDD开始于TDD语言的改变,以明确流程的意图。BDD上的丹·诺斯的介绍性文章解释了为什么专注于单词行为而不是测试是有用的-它有助于确认您不仅仅是在构建正确的软件,您还在构建正确的软件。这一直是一个好的TDD方法的一部分,但是Dan将其编码为BDD。
我认为BDD比TDD更明确,或者至少是形式化并提供工具支持,是这种双周期/双循环/放大放大/外部放大的方法。首先描述特性(外部循环)的预期行为,然后放大到内环,以处理低级规范。

来自http://www.metesreau.com/ncraft-workshop/
Gherkin与诸如Cucumber和SpecFlow等工具一起,提供了一种编写这些高级特性规范的方法,然后将它们链接到执行应用程序代码的代码中。我认为这就是BDD可能“感觉”与TDD不同的地方,但它仍然在做同样的事情,只是添加了一些工具支持和DSL。有点接近“传统”的TDD是使用像rspec,nspec,spock这样的工具。这些感觉更像你在“传统”TDD中所做的相同的过程,但是更多的是以行为为中心的语言。
在约翰·弗格森·斯马特( John,强烈推荐的)的BDD在行动中中,他主张采用双循环方法,从外层可执行规范的jBehave开始,然后进入像Spock这样的低级别规范工具。
BDD使测试驱动的概念更接近于业务涉众。Gherkin是为业务可读性而设计的,“活动文档”的概念,即从您的可执行规范自动生成进度报告,就是向涉众提供反馈。
BDD现在的另一个部分,也就是它真正成为将TDD作为更大流程的一部分的东西的地方,就是需求激发的零碎部分。特性注入、影响映射和Real等想法都是这方面的一部分。
对于这方面的规范答案,最好是再去丹北。如果您的团队都是开发人员,那么BDD = TDD。如果您的团队涉及所有涉众,BDD更接近XP,TDD是其中的一部分。
发布于 2011-10-01 14:40:00
BDD与TDD的关系是什么?
他们是一回事。
据我所知,BDD在TDD上增加了两项主要内容:测试命名(确保/应该)
这并不是BDD“补充”的东西。这只是一个不同的惯例,目的是为了更容易地教和理解TDD。
创建BDD的人都在教授TDD,他们注意到最难理解的是TDD与测试完全无关。一旦学生们克服了这个障碍,他们就容易多了。但是,当“测试”(或相关术语,如“断言”)几乎随处可见时,你很难摆脱对测试的思考。所以他们换了几个词。
但这只是言语而已!TDD与BDD之间没有实际差异。
以及验收测试。
验收测试与BDD一样是TDD的重要组成部分。再次: TDD和BDD之间没有区别: TDD正确是BDD,BDD是TDD正确的。
https://softwareengineering.stackexchange.com/questions/111837
复制相似问题