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

    你可能感兴趣的文章
    Objective-C——判断对象等同性
    查看>>
    objective-c中的内存管理
    查看>>
    Objective-C之成魔之路【7-类、对象和方法】
    查看>>
    Objective-C享元模式(Flyweight)
    查看>>
    Objective-C以递归的方式实现二叉搜索树算法(附完整源码)
    查看>>
    Objective-C内存管理教程和原理剖析(三)
    查看>>
    Objective-C实现 Greedy Best First Search最佳优先搜索算法(附完整源码)
    查看>>
    Objective-C实现 jugglerSequence杂耍者序列算法 (附完整源码)
    查看>>
    Objective-C实现 lattice path格子路径算法(附完整源码)
    查看>>
    Objective-C实现1000 位斐波那契数算法(附完整源码)
    查看>>
    Objective-C实现2 个数字之间的算术几何平均值算法(附完整源码)
    查看>>
    Objective-C实现2d 表面渲染 3d 点算法(附完整源码)
    查看>>
    Objective-C实现2D变换算法(附完整源码)
    查看>>
    Objective-C实现3n+1猜想(附完整源码)
    查看>>
    Objective-C实现3n+1猜想(附完整源码)
    查看>>
    Objective-C实现9x9乘法表算法(附完整源码)
    查看>>
    Objective-C实现9×9二维数组数独算法(附完整源码)
    查看>>
    Objective-C实现A*(A-Star)算法(附完整源码)
    查看>>
    Objective-C实现A-Star算法(附完整源码)
    查看>>
    Objective-C实现abbreviation缩写算法(附完整源码)
    查看>>