16 软件测试方法和技术(第4版) 行成功,说明新添加的功能通过了单元测试,可以进人下一个环节。 TDD,程序员就有信心进行设计或代码的快速重构,有利于快速选代和持续交付。 所示。 验收指标 定义 单元 验证 验收 测试 测试 提出澄清 UTDD 满足 代码 ATDD 用户 业务层 需求 图1-9ATDD和UTDD之间的关系 (1)ATDD发生在业务层次,在设计、写代码前就明确需求(如用户故事等)的验收标准。 (2)UTDD发生在代码层次,在编码之前写单元测试脚本,然后编写代码直到单元测试通 过,这里的UTDD相当于传统概念(如极限编程)的 TDD。 在过去的开发实践中,UTDD在备受推崇的同时,也受到了广泛且持久的争议。例如, DavidH.Hansson 是著名的 Web 开发框架Ruby On Rails 的开发者,他在 2014 年发表了一 篇文章TDDis dead.Longlive testing.(《TDD已“死”,测试“永生”》),对TDD提出了公开 的质疑和否定。David认为,TDD引导大家更重视单元测试,而单元测试为了能执行得足够 快,大量采用Mock技术隔离依赖对象,几千个测试脚本在几秒钟内就能跑完,但是根本验证 不到系统集成后真正的业务功能。因此,David认为不应该过分重视单元测试,而应该多做端 到端的系统测试。 这篇文章一出来就引发了广泛的讨论,赞成者认为说出了自己的心声,当然也趁机表达了 自己的意见。例如,工期紧、时间短,根本来不及写单元测试;TDD对开发人员的要求过高, 的测试等同于单元测试,而忽略了 TDD还包括ATDD。