保护代码免受未来缺陷的影响
随着我们通过先编写测试来扩展代码,我们总是可以在测试通过后简单地删除每个测试。我在教学生 TDD 时看到过一些学生这样做,因为我还没有解释我们不应该这样做。无论如何,一旦测试通过,我们不会删除它们。我们会保留所有测试。
测试会逐渐发展成大型回归测试套件,自动测试我们构建的代码的每个功能。通过频繁运行所有测试,我们对整个代码库获得了安全感和信心。
随着团队成员向代码库添加功能,保持所有测试通过表明没有人意外破坏了某些东西。在软件中,完全有可能在某个地方添加一个完全无害的更改,结果发现某些看似无关的东西现在停止工作了。这是因为我们之前没有理解这两部分之间的关系。
测试现在使我们更多地了解我们的系统和我们的假设。它们防止了缺陷被写入代码库。这些都是巨大的好处,但更大的图景是我们的团队有信心安全地进行更改,并知道他们有测试自动保护他们。
这是真正的敏捷性,即改变的自由。敏捷性从来不是关于 JIRA tickets 和冲刺。它始终是关于在需求不断变化的环境中快速、自信地前进的能力。拥有数万个快速运行的自动化测试可能是我们拥有的最大推动力。
测试赋予团队成员快速有效工作的能力是 TDD 的巨大好处。你可能听说过 “快速行动,打破常规” 这句话,这在 Facebook 早期非常有名。TDD 使我们能够快速行动而不打破东西。
正如我们所看到的,测试在提供设计和逻辑正确性的快速反馈方面非常出色,同时也为未来的错误提供了防御,但一个巨大的额外好处是测试为我们的代码提供了文档。