BDD如何补充TDD

4
自从我听说BDD(行为驱动开发)以来,我一直在想它是否能补充TDD? 它在Web开发中真的有用吗? 作为一个忙碌的.NET Web开发人员,是否值得花时间学习BDD和TDD? 当我学习它时,我发现它非常有趣,但我对它如何对我们有用感到困惑!
我遇到了这句话,但它实际上是什么意思?
尽管这些工具通常是专门为BDD项目开发的,但它们可以被视为支持测试驱动开发的工具的专业形式。 这些工具用于向BDD的核心主题-普遍语言添加自动化。
4个回答

4
首先,一些定义;
TDD是测试驱动开发,顾名思义,我们产生的测试驱动了我们的开发流程。通常与红绿重构周期一起描述。因此,在实践中,我们编写一个单元测试并失败,给我们一个红色状态,然后我们修复我们的应用程序代码直到我们通过测试,给我们一个绿色状态,最后我们重构我们的应用程序代码和测试代码,以便我们拥有良好的设计。良好的TDD通过将每个测试集中在我们想要测试的类中的单个方法上,并注入模拟依赖项,使我们测试最小可能量的代码,这导致测试套件中单个错误会导致单个失败。
BDD是行为驱动开发,其中行为是我们设计过程的驱动因素。当您遵循BDD流程时,您需要与人们合作,确定应用程序的功能和特点,并捕获它应该运行的一些场景示例。实际上,我们也可以将BDD视为一个周期,在这个周期中,我们收集应用程序应具备的新功能,验证应用程序是否适用于所有情况,可能重构我们的测试以使它们最有意义,然后重复整个过程。BDD测试通常需要许多类协作来生成单个业务功能,因此即使出现错误触发了单个失败,您仍然需要追踪大量代码以找到负责的代码。
在这一点上,您可以看到BDD的工作级别高于TDD,事实上我已经看到BDD外部周期成功地用于驱动一个TDD内部周期,例如:
定义新的业务功能 ---> 添加场景和测试:BDD Red | -> 添加单元测试:TDD Red | | 添加应用程序代码:TDD Green | -- 重构代码:TDD refactor | 场景通过:BDD green --- 重构功能和场景:BDD refactor 功能完成

Gojko Adzic在他的演讲TDD:Breaking the mould中更好地描述了这一点。

它在Web开发中实际上有什么用处? BDD非常有用,因为它是一个用于收集需求的过程,并通过BDD工具自动确认您的代码库具有业务所需的所有功能。我发现BDD最适合使用多个类协作的集成样式测试,而不是专注于单个方法的单元测试。

您可以使用BDD构建应用程序逻辑,并可以使用它来测试大部分网站。我个人会避免测试UI,而是在代码后面工作,使用诸如“当用户搜索BDD”之类的语言,但有些人使用Selenium并编写关于单击和测试框的测试,“当用户在搜索文本框中输入BDD并单击搜索按钮”。

作为.NET中忙碌的Web开发人员,将时间花费在BDD和TDD上是否值得?

希望现在你能自己回答这个问题了。你需要决定引入BDD到你的流程中会得到多少好处。你的好处将根据团队规模和你选择的工具等因素而异。
我注意到你正在使用标记你的问题与nBehave一起使用的纯文本规范形式的BDD工具。这使你可以让BA团队处理纯文本场景并将它们提交回来(虽然不要全部交给他们,你需要一些技术输入来保持场景的一致性)。其他形式的工具,如mSpec,则是相反的方式,使用C#来描述场景,并生成纯文本作为构建过程的结果。个人使用SpecFlow,它具有nBehave的所有优点,但其测试可以通过nUnit运行器、resharper和你的构建服务器运行。但你可能想把你的集成测试与单元测试分开,并报告不同级别的覆盖率,例如。
最后,
尽管这些工具通常是专门为BDD项目开发的,但它们可以被看作是支持测试驱动开发的工具的专业形式。这些工具用于向BDD的普遍语言添加自动化,这是BDD的一个核心主题。
这意味着BDD工具的工作方式与我们现有的TDD工具类似,并且知道如何生成或理解Given When Then的BDD语法。如果想了解更多信息,建议阅读https://github.com/cucumber/cucumber/wiki/Gherkin
如果您想了解更多关于BDD作为一个过程的内容,Liz Keogh有很多非常好的资料,可以从这里开始http://lizkeogh.com/behaviour-driven-development/
(当我开始时,哎呀,这比我想象的要长得多)

谢谢,很高兴听到这个 :-) - AlSki

1

BDD complements TDD

Cucumber(以及BDD总体上)的思想是利用利益相关者来协助编写场景 - 或可执行规范。这解决了TDD中“从哪里开始”的问题。

http://dannorth.net/introducing-bdd


1
TDD和BDD的关键区别在于范围。TDD是一种开发实践,而BDD是一种团队方法论。在TDD中,开发人员编写测试,而在BDD中,用户或测试人员创建自动化规格说明(开发人员将其连接到正在测试的代码)。对于小型、共同定位、以开发人员为中心的团队,TDD和BDD实际上是相同的。
有关您两个问题的全面答案,请参见此处
您可以在此处找到有关TDD和BDD的一些代码示例。

1
BDD是正确执行的TDD,Dan North本人是一位TDD培训师,他发现如果我们可以用“行为”代替“测试”这个词,会更有帮助。
BDD的关键原则是:
1. 从外部到内部工作——先测试方法,从外部开始编写测试,这意味着编写测试以测试系统的行为。 2. 普及语言——非技术和技术人员都可以理解的语言,这就是GWT(Given When Then)格式产生的原因。 3. 使用示例——示例是一组输入和输出,行为测试应该通过。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接