博客
关于我
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/

    你可能感兴趣的文章
    PHP:第一章——PHP中的位运算
    查看>>
    phpcms
    查看>>
    phpcms 2008 product.php pagesize参数代码注射漏洞
    查看>>
    phpcms V9 自定义添加 全局变量{DIY_PATH}方法
    查看>>
    Redis五种核心数据结构的基本使用与应用场景
    查看>>
    Redis五种数据结构简介
    查看>>
    PHPCMS多文件上传和上传数量限制
    查看>>
    phpEnv的PHP集成环境
    查看>>
    PHPExcel一些基本设置总结
    查看>>
    phpexcel中文手册
    查看>>
    PHPExcel导入导出 若在thinkPHP3.2中使用(无论实例还是静态调用(如new classname或classname::function)都必须加反斜杠,因3.2就命名空间,如/c...
    查看>>
    phpize及其用法
    查看>>
    phpMailer发送邮件
    查看>>
    PHPMailer发送邮件
    查看>>
    phpmailer发送邮件,可以带附件
    查看>>
    phpmailer的用法
    查看>>
    phpMQTT
    查看>>
    phpmyadmin 安装
    查看>>
    phpmyadmin导出数据库出现Fatal error: Cannot 'break' 2 levels in D:\phpstudy\WWW\phpMyAdmin
    查看>>
    phpmyadmin数据库建表及插入
    查看>>