测试驱动开发 (TDD) 是一种软件开发方法,其中软件测试在其相应功能之前编写。
开发人员为确保通过每次测试而编写足量代码,然后在开展新测试和发布新功能之前对测试与代码进行优化。
本质上,测试驱动开发迫使开发人员放慢速度,在更短的反馈周期内验证和改进其代码。虽然上述操作并非强制要求,但 DevOps 团队鼓励初学者和资深专家在各种编程语言中采用 TDD。例如,Java、Python 等语言,以及应用程序编程接口 (API) 和程序应用。
这种风格的编程加强了编码、测试(以自动化单元级测试的形式)和代码设计之间的关系。虽然测试驱动开发可能会增加前期开发时间,但事实证明,其可以改善代码的功能和灵活性,并节省总体时间。
通过立即识别和处理任何错误,使用 TDD 的开发人员可以防止小问题演变成更大的问题。测试驱动开发迫使开发人员在开发过程中验证和改进他们的代码,从而简化最终的质量检查和更正。
替代测试框架包括在编写所有自动测试之前编写生产代码,或者在编写生产代码之前编写整个测试套件。这些方法虽然不一定无效,但已被证明会增加必要的调试时间,特别是对于更大、更复杂的项目。
虽然测试驱动开发通常用于创建新的生产代码,但它也经常用于改进使用旧技术或其他技术开发的旧版代码的调试过程。
测试驱动开发通过将测试置于开发阶段之前,颠覆了传统的开发流程。作为一项迭代方案,测试驱动开发通过推进可测试的工作流来优化代码质量和可读性,从而在单元级别生成高质量的代码。当开发人员实施单元测试时,他们会专注于一小部分逻辑,例如单一算法。编写专用代码以确保测试结果通过,不仅可以生成更清晰、更耐用的代码,而且还有助于改进文档质量。
测试驱动开发主要有两个层次。
对于验收 TDD(又称“行为驱动型开发 (BDD)”),程序员会编写单个验收测试,然后编写相应的新代码以通过测试。验收测试有时也称为客户测试或客户验收测试。
它们通常可理解为产品利益相关者规定的、实现最低功能要求所需的测试用例。ATDD 致力于确定详细的可执行要求。可以利用各种测试工具执行验收测试,例如 Fitnesse 或 RSpec。
开发人员 TDD 有时简称为 TDD,它要求编码人员编写单个测试,来评估他们自己的 ATDD 测试解决方案。开发人员 TDD 使用测试自动化工具,例如 JUnit 或 VBUnit。
在实施测试驱动开发战略时,编码人员首先会编写测试来检查软件的各个元素或功能,然后编写相应代码以通过独立测试。完成后,他们会再次测试软件,如果测试通过,则会优化代码(该过程称为“重构”)以精简至仅包含必要元素。然后,开发人员对后续的每个软件功能重复这一过程。
测试驱动开发过程分为五个独立的步骤:
简而言之,测试驱动的开发过程遵循一个可重复的循环,称为红绿重构循环。该循环的步骤如下:
虽然测试驱动开发的具体起源尚不清楚,但先编写测试,然后编写生产代码的概念直到 20 世纪 90 年代中期才成为一种普遍的做法。在此之前,测试框架将开发人员与测试其自己的代码库分开。然而,随着软件工程的发展,DevOps 开发运维团队需要更快、更灵活的方法来满足利益相关者的需求,尤其是在处理快速变化的利益相关者需求时。
测试驱动开发是从各种新型测试框架中发展而来并与其一同演化的,同时也作为模块化组件被应用到各种其他框架中。最值得注意的是,TDD 包含在极限编程 (XP) 的概念中;XP 是一种敏捷软件开发框架,旨在提高软件质量和开发人员的生活质量。
软件工程师 Kent Beck 是敏捷社区的重要人物,也是“极限编程”的创造造者,他被誉为“重新发现”了测试驱动开发。用 Beck 自己的话说:
“对 TDD 的最初描述出现在一本关于编程的早期书籍中。它说你拿出输入磁带,手动键入你需要的输出磁带,然后编程直到实际输出磁带与预期输出相匹配。在 Smalltalk 中编写第一个 xUnit 框架之后,我记起了读过这篇文章并进行了试用。这对我来说就是 TDD 的起源。当向年长的程序员描述 TDD 时,我经常听到这样的话:‘当然。要不还能怎么编程?’因此,我把自己的作用称为‘重新发现‘了 TDD”。
测试驱动开发演变过程中的重要时间点包括:
作为“极限编程”的一个组成部分,测试驱动开发不仅有利于创建更好的代码,也有利于程序员的技能发展。TDD 可以让编码人员更好地洞察他们的项目并帮助推动程序设计。通过在实现每个功能之前集中测试用例,开发人员必须直观地了解客户或用户将如何使用该功能。这种方法将产品界面置于实施之前,并帮助开发人员创建更多以用户为中心的应用程序。
测试驱动开发的一些额外优点包括:
尽管使用测试驱动开发 (TDD) 有许多宝贵的优点,但它并非没有挑战。但这些挑战的严重程度可能取决于项目,或者通过各种其他技术来缓解。TDD 的一些缺点包括:
利用面向智能资产管理和供应链的 AI 解决方案,构建更具弹性的业务。
借助 IBM 利用丰富的数据和强大的 AI 技术来集成优化流程,从而实现业务运营转型。
IBM Cloud Pak for Business Automation 是一套模块化的集成软件组件,用于运营管理和实现自动化。