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

    你可能感兴趣的文章
    PYTHON+Twisted+sqlanydb=ABORT()
    查看>>
    Python函数之返回值、作用域和局部变量
    查看>>
    Python+统计学 | 探索常用的数据分析统计分布
    查看>>
    python, selenium中用于切换帧的函数
    查看>>
    python函数
    查看>>
    python----线程、进程、协程的区别及多线程详解
    查看>>
    python---5
    查看>>
    python---使用celery分布式系统异步发送短信(云通讯)来验证登录
    查看>>
    python--003--百分号字符串拼接、format
    查看>>
    Python--10、线程
    查看>>
    Python--Redis实战:第四章:数据安全与性能保障:第4节:复制
    查看>>
    python--基本代码规范
    查看>>
    Python--抽象类接口类
    查看>>
    PYTHON--欧拉习题二
    查看>>
    python--高级应用总结
    查看>>
    python-520表白代码,我看谁说程序员不懂浪漫,送你几套表白代码,一步到位
    查看>>
    Python-Asyncio TypeError:无法在‘;等待‘;表达式中使用对象DICT
    查看>>
    Python-AttributeError:‘;dict&39;对象没有属性‘;序列‘;
    查看>>
    Python-ldap:是否可以在不显式写入密码的情况下进行绑定?
    查看>>
    python出现 unknown encoding: idna 的处理方法
    查看>>