TDD和BDD之间的主要区别是什么?

在过去的几年中,测试驱动开发一直是.NET社区的热门话题。最近,我听到了ALT.NET社区对BDD的抱怨。它是什么?是什么使它不同于TDD?

0
另请参阅 programmers.stackexchange.com/q/135218/76176 。这个问题更多关于那里的话题。
额外 作者 Evan Carroll,

13 答案

行为驱动开发似乎更专注于开发人员之间也开发人员和测试人员之间的互动和交流。

维基百科文章有一个解释:

行为驱动的开发

尽管我自己不是在练习BDD。

0
额外

在我看来,BDD是一个更广泛的范围。它几乎意味着使用TDD,BDD是收集信息和要求的综合方法,其中包括使用TDD实践以确保快速反馈。

0
额外

我对BDD方法做了一些尝试,我的过早结论是BDD非常适合用例实现,但不适用于底层细节。 TDD仍然在这个水平上摇摆。

BDD也被用作通信工具。目标是编写领域专家可以理解的可执行规范。

0
额外

我了解BDD比测试更关注规范。它与领域驱动设计相关联(你不喜欢这些* DD首字母缩略词?)。

它以一定的方式来编写用户故事,包括高级测试。 Tom ten Thij

Story: User logging in
  As a user
  I want to login with my details
  So that I can get access to the site

Scenario: User uses wrong password

  Given a username 'jdoe'
  And a password 'letmein'

  When the user logs in with username and password

  Then the login form should be shown again

(在他的文章中,Tom继续直接在Ruby中执行这个测试规范。)

BDD的教皇是丹北。您可以在他的 BDD介绍文章中找到一个很好的介绍。

You will find a comparison of BDD and TDD in this video. Also an opinion about BDD as "TDD done right" by Jeremy D. Miller

2013年3月25日更新

上面的视频已经失踪了一段时间。这是Llewellyn Falco最近的一个, BDD vs TDD(解释)。我发现他的解释清楚明了。

0
额外
Christian,视频标题和演讲者的名字是什么?所以我们可以追踪它
额外 作者 smci,
视频链接似乎变质了
额外 作者 James Nail,
'Tom Ten Thij'上面的链接现在已经死了..这里是直播@ - tomtenthij.nl/2008/1/25/…
额外 作者 Kundan Pandit,

Difference between test-driven development (TDD) and behavior-driven development (BDD)

    BDD侧重于系统的行为方面而非
    TDD关注的系统的实现方面。 BDD更清楚地了解系统应该做什么 从开发人员和客户的角度来看。仅限TDD
    让开发人员了解系统应该做什么。 BDD允许开发人员和客户一起工作 需求分析包含在源代码中 系统

0
额外

以下是快照:

  • TDD is just the process of testing code before writing it!

  • DDD is the process of being informed about the Domain before each cycle of touching code!

  • BDD is an implementation of TDD which brings in some aspects of DDD!

希望有所帮助!

0
额外

对于我来说,BDD和TDD之间的主要区别是重点和措辞。单词对于传达你的意图很重要。

TDD将重点放在测试上。而且由于在实施之后的“老瀑布世界”测试中,这种思维导致了错误的理解和行为。

BDD将注意力集中在行为和规范上,因此瀑布心思分散注意力。所以BDD更容易理解为设计实践而不是测试实践。

0
额外
TDD是“测试第一”,可以很好地与敏捷一起工作。这是不准确的。
额外 作者 Terrance,
TDD与“瀑布式”软件设计生命周期无关。如果有的话,TDD是SDLC不可知的。 TDD的目的是编写测试通过所需的最小代码量。测试成为代码遵循的技术规范。
额外 作者 Gavin Baumanis,

BDD主要是TDD做的权利。然而,有这么BDD提供额外的价值。这里有一个链接:

BDD不仅仅是?TDD完成正确?

0
额外

This blog provides an interesting viewpoint on the differences between TDD, BDD, and ATDD: http://assertselenium.com/2012/11/05/difference-between-tdd-bdd-atdd/

0
额外

TDD和BDD没有区别。除非您可以更好地阅读您的测试,并且可以将它们用作需求。如果您使用与编写BDD测试相同的词语来编写需求,那么您可以使用准备好编写代码的一些测试来找到客户。

0
额外

考虑TDD的主要优势在于设计。它应该被称为测试驱动设计。 BDD是TDD的一个子集,称之为行为驱动设计。

现在考虑一个流行的TDD - 单元测试的实现。单元测试中的单位通常是一个逻辑单元,它是您可以完成的最小工作单元。

将这些单元放在一起以功能性的方式描述机器所需的行为时,您需要了解您正在向机器描述的行为。行为驱动设计侧重于验证实施者对用例/需求/任意的理解并验证每个功能的实现。 BDD和TDD总体上具有通知设计的重要目的,以及验证实施的正确性的第二个目的,特别是当它改变时。 BDD做对了涉及biz和dev(和qa),而单元测试(可能被错误地视为TDD而不是一种类型的TDD)通常在dev筒仓中完成。

我想补充一点,BDD测试可以作为生活需求。

0
额外

TDD和BDD之间的选择很复杂。这取决于您的特定目标语言是否有适当的测试框架,您的同事对此感到满意,有时还有其他因素。

有人认为BDD总是比TDD更好,因为它有可能消除使用TDD时可能出现的问题。

BDD的关键在于它可以防止问题;它不保证。像糟糕的代码组织,糟糕的设计实践等问题仍将持续存在。你只会有更低的可能性来编写不好的测试,因此具有更强大的功能。

0
额外

Test-Driven Development is a test-first software development methodology, which means that it requires writing test code before writing the actual code that will be tested. In Kent Beck?s words:

这里的风格是写几行代码,然后是一个测试   应该运行,甚至更好,编写一个不会运行的测试,然后编写   将使其运行的代码。

在弄清楚如何编写一小段代码之后,现在,我们不是只编写代码,而是希望立即得到反馈,并练习“编写一些代码,测试一下,编写一些代码,测试一下”。所以我们立即为它写一个测试。

所以TDD是一种低级别的技术方法,程序员可以用它来生成可以工作的干净代码。

Behavior-Driven Development is a methodology that was created based on TDD, but evolved into a process that doesn?t concern only programmers and testers, but instead deals with the entire team and all important stakeholders, technical and non-technical. BDD started out of a few simple questions that TDD doesn?t answer well: how much tests should I write? What should I actually test?and what shouldn?t I? Which of the tests I write will be in fact important to the business or to the overall quality of the product, and which are just my over-engineering?

正如您所看到的,这些问题需要技术和业务之间的协作。商业利益相关者和领域专家通常可以告诉工程师什么样的测试听起来像是有用的?但是只有当测试是处理重要业务方面的高级测试时。 BDD调用类似业务的测试?示例,?如在?告诉我一个这个功能如何正确行为的例子,?并保留单词“测试”用于低级技术检查,如数据验证或测试API集成。重要的是,虽然测试只能由程序员和测试人员创建,但设计师,分析师等可以通过整个交付团队收集和分析示例

在一句话中,迄今为止,BDD的最佳定义之一是发现是BDD是关于?与领域专家进行对话并使用示例获得对期望行为的共同理解并发现未知事物。发现部分非常重要。随着交付团队收集更多示例,他们开始越来越多地了解业务领域,从而减少了他们必须处理的产品某些方面的不确定性。随着不确定性的降低,交付团队的创造力和自主性会增加。例如,他们现在可以开始建议他们自己的例子,由于缺乏技术专长,业务用户认为是不可能的。

现在,与业务和领域专家进行对话听起来不错,但我们都知道这经常在实践中结束。我开始了作为程序员的技术之旅。作为程序员,我们被教给写代码算法,设计模式和抽象。或者,如果你是一名设计师,你会被教授 design 组织信息并创建漂亮的界面。但是,当我们获得我们的入门级工作时,我们的雇主希望我们“为客户提供价值”。在这些客户中可以是,例如......银行。但除了如何有效地减少我的账户余额外,我几乎可以知道银行业的情况。所以我不得不以某种方式将我期望的代码翻译成代码......如果我想提供任何价值,我将不得不在银行与我的技术专长之间架起一座桥梁。 BDD帮助我在交付团队和领域专家之间流畅交流的稳定基础上建立起这样一座桥梁。

了解更多

如果你想了解更多关于BDD的知识,我就这个主题写了一本书。 ?撰写重要规格? 探索分析需求的艺术,并将帮助您学习如何建立一个伟大的BDD流程,并将示例作为该流程的核心部分。本书讲述了无处不在的语言,收集了例子,并且创建了所谓的可执行规范(自动化测试),这些技术帮助BDD团队按时和按预算交付出色的软件。

如果你有兴趣购买?写出优秀的规格,? 您可以使用促销代码 39nicieja2 :)节省39%:

0
额外