极限编程(XP)是在一种颇有争议的软件开发方法。其第一步是软件开发小组确定客户希望产品支持的各种特性。对于每个特性,开发小组向客户通报实现这个特性所需要的时间和花费。
客户使用成本-效益分析法选择每个后续的构件所包含的特性,根据开发小组提供的时间、成本估算和该特性给客户带来的潜在收益来进行选择。提议的构件分成更小的部分,称为任务。
一个程序员首先制定出任务的测试用例,采用TDD,然后两个程序员在一台计算机前工作(结对编程),实现任务,确保全部测试用例正确工作。两个程序员每15~20分钟交替操作键盘,不进行键盘操作的程序员仔细检查同伴的代码。完成以上操作后,将这个任务集成到产品的当前版本中。
理想情况下,实现和集成一个任务只需要几个小时。通常结对的程序员并行地实现任务,以便集成可以连续地进行。如果可能,每天更换小组成员的编码同伴。从其他组员处的学习会提高每人的技能水平。各任务所使用的的TDD测试用例保留下来并应用到所有进一步的集成测试中。
结对编程的特点:
- 要避免编写测试用例的程序员继续完成编码实现
- 当开发者离开一个项目,其积累的所有知识也离开了
- 经验不丰富的开发者可以从经验丰富的一方学习经验
- 强调无我小组
结对编程的弊端:
- 要求大块的不被打断的时间
- 不适用于害羞或专横的个人
- 不适用于两个没经验的程序员
XP的特性:
- XP小组的计算机设在一个大房间的中心,大房间中有许多彼此相连的小隔间
- 一个客户代表一直与XP小组一起工作
- 没有一个人能连续两周超时工作
- 没有规格说明,而是XP小组的所有成员一同完成规格说明、分析、设计、编码、测试
- 在建造出各构件前没有概要设计,建造产品的过程中设计在不断调整(refactoring)