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

    你可能感兴趣的文章
    Node实现小爬虫
    查看>>
    Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
    查看>>
    Node提示:npm does not support Node.js v12.16.3
    查看>>
    Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
    查看>>
    Node服务在断开SSH后停止运行解决方案(创建守护进程)
    查看>>
    node模块化
    查看>>
    node模块的本质
    查看>>
    node环境下使用import引入外部文件出错
    查看>>
    node环境:Error listen EADDRINUSE :::3000
    查看>>
    Node的Web应用框架Express的简介与搭建HelloWorld
    查看>>
    Node第一天
    查看>>
    node编译程序内存溢出
    查看>>
    Node读取并输出txt文件内容
    查看>>
    node防xss攻击插件
    查看>>
    noi 1996 登山
    查看>>
    noi 7827 质数的和与积
    查看>>
    NOI-1.3-11-计算浮点数相除的余数
    查看>>
    NOI2010 海拔(平面图最大流)
    查看>>
    NOIp2005 过河
    查看>>
    NOIP2011T1 数字反转
    查看>>