行为驱动开发(BDD)和验收测试驱动开发(ATDD)之间有什么区别?

zek*_*eer 8 tdd bdd

我正在写一篇简短的论文来阐述单元测试和TDD的好处.我在最后加入了一个名为"超越TDD"的简短部分,其中我希望能够涵盖基于TDD,BDD和ATDD的几种不同方法.

我对BDD很熟悉(我使用过SpecFlow),但在读完ATDD之后,听起来非常相似.BDD和ATDD只是基本上相同过程的两个名称 - 以"无处不在的"语言记录行为,生成自动验收测试套件,然后继续进行验收测试?

小智 9

虽然我一般同意gishu的帖子,但有几个方面我不同意.在恕我直言部分,他将BDD规范作为由Rachel Davies等人开发的用户故事规范呈现:作为...我想......这样.

BDD规范是给定的...当......然后......如同

鉴于用户已登录,当用户点击x时,我们应该看到Y.

这是关于条件,行动和期望,是BDD的核心.

正如gishu所建议的那样,ATDD是通过使用验收测试规范来推动开发的实践,该规范被实施为可执行的验收标准.BDD形式的规范既不是必需的,也不是"最佳实践".然而,在实践中,将思维和语言集中在如何验证工作是否令人满意并满足要求方面是有效的.

请注意,BDD并非特别基于TDD.ATDD松散地基于TDD,因为它是在开发完成之前完成的测试.除此之外,它不是关注开发人员的工作,而是关注项目的整体方向和验证.ATDD与Story Mapping很好地融合在一起,因为它在发现阶段发挥得很好,当时正在编写更高级别的要求,并且知道"我们怎么知道它何时正确完成?"很重要.


Gis*_*shu 5

BDD(Dan North,Dave Astels,Dave Chelimsky等人)是一个让整个交付过程变得敏捷的运动.

据说,做BDD的团队将采用ATDD的做法 - 即以可接受标准的可执行规范开始的过程.一个有效的图形指出了ATDD包裹TDD内循环的地方.

ATDD只是在开发之前从可执行验收标准开始并使用它来塑造底层代码库的设计(很像TDD但更笨重的水平)的做法.

以下是完全恕我直言,可能不完全准确: 你可能正在做ATDD但仍然没有做BDD:

例如,我可能正在编写自动验收测试,但这些测试不可读......这些测试无法传达意图.我可以编写一套全面的自动"回归"测试,但不会告诉我系统做了什么/它是如何工作的.

  • BDD强调语言和沟通.例如,指定行为,而不是说

*测试*XDoesY

BDD会将其指定为

作为一个StakeHolder,X 应该做Y,这样我就可以Z.

因此,要关闭,我认为主要的区别(这可能会发生,但不必)是ATDD可能变成一个全面的自动化套件,它只是充当积极发展+回归的目标.BDD会恳请您通过可执行的示例将问题和解决方案域+ 活文档之间的共同语言进一步发展,以便将来进行建设性对话


Edu*_*Edu 0

我想说没什么。我的第一个假设是 ATDD、BDD、示例规范、敏捷验收测试等都意味着同一件事。如果有人使用这些术语来表示不同的事物,他们可以更好地解释上下文中的差异。