XP(Extreme Programming 极限编程),是一种灵活响应变化的IID开发方法,它主要通过4中基本方式来提升软件项目:沟通、简单、反馈和勇气。XP开发过程强调了沟通的重要性,提出测试是保证项目质量的唯一办法。开发人员快速的和客户交流,以便获取客户的最真实需求,开发人员彼此交流,使得设计的代码简洁和风格一致,各种测试方法的实行,可以尽早的将功能特性交付客户,并可按其建议修改。
同Scrum方法一样,XP也有自己独特的一些实践特性:
1、计划游戏 XP习惯把一次迭代发布的内容称之为“planning game”,在迭代之处确认阶段称为“Iteration Planning Game”迭代计划游戏,而确认可发布内容范围称为“Release Planning Game”发布计划游戏;
2、频繁的小规模发布软件 渐进的交付。
3、系统隐喻 为了便于设计沟通,XP开发设计人员和客户用约定的方式来描述特定的系统功能;
4、简单设计 也是设计模式中所提倡的一种方法之一,由于XP方法的特征,无法全面把握用户的最终需求,所以不对不存在的功能做猜测,在代码层面简洁、尽量的小粒度的类或方法;
5、测试 首先XP希望对于所开发的代码都要有单元测试、通过TDD方法,持续的集成和测试来保证代码的质量。XP的测试一般特别指功能上的自动测试,和客户的验收测试;
6、经常重构 由于有持续集成和测试作为保障,为了简化代码,XP希望能频繁的重构现有的系统,产生易懂、最小、简洁的代码;
7、结对编程 结对编程时XP方法的核心实践之一,开发两人可以互为观察员和开发者,这样写出的代码具有较少的缺陷,相互学习使得代码具有更好的可读性;
8、集体拥有代码 由于结对编程,使得代码风格相似,而且XP强调的是所有开发人员对于所有代码负有同样的权利和义务,所以,缺陷的发现者也应该成为缺陷的修复者,而功能稳定则是由持续集成和测试保障;
9、持续集成 单独服务器对所有代码进行不间断的功能构建,系统单元测试;
10、平稳的工作节奏 所有的预定工作都应在工作时间内完成,个人时间和工作时间应该有清晰的分界,不能相互影响,提倡“没有加班”;
11、团队协作 XP方法强调了客户的重要性,最终需求方应该和开发人员在同一个地方工作,以便能更直接、高效的沟通确认;
12、编码标准 结对编程、代码集体所有要求了所有开发人员应该遵循一致的规范。
在XP方法的描述中,用了大量的篇幅描述了其两个特点,一是客户沟通,二是故事卡。
很多的敏捷实践中都强调了客户的重要性,但是,我觉得,XP方法不仅仅是强调了客户沟通,更把任务特性和客户挂钩,可以说对客户是非常的依赖,也是能最深程度的了解到客户、更快的响应客户的变化。由于XP实践迭代周期很短,一般是1~3周为一个迭代周期,且XP同样认为,可交付的特性比面面俱到的文档更具有价值,因而,时刻保持与用户的沟通的重要性和紧迫程度自然就远远高于其他实践方法;
故事卡。在XP方法中对于迭代内容描述成相对独立和细小的卡片。“用最简单的方式记录需求”。故事卡的任务不是细化客户的需求,而是作为一个提纲,方便在开发时,与客户进行交流,以便使开发人员能够明了要求,从而开发。在一次迭代项目中的故事卡的集合,便组成了本次项目的任务列表,XP方法也鼓励任务认领和stand meeting,应为这样能有助于开发人员的责任感和高效的沟通、快速反馈。
现在在回过头来说说XP的4中基本方式,也就是XP所提倡的价值观:
● 沟通
XP通过结对编程、站立会议和计划游戏方式促进开发人员间的沟通,通过故事卡的实现过程,促进客户和开发人员的沟通;
● 简单
“只做最简单的可以运转的事情”。将迭代内容描述在故事卡片上,不对将来可能做得事做代码设计;
● 反馈
带来高质量和适应性。首先反应在TDD模式下的开发方式改变。对于持续集成和频繁重构所带来的改变,持乐观态度。客户对于提交的交付件与故事卡的描述的对比、客户测试结果,直接反应到开发人员手中,可以立即跟进;
● 勇气
快速开发、快速响应变化是通过XP的其他特性得以支持的。在持续集成、单元测试、自动测试的保障下,系统的快速、频繁的重构才能得以实现,才能得到更为简洁的代码,避免了在一般开发手段下对于重构所带来的系统稳定性的恐惧。
相关阅读: