前言

现代软件由用户驱动,他们希望快速发布新功能且没有缺陷——这是一项极具挑战性的任务。独立开发者已经让位于开发团队共同协作开发单一软件产品。功能在短迭代周期内添加,然后频繁发布到生产环境——有时甚至是每天发布。

实现这一目标需要卓越的开发能力。我们必须确保我们的软件始终可以部署,并且在发布到生产环境时没有缺陷。它必须易于开发同事协作。代码必须易于任何人理解和修改。当团队进行这些更改时,我们必须有信心确保新功能正常工作,并且没有破坏任何现有功能。

本书汇集了经过验证的技术,帮助实现这一目标。

测试驱动开发(TDD)SOLID 原则六边形架构 使开发者能够编写已知有效且易于使用的代码。开发专注于软件工程的基础。这些实践是代码库的技术基础,使代码易于且安全地更改,并始终可以部署。

本书将使您能够编写经过良好工程化和测试的代码。您将对自己的代码按预期工作充满信心。您将拥有一个不断增长的快速运行测试套件,在团队进行更改时密切关注整个代码库。您将学习如何组织代码,以避免由外部系统(如支付服务或数据库引擎)引起的困难。您将减少对较慢测试形式的依赖。

您将编写更高质量的代码,适合持续交付方法。

现代软件需要现代开发方法。在本书结束时,您将掌握应用这些技术的技巧。

本书适合谁

本书主要面向熟悉 Java 语言基础并希望在高性能敏捷开发团队中高效工作的开发者。本书描述的技术使您的代码能够以极少缺陷交付到生产环境,并具有易于且安全更改的结构。这是敏捷性的技术基础。

本书的前几章也对希望了解这些方法的成本和收益的业务领导者有用。

本书涵盖内容

  • 第 1 章,为 TDD 建立理由,介绍了 TDD 带来的好处以及我们如何走到今天。

  • 第 2 章,使用 TDD 创建优质代码,涵盖了一些通用的良好实践,帮助我们在应用 TDD 时创建经过良好工程化的代码。

  • 第 3 章,消除关于 TDD 的常见误解,回顾了我们在使用 TDD 时可能遇到的常见反对意见,并提供了克服这些意见的建议。本章适合对在开发过程中引入新技术持保留意见的业务领导者。

  • 第 4 章,使用 TDD 构建应用程序,涉及设置我们的开发环境以使用 TDD 构建 Wordz 应用程序。它回顾了如何使用用户故事进行短迭代工作。

  • 第 5 章,编写我们的第一个测试,介绍了 TDD 的基础知识,使用 ArrangeActAssert 模板。编写 Wordz 的第一个测试和生产代码时,我们将详细探讨 TDD 如何在我们编写代码之前促进设计步骤。我们将考虑各种选项和权衡,然后将这些决策捕获到测试中。

  • 第 6 章,遵循 TDD 的节奏,展示了 红、绿、重构 循环作为开发的节奏。我们决定编写下一个测试,观察它失败,使其通过,然后优化我们的代码,使其在未来对团队来说是安全和简单的。

  • 第 7 章,驱动设计——TDD 与 SOLID,基于前几章展示了 TDD 如何通过引入 SOLID 原则为我们的设计决策提供快速反馈。SOLID 原则是一组有用的指南,帮助设计面向对象的代码。本章回顾了这些原则,以便我们在本书的其余部分应用它们。

  • 第 8 章,测试替身——Stub 和 Mock,解释了两种关键技术,使我们能够将难以测试的内容替换为易于测试的内容。通过这样做,我们可以将更多代码纳入 TDD 单元测试,减少对较慢集成测试的需求。

  • 第 9 章,六边形架构——解耦外部系统,介绍了一种强大的设计技术,使我们能够完全将数据库和 Web 服务器等外部系统与核心逻辑解耦。我们将在这里引入端口和适配器的概念。这简化了 TDD 的使用,并带来了对外部因素强加的变更的弹性。

  • 第 10 章,FIRST 测试与测试金字塔,概述了测试金字塔作为一种思考全面测试软件系统所需的不同类型测试的方法。我们讨论了单元测试、集成测试和端到端测试以及每种类型之间的权衡。

  • 第 11 章,TDD 如何融入质量保证,探讨了当使用本书中描述的高级测试自动化时,我们的 QA 工程师可以从一些原本可能必须做的繁琐详细测试中解放出来。本章探讨了测试如何成为整个开发过程中的团队努力,以及我们如何最好地结合我们的技能。

  • 第 12 章,测试优先、测试后、永不测试,回顾了一些基于我们何时编写测试以及我们具体测试内容的不同测试方法。这将帮助我们在应用 TDD 时提高测试的质量。

  • 第 13 章,驱动领域层,逐步应用 TDDSOLID测试金字塔六边形架构Wordz 的领域层代码。结合这些技术,我们能够将大部分游戏逻辑纳入快速单元测试。

  • 第 14 章,驱动数据库层,提供了编写连接 SQL 数据库 Postgres 的适配器代码的指导,现在我们已经将数据库代码与领域层解耦。我们以测试优先的方式完成此操作,使用 Database Rider 测试框架编写集成测试。数据访问代码使用 JDBI 库实现。

  • 第 15 章,驱动 Web 层,作为本书的最后一章,解释了如何编写 HTTP REST API,使我们的 Wordz 游戏可以作为 Web 服务访问。这是以测试优先的方式完成的,使用 Molecule HTTP 服务器库内置的工具编写集成测试。完成此步骤后,我们最终将整个微服务连接起来,准备作为一个整体运行。