什么是TDD?
TDD全称是测试驱动开发,在这种软件开发测试流程中,我们首先创建测试用例,然后为这些测试用例编写对应的测试代码。虽然TDD是一种用在开发开的技术手段,但它也可以用于自动化测试开发。
团队使用TDD模式,往往意味着需要更多的时间来开发产品,但是他们通常很少发现产品缺陷。TDD提高了代码的质量,使其更具可重用性和灵活性。
TDD还有助于提高测试覆盖率,对于遵循TDD的测试人员来说,最具困难的事是需要在编写代码之设计并实现测试用例。
TDD实施流程
- 编写测试用例:根据需求,编写自动化测试用例。
- 运行所有测试用例:在当前环境中运行这些自动化测试用例。
- 为测试用例开发代码:如果测试用例失败,那么,编写代码使该测试用例按预期工作。
- 再次运行测试用例:再次运行测试用例,并检查到目前为止开发的所有测试用例是否都已实现。
- 重构代码:重构代码以使其更具可读性和可重用性。
- 对新的测试用例重复步骤1-5:对其他测试用例重复这个循环,直到所有的测试用例都被实现。
TDD样例
例如,我们需要开发一个应用程序,其包含用户名和密码字段以及提交按钮。
Copy to Clipboard
Copy to Clipboard
什么是BDD?
BDD全称是行为驱动的开发,BDD是TDD的扩展,替代了写测试用例,而是描述用户行为,在此之后,开发应用程序为实现此需求行为的代码。
BDD模式中定义的场景使开发人员、测试人员和业务用户能够轻松地进行协作。
当实现自动化测试时,BDD被认为是一种最佳实践,因为它关注的是应用程序的行为,而不是具体代码的实现。
BDD实施流程
BDD方法遵循以下流程,与TDD非常相似:
- 编写应用程序的行为:应用程序的行为是用简单的语言描述的。
- 编写自动化脚本:然后将这种简单的描述语言转换为编程语言。
- 实现功能代码:然后实现行为的基础功能代码。
- 检查行为是否成功:运行行为并查看是否成功。
- 重构或组织代码:重构或组织代码以使其更具可读性和可重用性。
- 对新行为重复步骤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提供了更高的代码覆盖率。
对于两者如何选取,这取决于项目团队、成员以及对应的开发测试流程,多方面因素来决定。