XP即极限编程,是一种轻量(敏捷)、高效、低风险、柔性、可预测、科学而且充满乐趣的软件开发方式。
(1)计划游戏。计划游戏的主要思想就是先快速地制定一份概要的计划,然后,随着项目细节的不断清晰,再逐步完善这份计划。计划游戏产生的结果是一套用户故事及后续的一两次迭代的概要计划。
(2)小型发布。XP 方法秉承的是“持续集成、小步快走”的哲学思维,也就是说每一次发布的版本应该尽可能地小,当然前提条件是每个版本有足够的商业价值,值得发布。由于小型发布可以使得集成更频繁,客户获得的中间结果越频繁,反馈也就越频繁,客户就能够实时地了解项目的进展情况,从而提出更多的意见,以便在下一次迭代中计划进去,以实现更高的客户满意度。
(3)隐喻。相对而言,隐喻比较令人费解。根据词典中的解释是:“一种语言的表达手段,它用来暗示字面意义不相似的事物之间的相似之处”。隐喻常用于四个方面:寻求共识、发明共享语汇、创新的武器、描述架构。
(4)简单设计。强调简单的价值观,引出了简单性假设原则,落到实处就是“简单设计”实践。这个实践看上去似乎很容易理解,但却又经常被误解,许多批评者就指责 XP 忽略设计是不正确的。其实,XP 的简单设计实践并不是要忽略设计,而是认为设计不应该在编码之前一次性完成,因为那样只能建立在“情况不会发生变化”或者“我们可以预见所有的变化”之类的谎言的基础上。
(5)测试先行。对于有些团队而言,有时候程序员会以“开发工作太紧张”为理由,继而忽略测试工作。这样,就导致了一个恶性循环,越是没空编写测试程序,代码的效率与质量越差,花在找缺陷、解决缺陷的时间也越来越多,实际产能大大降低。由于产能降低,因此时间更紧张,压力就更大。
(6)重构。重构是一种对代码进行改进而不影响功能实现的技术,XP 需要开发人员在“闻到代码的坏味道”时,就有重构代码的勇气。重构的目的是降低变化引发的风险、使得代码优化更加容易。
(7)结对编程。从 20 世纪 60 年代开始,就有类似的实践在进行,长年以来的研究结果给出的结论是,结对编程的效率反而比单独编程更高。一开始虽然会牺牲一些速度,但慢慢地,开发速度会逐渐加快。究其原因,主要是结对编程大大降低了沟通的成本,提高了工作的质量。结对编程技术被誉于 XP 保证工作质量、强调人文主义的一个最典型的实践,应用得当还能够使开发团队协作更加顺畅、知识交流与共享更加频繁、团队稳定性也会更加牢固。
(8)集体代码所有制。由于 XP 方法鼓励团队进行结对编程,而且认为结对编程的组合应该动态地搭配,根据任务的不同、专业技能的不同进行最优组合。因此,每一个人都会遇到不同的代码,代码的所有制就不再适合于私有,因为那样会给修改工作带来巨大的不便。所谓集体代码所有制,就是团队中的每个成员都拥有对代码进行改进的权利,每个人都拥有全部代码,也都需要对全部代码负责。同时,XP 强调代码是谁破坏的(修改后出现问题),就应该由谁来修复。
(9)持续集成。在前面谈到小型发布、重构、结对编程、集体代码所有制等最佳实践的时候,多次提到“持续集成”,可以说持续集成是这些最佳实践的基本支撑条件。
(10)每周工作 40 小时。这是最让开发人员开心、管理者反对的一个最佳实践了,加班、再加班早已成为开发人员的家常便饭,也是管理者最常使用的一种策略。而 XP 方法认为,加班最终会扼杀团队的积极性,最终导致项目的失败,这也充分体现了 XP 方法关注人的因素比关注过程的因素更多一些。不过,有一点是需要解释的,“每周工作 40 小时”中的“40”不是一个绝对数,它所代表的意思是团队应该保证按照“正常的时间” 进行工作。
(11)现场客户。为了保证开发出来的结果与客户的预想接近,XP 方法认为最重要的是需要将客户请到开发现场。就像计划游戏中提到过的,在 XP 项目中,应该时刻保证客户负责业务决策,开发团队负责技术决策。因此,在项目中有客户在现场明确用户故事,并做出相应的业务决策,对于XP 项目而言有着十分重要的意义。
(12)编码标准。拥有编码标准可以避免团队在一些与开发进度无关的细枝末节问题上发生争论,而且会给重构、结对编程带来很大的麻烦。不过,XP 方法的编码标准的目的不是创建一个事无巨细的规则列表,而是要能够提供一个确保代码清晰,便于交流的指导方针。
有句经典名言“1+1>2”最适合表达 XP 的观点,Kent Beck 认为,XP 方法的最大价值在于,在项目中融会贯通地运用这 12 个最佳实践,而非单独使用。当然,可以使用其中的一些实践,但这并不意味着就应用了 XP 方法。XP 方法真正能够发挥其效能,就必须完整地运用 12 个实践。
评论