什么是TDD?

TDD全称是测试驱动开发,在这种软件开发测试流程中,我们首先创建测试用例,然后为这些测试用例编写对应的测试代码。虽然TDD是一种用在开发开的技术手段,但它也可以用于自动化测试开发。
团队使用TDD模式,往往意味着需要更多的时间来开发产品,但是他们通常很少发现产品缺陷。TDD提高了代码的质量,使其更具可重用性和灵活性。
TDD还有助于提高测试覆盖率,对于遵循TDD的测试人员来说,最具困难的事是需要在编写代码之设计并实现测试用例。

TDD实施流程

  1. 编写测试用例:根据需求,编写自动化测试用例。
  2. 运行所有测试用例:在当前环境中运行这些自动化测试用例。
  3. 为测试用例开发代码:如果测试用例失败,那么,编写代码使该测试用例按预期工作。
  4. 再次运行测试用例:再次运行测试用例,并检查到目前为止开发的所有测试用例是否都已实现。
  5. 重构代码:重构代码以使其更具可读性和可重用性。
  6. 对新的测试用例重复步骤1-5:对其他测试用例重复这个循环,直到所有的测试用例都被实现。

TDD样例

例如,我们需要开发一个应用程序,其包含用户名和密码字段以及提交按钮。

Copy to Clipboard
Copy to Clipboard

什么是BDD?

BDD全称是行为驱动的开发,BDD是TDD的扩展,替代了写测试用例,而是描述用户行为,在此之后,开发应用程序为实现此需求行为的代码。
BDD模式中定义的场景使开发人员、测试人员和业务用户能够轻松地进行协作。
当实现自动化测试时,BDD被认为是一种最佳实践,因为它关注的是应用程序的行为,而不是具体代码的实现。

BDD实施流程

BDD方法遵循以下流程,与TDD非常相似:

  1. 编写应用程序的行为:应用程序的行为是用简单的语言描述的。
  2. 编写自动化脚本:然后将这种简单的描述语言转换为编程语言。
  3. 实现功能代码:然后实现行为的基础功能代码。
  4. 检查行为是否成功:运行行为并查看是否成功。
  5. 重构或组织代码:重构或组织代码以使其更具可读性和可重用性。
  6. 对新行为重复步骤1-5:重复步骤在应用程序中实现更多行为。

BDD样例

Copy to Clipboard
Copy to Clipboard

TDD vs. BDD

TDD BDD
测试驱动开发 行为驱动开发
从编写测试用例开始 从编写行为场景开始
TDD主要关注如何实现功能 BDD关注最终用户的应用程序行为
测试用例是用编程语言编写的 场景更具可读性
TDD中的测试脚本只能被有编程知识的人理解 BDD中的测试脚本可以被任何人理解,包括没有任何编程背景的人
应用程序的变化对TDD中的测试用例影响很大 BDD场景不受功能更改的太大影响
只有在开发人员之间才可协作 所有利益相关者之间都可协作
TDD的工具:JUnit、TestNG、NUnit等 BDD的工具:SpecFlow、Cucumber、MSpec等

结论

在TDD和BDD之间确实很难选择。有些人可能会说BDD更适合于探索产品的缺陷,而另一些人可能会说TDD提供了更高的代码覆盖率。
对于两者如何选取,这取决于项目团队、成员以及对应的开发测试流程,多方面因素来决定。