BDD和TDD,正确的工作流程是什么?

Ale*_*lex 5 tdd bdd

我的理解是这样的:

BDD 是评估软件需要如何运行,然后编写代码基础的验收测试的过程。您可以使用 TDD 方法编写代码,为方法编写单元测试并围绕单元测试构建类(代码、测试、重构)。编写代码后,您对其进行测试以查看其是否满足原始验收测试。

任何对我的解释有完整经验的人都可以评论并使用这些敏捷原则演练一个简单的应用程序吗?我看到不同的出版物中有大量关于 BDD 和 TDD 的文字,但我正在研究这两个过程如何在现实世界的开发中相互补充。

Lun*_*ore 4

尝试将它们视为示例,而不是测试。

对于整个应用程序,我们提供了一个用户如何使用该应用程序的示例。该示例是说明该行为的特定行为实例。例如,我们可能会说收银申请允许退款。使用该收银机的收银员会熟悉弗雷德带回微波炉要求退款的场景:

鉴于 Fred 以 100 美元购买了一台微波炉,
当他将微波炉带回来要求退款时
,那么他的信用卡上应该会收到 100 美元的退款。

现在也很容易想到其他场景;例如,Fred 获得折扣但只获得 90 美元退款,或者 Fred 自己损坏了微波炉而我们拒绝退款,等等。

当我们真正开始编写收银机软件时,我们将代码分解成小块;类、函数、模块等。我们可以描述一段代码的行为,并提供一个示例。例如,我们可能会说退款计算器应该考虑折扣。这只是退款场景的一小部分。我们有一个类RefundCalculator和一个单元测试,其方法为shouldTakeDiscountsIntoAccount

我们可以将示例的步骤放在注释中,例如:

// Given a microwave was sold at 10% discount for $100

...

// When we calculate the refund due

...

// Then the calculator should tell us it's $90.

...
Run Code Online (Sandbox Code Playgroud)

然后我们填写代码以将其转变为单元测试,并编写使其通过的代码。

通常“BDD”是指描述整个应用程序的场景,但其思想实际上是从单元级别开始的,原理是相同的。唯一的区别是,一个是用户使用应用程序的示例,另一个是一个类使用另一个类(或函数,或者您拥有的东西)的示例。因此,应用程序外部的 BDD 就像 ATDD(验收测试驱动开发),而类的 BDD 就像 TDD。希望这有助于您了解这些概念如何结合在一起。

唯一的区别是我们去掉了“测试”这个词,因为我们发现向人们询问例子比测试更容易,而且它有助于让人们思考他们是否理解问题,而不是思考如何测试一个办法。

关于“自上而下”(或由外向内)与“自下而上”的答案也可能对您有帮助。