原文:http://www.infoq.com/cn/news/2009/11/uncle-bob-tdd-applicability
TDD取代架构了吗?
你不能通过TDD 得到一个完整的架构。 TDD 可以告诉你某些架构决定,但是你无法在没有架构设计的情况下启动项目。因此某些预先的架构是必要的。其中最重要的一点是决定哪些架构元素可以延迟哪些不能。
TDD能够替代设计吗?
不,你仍然需要所有的设计技能。你仍然需要了解设计原则和设计模式。你应该了解UML 。并且,你应该创建软件设计的轻量级模型。
事实上,TDD 也是 一门设计技术,但不是孤独的设计技术。所有的老设计规则和技能仍然适用。TDD 能够影响和增强它们。
TDD是否应该应用于每一行代码?
有些代码时不适合TDD 的。比如, GUI 等。当然,不仅仅是 GUI ,它只是一个例子,核心是摆弄( fiddling )的想法:
1、 你必须把代码摆弄到位。
2、 你必须摆弄某些方面以满足客户需求。
3、 如果存在一些不确定新,必须通过快速的周期(高度的迭代)来解决。
则几种情况下,是不适合仅TDD 开发的。简单的所,就是如果开发的是针对用户定制性很高的产品(或软件模块),或者产品时一个尝试性产品,需要在尝试的迭代中解决问题,这种情况下不适合使用测试驱动开发。
测试驱动开发可以提高每行代码和每个决定被测试的几率。
高度自动化的测试覆盖会提升你的速度。原因在于:
第一, 你不用在调试上花费太多的时间。
第二, 不会在无意中破坏代码。
第三, 测试用例在某些程度上,反映了系统的功能。
第四, 减少后期的维护成本。