博客
关于我
TDD--01--ATDD、UTDD
阅读量:297 次
发布时间:2019-03-01

本文共 1320 字,大约阅读时间需要 4 分钟。

TDD 与 UTDD 概念及实施

测试驱动开发(TDD)是敏捷开发中的核心实践之一,其核心思想是通过测试推进开发工作,表现为“测试代码优先于业务代码”。与传统的“先编码、后测试”模式不同,TDD强调在编程之前先编写测试脚本或设计测试用例,被称为“测试优先的编程”(Test-First Programming)。

TDD 的具体实施过程可以看作两个层次:

  • 单元测试驱动开发(UTDD)

    在代码层次上,UTDD要求在编码之前写测试脚本。这种方法可以称为“测试优先的编码”,其核心流程是:

    • RED -> GREEN -> REFACTOR:即运行一个失败的测试 -> 让测试通过 -> 及时重构代码。
  • 验收测试驱动开发(ATDD)

    在业务层次上,ATDD要求在需求分析时就确定需求(如用户故事)的验收标准,即“验收测试驱动开发”。这种方法强调通过测试确保需求的实现。

  • 为什么要 UTDD?

    传统编码方式存在以下问题:

    • 需求分析不够细致,导致多次确认和调整。
    • 代码质量差,调试和修复成本高昂。
    • 代码臭名不除,维护困难。

    UTDD 的优势包括:

    • 自解性:测试代码即文档,便于新接触代码的开发人员理解业务逻辑。
    • 健壮性:业务逻辑建立在单元测试的保护之下,减少大批量的错误。
    • 正确性:测试带来的正确性保护,使得代码重构和维护更加安全。
    • 改进API:从客户端角度编写可测试的OO代码,推动API设计优化。

    不过,UTDD 也存在一些挑战:

    • 开发成本增加,需要编写和维护测试代码。
    • 维护成本上升,测试环境的建立也需要投入。

    UTDD 实施步骤

  • 先写测试代码,并执行,得到失败结果

    例如,编写一个测试用例,验证某个功能的输入输出。

  • 写实现代码让测试通过

    仅关注需求的输入输出,编写最简单满足需求的代码。

  • 重构代码,并保证测试通过

    在测试通过的基础上,优化代码结构,消除代码中的坏味道。

  • 反复实行上述步骤,确保每次开发都伴随测试,从失败到成功再到优化。

  • 案例:实现一个功能

    需求: 当输入值大于等于0时返回true,当输入值小于0时返回false。

  • 先写测试代码

    编写一个单元测试,用1作为输入,验证返回值是否为true。

  • 写实现代码

    编写一个方法,直接返回输入大于等于0的结果。

  • 优化代码

    通过条件判断优化代码,确保逻辑简洁。

  • 测试与优化

    不断测试和优化,确保代码质量和可维护性。

  • UTDD 规则

  • 除非为了使一个失败的 unit test 通过,否则不允许编写任何产品代码

    测试是首要任务,任何编码都不能影响测试结果。

  • 在一个单元测试中,只允许编写刚好能够导致失败的内容

    包括编译错误等。

  • 只在测试全部通过的前提下重构或开始新的功能

    保证开发的稳定性和质量。

  • ATDD 与 BDD

    • 验收测试驱动开发(ATDD)

      在需求分析时就确定需求的验收标准,通过测试确保需求实现。

    • 行为驱动开发(BDD)

      是ATDD的一种落地方式,通过具体的GWT格式(Given-When-Then)表达验收标准。

    • 需求实例化(RBE)

      基于BDD进一步明确需求,确保开发、测试和产品经理之间的统一理解。

    通过以上方法,开发、测试和产品团队可以高度协作,减少误解和偏差,提升项目质量。

    转载地址:http://wtmo.baihongyu.com/

    你可能感兴趣的文章
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 大数据ssh权限问题 hadoop起不来 hadoopssh错
    查看>>
    PermissionError:Python 中的 [Errno 13]
    查看>>
    PermissionError:[Errno 13] 权限被拒绝:‘/manage.py‘
    查看>>
    Permutation
    查看>>
    perspective意思_2020年12月英语四级词汇讲解丨考点归纳:perspective
    查看>>
    PE启动盘和U启动盘(第三十六课)
    查看>>
    PE文件,节头有感IMAGE_SECTION_HEADER
    查看>>
    PE查找文件偏移地址
    查看>>
    PE知识复习之PE的导入表
    查看>>
    pfsense关闭nat
    查看>>
    PFX(Parallel Framework) and Traditional Multithreading
    查看>>
    PGOS:今天动手给电脑装青苹果Win7 X64位系统
    查看>>
    pgpool-II3.1 的内存泄漏(一)
    查看>>
    PgSQL · 特性分析 · PG主备流复制机制
    查看>>
    PGSQL主键序列
    查看>>
    PGSQL安装PostGIS扩展模块
    查看>>
    pg数据库中两个字段相除
    查看>>
    PhalApi:[1.23] 请求和响应:GET和POST两者皆可得及超越JSON格式返回
    查看>>
    Phalcon环境搭建与项目开发
    查看>>
    Phantom.js维护者退出,项目的未来成疑
    查看>>