第014页_1788968516450.txt

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。
下载此文件