TDD和BDD之间的确切区别是什么?您能简要向我解释一下吗?

评论

有一个名为Wikipedia的网站。请阅读en.wikipedia.org/wiki/Test-driven_development和en.wikipedia.org/wiki/行为驱动_development,尤其是en.wikipedia.org/wiki/Test-driven_development#TDD_and_BDD。

#1 楼

TDD(测试驱动开发)


涉及的人员:开发人员

摘要:开发人员首先定义测试(通常是单元测试)来开始编写代码。听起来可能很奇怪,但这实际上保证了较高的代码覆盖率,尤其是它迫使开发人员考虑自己在做什么。 TDD可以应用于任何类型的软件。

BDD(行为驱动的开发)


涉及的人员:任何人(理论上)

摘要:它允许先验定义软件的预期行为。
有许多工具(例如Cucumber)可用于编写“行为”。

您应该使用预定义的语法编写预期的行为,该语法将由开发人员转换为代码,并由QA进行测试。
BDD无法应用于任何类型的软件。



#2 楼

两者都是测试驱动开发的一种形式,因为您是预先编写测试的。主要区别在于TDD测试是技术测试,通常是在功能开发期间创建的单元测试,并且是在您在代码库中实现功能的一部分之前编写的。 BDD测试通常是在编码开始之前编写的,并且易于阅读,任何人都应该能够理解他们所测试的内容。 BDD测试被用作示例的规范。

但是它比BDD框架要复杂得多,因为像JBehave这样的BDD框架也可以用来编写单元测试,也可以用于端到端2集成测试。 。并没有什么真正迫使您让非开发人员可读的测试。

还有第三个术语ATDD(验收测试驱动的开发),这是BDD在BDD时代之前的称呼。这使得两者之间的区别更加清晰。

建议阅读的是




敏捷艺术的在线TDD章节
通过示例书进行规范
测试受驱动的书。

我个人认为我们应该为TDD找到另一个名称,它清楚地表明它是编写单元测试的一个周期,因为现在它是如此广泛,以至于在编码之前定义的任何测试都可以被调用。

希望我不会更加困惑,但是主要的区别是测试方法工作的技术测试(TDD)与描述行为的人类可读测试(BDD)。

#3 楼

在这里添加我的观点。

:DR:BDD专注于系统的行为方面,而不是TDD专注于系统的实现方面。

BDD给出了从开发人员和客户的角度更清楚地了解系统应该做什么。 BDD允许开发人员和客户一起进行包含在系统源代码中的需求分析。

TDD使开发人员可以了解系统应该做什么。 TDD鼓励编码人员/设计师进行所需的设计。 TDD中的测试可帮助程序员清楚地了解要构建的内容并在构建后停止。

TDD意味着您必须测试应用程序中的每个方法(嗯,不是每个方法,但至少要覆盖它们很多)-问他们-


“当我使用此参数执行操作时,您会产生什么影响?”。


BDD表示您必须测试每个用户的行为(同样,“每个”都是最好的情况,但有时您不能使用其他语言测试每个行为):


“当用户进入此页面时,填写此表单并将其发送给他们,他们会看到什么?”


请注意,在TDD中,您问的是“应用程序在做什么?”在BDD中,您问的是“什么可以看到用户?”

据我所知,TDD较为详尽,但有一个问题-它更依赖于实现。

如果更改类,方法的名称,方法返回的内容等,则必须更改测试。

BDD更加实用-我不在乎关于内部实现,但关于用户可以做什么和可以看到的内容。

如果您更改内部实现(更改您正在使用的Web服务,类的名称或算法),但是用户仍然看到它正在运行,就可以了。

希望TDD与BDD之战不再重演:)

从SO中添加一些有用的TDD与BDD链接:


链接1
链接2
链接3
链接4


#4 楼

测试驱动开发


TDD是将编写所有单元测试案例的技术团队。
TDD已安装用于测试。
TDD鼓励技术人员设计尽可能少的设计必需的
TDD帮助程序员清楚地了解要构建什么以及何时停止构建。
TDD着重于系统实现的方面
TDD的方法是由内而外的,TDD更像是用于构建可测试的模块化体系结构的开发工具。
Tdd =重构+ TFD行为驱动的开发
然后BDD要注意其功能方面。非开发人员也可以理解平均水平。
BDD运用了叙述格式(从那时开始,就是格式)。
BDD鼓励每个人尽可能少地构建。
编写示例BDD样式的行为使项目中的每个人都清楚了解函数的含义以及何时停止其构造。
BDD专注于系统行为方面,是一种从内而外的BDD方法。首先确定业务结果,然后深入研究将实现基于结果的功能集。每个功能集均被记录为“故事”。
BDD = TDD +需求增量分析


#5 楼

我发现该博客很好地理解了TDD和BDD之间的区别-
https://onpathtesting.com/why-go-for-behavior-driven-development-bdd/

评论


请添加更多有关如何解释差异的描述。仅链接答案不是最佳答案,因此不赞成。

–demouser123
16年2月26日在6:50

#6 楼

我知道我迟到了5年:-(但我认为这个问题甚至在5年后仍然有意义,因为对于许多人来说,这仍然是一个悬而未决的问题。我还认为,迄今为止所获得的答案还不够全面,无法准确解释这些差异。
这是TDD和BDD之间的5个主要区别:


TDD由开发人员实现,而BDD是通过团队中跨职能成员之间的协作实现的。 BDD取得成功


TDD中的测试场景是使用编程语言实现的。BDD用自然语言编写


开发人员有责任创建和维护TDD工件。而BDD工件是通过协作开发并由整个团队维护的


TDD是黑盒测试,BDD是白盒测试


TDD是针对单个功能编写的,而BDD通常是针对端到端行为编写的。


文章,使用示例和代码解释这些差异。文章的链接如下:
https://blog.nocodebdd.com/bdd-vs-tdd/