极限编程中提出的设计思想与传统软件工程的大相径庭,它摒弃了传统方法中对设计近乎苛求的原则,弱化了全面细致的设计。在极限编程中,不要求对需求做出非常详细的设计,而是遵循简单的原则,对现有的需求做出简单的设计。不需要为以后考虑,因为你永远不知道将来会增加哪些需求。Martin Fowler提出所谓的设计是要能够让你可以长期很简单地修改软件。
极限编程看似对设计的简化,削弱了开发的依据。但其实它的思想却是进一步明确了软件开发的时候应该更注重眼前的问题,全力去考虑当前的需求,满足客户当前的需要,而不要为以后的需要费时费力,只有这样,才能使做出的软件符合客户的需求。测试驱动开发在实现设计方面有着很大的优势。测试驱动开发的特点之一就是先写测试再写代码。而此时,测试用例编写的意义就非同一般了。一方面,测试用例有着测试代码的通用作用,开发人员在代码编写完成后对其正确性进行判断。另一方面,在极限编程中,设计是一个持续的过程, 测试用例在一定程度是也是需求文档的一种体现。对测试用例的编写其实也就是一个对需求进行分析设计的过程。这一点是极限编程和测试驱动开发独特的一点。测试用例的编写其实就是针对单元的输入输出的判断,对输入输出的设计就是对系统需求分析的过程,不能简单的随便设计,而是最好利用真实的系统数据进行设定。测试用例的编写完成后,代码才开始编写,这里的一切目的只为通过测试,而意义却是为了百分之百地满足系统的需求。测试的编写不再是一件令开发人员痛苦的事情,而是一件为了解系统需求而进行的设计过程,这种转变可以说对软件开发有着极大的积极的影响,这也是测试驱动开发的精髓所在。
将设计融入开发,在开发中完善设计,两者相辅相成的关系在极限编程中体现的充分彻底。也就是这个原因,才使得测试驱动开发这一新思想迅速推广开来。