本指南旨在描述不同的测试方法或实践,例如行为驱动开发(BDD)、测试驱动开发(TDD)、
验收测试驱动开发(ATDD)。它还将描述这些技术之间的主要区别。在文章最后,将描述它们是怎样工作的,它们的关键差异以及在开发过程中所扮演的独特的角色。
原文:https://www.browserstack.com/guide/tdd-vs-bdd-vs-atdd
什么是测试驱动开发-Test-Driven Development (TDD)?
测试驱动开发是从开发人员角度使用的一种测试方法或者说编程实践。
在采用此方法的场景中,QA工程师会针对应用的一个个功能设计并编写测试用例。
此方法是为了回答一个简单的问题,那就是‘代码是否有效?’
此方法的主要目的是仅在测试失败时才修改或编写新代码。因此,它减少了测试脚本的重复。
此方法在敏捷开发团队中很受欢迎。
在程序开发过程中,使用此方法时,一般会在功能代码编写之前先写自动测试代码。
TDD一般步骤:
- 根据详细需求编写自动化测试用例
- 执行测试,在对应功能开发完成前,该功能的测试用例会执行失败。
- 开发团队根据测试结果编写或修改代码
流程图如下:
Refactoring:指在不更改其主要功能或行为的情况下修改代码的过程。
测试驱动开发(TDD)的优势:
- 帮助减少返工所需的时间
- 帮助快速发现bug或错误
- 帮助获得更快的反馈
- 促进产生更简洁、更好的设计
- 提高开发人员工作效率
- 允许任何团队成员在没有某一团队成员的情况下修改其代码。 这鼓励了知识共享和协作
- 使开发人员有信心轻松更改大型框架的应用程序
- 使代码更易扩展和维护
什么是行为驱动开发- Behavioral-Driven Development (BDD)?
行为驱动开发(BDD)是一种源自测试驱动开发(TDD)方法的测试方法。
行为驱动开发是基于系统行为的一种测试方法,该方法基于系统行为定义出很多用于开发功能点的途径。
在大多数情况下,Given(给予操作条件)-When(执行相关操作)-Then(得到预期结果)是用来编写测试用例的方法。为了便于理解,下面给出一个例子:
- Given(给予操作条件):用户输入有效的登录凭证
- When(执行相关操作):用户点击登录按钮
- Then(得到预期结果):显示成功的验证消息
如上所述,用比较简单的语言文字描述了一个系统行为,这能够帮助团队开发人员去理解一个功能应该怎样去表现。
行为驱动开发(BDD)的主要优势:
- 通过使用非技术语言扩大了受众
- 从用户和开发人员的角度聚焦系统行为
- 经济且高效
- 减少了每次部署后回归的工作量
下图描绘了BDD典型的运作方式:
BDD如何在SDLC(软件开发生命周期)中提供帮助?
在开发生命周期的后期阶段调试错误通常需要比较大的代价。在大多数情况,对需求的不同理解是其背后的根本原因。这就需要确保所有的开发工作始终保持以满足预定的需求为准。
通过以下操作BDD可以帮助开发人员完成这个目的:
- 使用简单的语言文字按标准的方式定义需求
- 提供几种方法来说明现实场景以了解需求
- 提供一个平台,使技术团队和非技术团队能够协作并了解需求
什么是验收测试驱动开发- Acceptance Test-Driven Development (ATDD)?
在验收测试驱动开发(ATDD)技术中,从用户的角度编写了一个验收测试。 它主要侧重于满足系统的功能行为。 该技术用于检测代码是否按预期工作。
注意:ATDD与BDD非常相似,它们之间的主要区别是:BDD更多的是聚焦功能点的行为,而ATDD是捕获更精准的需求。
这项技术加强了开发人员、用户和QA工程师之间的协作,使其关注点聚焦于定义验收标准。以下是ATDD中的一些关键做法:
- 分析和讨论真实场景
- 确定这些真实场景下的验收标准
- 自动化验收测试用例
- 专注于那些需求案例的开发
ATDD优势:
- 对需求进行了非常清晰的分析,没有任何歧义
- 促进跨团队成员之间的合作
- 验收测试可作为整个开发过程的指南
TDD vs BDD vs ATDD的关键区别
对比特性 | TDD | BDD | ATDD |
---|---|---|---|
定义 | TDD是一项开发技术,关注点在功能的实现 | BDD是一项开发技术,关注点在系统的行为 | ATDD是一项类似BDD的技术,关注点更多是围绕需求 |
参与者 | 开发者 | 开发者、用户、QAs | 开发者、用户、QAs |
使用语言 | 开发语言(Java、Python等等) | 小黄瓜(Gherkin) | 小黄瓜(Gherkin) |
主要关注点 | 单元测试 | 理解需求 | 编写验收测试用例 |
使用工具 | JDave, Cucumber, JBehave, Spec Flow, BeanSpec, Gherkin Concordian, FitNesse | Gherkin, Dave, Cucumber, JBehave, Spec Flow, BeanSpec, Concordian | TestNG, FitNesse, EasyB, Spectacular, Concordian, Thucydides |
理解这些方法的工作方式可以帮助开发人员和其他参与软件开发的人员找出哪种策略最适合他们的目的,根据项目需要达到的目标,正确的运用一种或多种方法以最有效的方式满足需要。