`

TDD vs BDD vs ATDD

 
阅读更多

软件开发可能是太势不可挡的。有许多语言、框架和工具需要理解。还有一些流程需要遵循。编写代码对开发人员来说通常并不困难。

 

困难在于弄清楚要写什么代码,如何处理不同的情况,并试图预测用户想要什么。我们可以通过提前编写测试来解决这个问题。这样做为开发人员提供了一组可验证的正确标准。

 

TDD(测试驱动开发)、BDD (行为驱动开发)和 ATDD (验收测试驱动开发) 都将“驱动开发” (xxDD) 作为其首字母缩写的一部分。

 

这些框架通过让我们在开发开始前做好准备来推动开发,使开发遵循预定义的路径。他们关心我们在开发之前花在计划和编写测试上的时间。测试已经就绪,为我们需要构建的内容提供了清晰的预期。我们开发人员不断地处理这些需求,当所有的测试都成功时,我们知道我们已经完成了。

 

当谈到过程选项时,每个人都有一个成功的故事来解释为什么应该使用他们的方法。我认为你应该探索不同的过程,并使用最适合你和你的团队的方法。本着这种精神,我将介绍 TDD、BDD 和 ATDD,并解释为什么您应该尝试它们。

 

TTD (测试驱动开发)

测试驱动开发定义了开发人员在编写代码之前编写测试的过程。它遵循红色>绿色>重构循环。首先,编写一个测试,看看它是否失败。这是红色的舞台。然后,编写代码使测试通过。这是绿色阶段。最后,您将检查代码和测试,并进行更改以在不破坏任何工作测试的情况下简化它们。这是重构阶段。然后重复这个循环来完成所有的需求。这通常是开发人员独有的做法,因为开发人员接受项目需求,然后编写测试和代码来实现它们。一旦所有测试通过,开发人员就可以将他们的工作交给测试人员或业务专家进行验证。

TDD测试是用代码编写的,并且应该用与系统其余部分相同的编码语言编写。开发人员已经熟悉他们的语言,所以学习编写测试应该相当容易。这些测试往往是技术性的,对于非开发人员来说很难理解。

当您有一组已知的输入和预期的输出时,TDD工作得最好。特别是当实现这些输出的逻辑很复杂时,TDD可以帮助您简化复杂性。开发人员能够将大问题分解成很小的部分,并一次专注于一件事。

 

 

 

BDD(行为驱动开发)

行为驱动开发方法有一个非常特殊的结构。业务专家在开发之前编写测试,而不是开发人员。这些测试是用一种叫做“小黄瓜”的独特句子结构写成的。当以这种方式编写测试时,软件可以将它们转换成大纲,供开发人员在其编码语言中使用。开发人员用实现测试所需的代码替换大纲。

当您拥有确切知道他们希望项目做什么的业务专家时,BDD是非常好的。他们可以通过编写表达意图的测试来驱动开发,同时为开发人员提供明确的方向。

 

给定,何时,何时

 

写出要求和给出的时间,以及句子的关键字。

 

给定用户名“user”和密码“password”,当按下登录按钮时,用户将被发送到主屏幕。

 

给定一个用户名“user”,告诉开发人员系统将需要接受用户名输入,并在这个测试中使用值“user”。然后,开发人员将使用翻译软件生成代码大纲,将重点放在单独的小代码段上。该软件自动重用编写的大纲。可以想象,随着更多测试的添加,它将变得多么强大。

 

添加一个以给定用户名“admin”开始的新测试意味着使用admin值而不作任何更改。因此,您可以看到添加新测试如何通过重用现有逻辑来加快开发速度。这意味着开发人员可以在测试的“何时”或“何时”部分关注新内容。

 

每个人都能理解这些测试的内容,因为它们的格式很容易理解。当测试失败时,您可以很容易地理解是什么导致了测试失败。由于将这些测试转换成编程语言依赖于软件,所以您需要确保您的团队可以使用BDD。

如果您不能使用BDD自动化,您仍然可以从这种方法中学习。通过遵循给定的何时编写、然后编写需求的风格,您仍然可以获得这种方法提供的一致性和易于理解。

 

 

ATDD (验收测试驱动)

验收测试驱动的开发是关于与业务专家、开发人员和测试人员协作编写测试。同样,您希望在进行编码工作之前编写测试,通过将这组人员聚集在一起,每个人在继续工作之前都能达成一致。业务专家带着他们的知识,能够在一开始就回答任何问题。开发人员了解系统当前在幕后做什么,以及在技术限制下什么是可行的。测试人员能够连接双方,同时也知道如何测试需求已经完成。通过共同定义测试和需求,团队能够灵活地适应项目的目标。

 

在此协作期间,测试人员应该实现接受开发已经完成所需的所有测试。这些测试通常比使用TDD编写的测试级别更高,但它们可能不是完整的UI自动化测试。您希望这些测试能够证明使用给定的输入集创建了预期的输出。可以将这些测试看作是一个数据输入和输出的矩阵,它可以使系统自动化。开发人员现在使用已经就位的验证测试来编写代码。了解黄瓜工具和如何使用它的BDD或ATDD,看看我们的培训课程。

 

ATDD对于在整个团队中传播知识很有价值。每个成员提供不同的专业知识,但通过这种交流,每个人都获得了更深的理解。当出现意想不到的问题时,可以发现这种方法的另一个好处。开发人员或测试人员可以使用业务专家表达的意图来回答问题,而无需等待。

 

 

TDD实施计划

通过测试来推动整个开发,但测试驱动开发不仅仅是简单的测试工作,而是一个将需求分析、设计、质量控制量化的过程。

发展原则

先写测试代码,再写函数代码。

  1. 根据需求文档编写测试代码,不实现功能;
  2. 不想一口就胖。测试大的功能块时,首先应该将它们拆分成更小的功能块进行测试;
  3. 切记不要写代码来完成功能,用尽可能简单的代码来实现功能;
  4. 如果需求可以测试,就写测试代码,不能测试的或者觉得不需要测试的就放弃;
  5. 在更改/添加任何功能代码之前,首先要考虑是否要更改/添加测试用例;
  6. 功能/测试代码、结构不合理、重复代码等,测试通过后及时重构。

TDD开发流程

  1. 分析并确定目标测试场景;
  2. 添加单元测试,验证测试场景的输入输出;
  3. 运行测试,得到失败的测试结果;
  4. 编写最简单的函数代码通过测试;
  5. 再次运行测试,看到测试通过;
  6. 进行代码重构,包括功能代码和单元测试代码;
  7. 重复以上步骤,直到开发完成。

TDD 的好处

  1. 减轻开发者的负担通过一个清晰的过程,让我们一次只关注一个点,思考的负担就少了。
  2. 保护网覆盖完整的单元测试为产品代码提供了一张保护网,可以轻松应对需求变化或改进代码设计。所以如果你的项目需求稳定,一次性完成,并且没有后续变化,那么TDD的好处就少了。
  3. 提前明确要求先写测试可以帮助我们提前思考需求,明确需求的细节,而不是在代码写到一半时才发现不清楚的需求。
  4. 快速反馈很多人说TDD的时候,我的代码量增加了,所以开发效率降低了。但是,如果没有单元测试,就得手动测试,花费大量时间准备数据、启动应用程序、修改界面等等,而且反馈很慢。准确地说,快速反馈是单元测试的一个好处。
 

 

分享到:
评论

相关推荐

    Test Driven: Practical TDD and Acceptance TDD for Java Developers (PDF英文版)

    学习《Test Driven: Practical TDD and Acceptance TDD for Java Developers》,开发者将掌握如何在Java项目中实施TDD和ATDD的最佳实践,包括如何编写有效的单元测试、如何使用mocking和stubs、如何组织测试代码、...

    RIP TDD原文搬运

    未来,开发者可能需要探索和采用如BDD(行为驱动开发)、ATDD(验收测试驱动开发)或其他敏捷实践,以适应不断变化的软件开发需求。同时,持续集成、静态代码分析和自动化测试套件等工具也能够辅助解决TDD不再适用时...

    Manning.Test.Driven.TDD.and.Acceptance.TDD.for.Java.Developers

    《测试驱动开发与验收测试驱动开发 for Java 开发者》是Manning出版社的一本专业书籍,专注于Java领域的测试驱动开发(TDD)和验收测试驱动开发(ATDD)。这本书为Java开发者提供了一套完整的测试策略和实践方法,...

    tdd测试驱动在软件工程中的辩证思考-软件工程-工程.pdf

    * 2011 年,朱少民撰文《敏捷测试的思考和新发展》,提出 TDD 实践还存在较大困难,有比较多的争议,TDD 模式进一步向 ATDD、BDD 等模式适应性转型,并提出测试开发模式应向本源回归,不拘泥于某种单一模式,应该...

    .NET的测试工具和框架列表:。.NET的自动测试(TDDBDDATDDSBE)工具和框架列表

    NET的自动测试(TDD / BDD / ATDD / SBE)工具和框架列表这是与测试的方法和类型有关的.NET自动化测试框架的列表: 测试驱动开发(TDD) 行为驱动开发(BDD) 范例说明(SBE) 验收测试驱动开发(ATDD) 基于属性的...

    Jbehave学习[整理].pdf

    Jbehave是一个基于行为驱动开发(BDD)的框架,它是测试驱动开发(TDD)和验收测试驱动开发(ATDD)的一种演进,旨在使软件开发过程更加易理解和实践,无论新手还是专家都能轻松上手。BDD的核心是将焦点从被测试对象...

    测试驱动的产品开发与设计.pptx

    7. **BDD**:行为驱动开发(BDD)是TDD的一种扩展,更注重业务行为的描述。 8. **ATDD**:验收测试驱动开发,确保需求的正确实现。 **Challenge of TDD** 1. **是否所有代码都需要TDD**:不是所有代码都适合或需要...

    2009年下半年软件设计师考试真题及参考答案

    * 软件测试技术:TDD、BDD、ATDD等 例如,第11题的答案是B,考察了软件测试方法的知识点,即白盒测试的应用场景。 四、项目管理 项目管理是软件开发的重要组成部分,涉及到项目计划、项目执行、项目监控等多个...

    轻松搞定Scrum

    TDD(测试驱动开发-单元测试)和ATDD(验收测试驱动开发-BDD)是开发过程中的重要实践,它们鼓励开发者先编写测试,再编写能够通过这些测试的代码,有助于提高代码质量和可维护性。DevOps(持续集成、持续交付)是...

    Role_of_Testing_in_Agile_Projects

    此外,敏捷项目中的测试还涉及到验收测试驱动开发(ATDD)和行为驱动开发(BDD)。ATDD强调与业务人员密切合作,确保开发出的软件满足他们的需求。BDD则进一步强调以用户的行为和期望为出发点来定义和设计测试,促进...

    DevOps-Books:“ DevOps帮助我们进行了非常频繁的发布,从而使我们可以更快地进入市场。我们现在能够进行日常产品发布,而不是6个月的发布,并且可以在几个小时内向我们的客户发布修复程序。 ” ―哈梅什·乔拉(Hamesh Chawla)

    ATDD BDD 首席财务官 CI 光盘 DDD 聚丙烯 预算局 站起来 TDD 工具 编译器 调试器 探查器 GUI设计师 造型 集成开发环境 构建自动化 发布自动化 基础架构即代码 测验 知识标准和机构 巴勃 CMMI IEEE标准 ISO ...

    Cucumber-rust:Rust的Cucumber测试框架。 完全本机,没有外部测试运行程序或依赖项

    Cucumber-rust是一个针对Rust编程语言的Cucumber测试框架,它专为行为驱动开发(BDD)设计,同时也适用于测试驱动开发(TDD)和验收测试驱动开发(ATDD)。Cucumber-rust的独特之处在于它完全原生,不依赖任何外部...

    究竟什么是敏捷测试

    时至今日,还讨论这样一个老话题,是否感觉老调重弹?...在2011年,我自己也写了一篇文章《敏捷测试的思考和新发展》,刊登在《程序员》杂志上,谈到“在BDD、ATDD和TDD最根本的、共同的思想基础上,构成一个全新

    (完整word)软件测试题目-附答案.doc

    * Acceptance Test-Driven Development (ATDD) 七、软件测试的标准和规范 软件测试的标准和规范包括: * ISO/IEC 9126 * IEEE 829 * ISTQB 本资源摘要信息的相关知识点主要涉及到软件测试的定义、类型、方法、...

    软件测试面试集锦

    例如,了解TDD(测试驱动开发)、BDD(行为驱动开发)以及ATDD(接受测试驱动开发)的区别,还有敏捷测试的原则和实践。 除了上述内容,面试者还需要具备良好的沟通技巧,因为测试人员经常需要与开发团队、项目经理...

Global site tag (gtag.js) - Google Analytics