极限编程(XP)是一种经过实践考验的轻量级软件开发方法学,本书将首届极限编程和柔性过程的年度会议上33篇最富有深刻见解的论文分专题结集成册,提供了对XP编程理论高水平的考察,并且探讨了特定的方法论、过程、技术、工具以及案例研究。\r\n\r\n 本书共分七部分,第一部分探讨了XP和其他柔性方法论的实质。第二部分探讨了方法论和过程。第三部分对柔性方法论和UML进行了深入探讨。第四部分研究了三种关键XP实践的经验和考虑事项:结对编程、测试以及重构。第五部分回顾了着眼于重构提供结对编程支持的现有工具;特定于XP团队的支持以及测试。第六部分介绍了在XP上的实践经验。第七部分就如何解决XP某些棘手的方面介绍了若干闪光的思想。\r\n\r\n 本书汇集了XP理论家和实践家们的真知卓见,专题探讨的形式让读者可以轻而易举地研习和运用这些材料。本书适合于软件开发人员、软件项目管理人员、软件工程研究人员,以及所有想要深入了解XP的各界人士参考。\r\n
\r\n
第一部分 XP以及柔性技术的基础 1 \r\n\r\n 第 1 章 设计死亡了吗 \r\n\r\n -Martin Fowler 3 \r\n\r\n 第 2 章 极限编程之道 \r\n\r\n -Peter Merel 17 \r\n\r\n 第二部分 方法与过程 31 \r\n\r\n 第 3 章 自适应软件开发和极限编程的准则系统的比较: \r\n\r\n 方法论之间可以怎样相互学习 \r\n\r\n -Dirk Riehle 33 \r\n\r\n 第 4 章 让我们进行分层:一种在XP中用于重构的建议 \r\n\r\n 参考体系结构 \r\n\r\n -Mark Collins-Cope和Hubert Matthews 49 \r\n\r\n 第 5 章 极限架构:如何把应用瞄准演进的框架 \r\n\r\n -Stefan Roock 67 \r\n\r\n 第 6 章 层次结构的XP:类比重组过程为大型项目对 \r\n\r\n XP进行改进 \r\n\r\n -Carsten Jacobi和Bernhard Rumpe 79 \r\n\r\n 第 7 章 JWAM和XP:使用XP进行框架开发 \r\n\r\n -Martin Lippert, Stefan Roock, Henning Wolf \r\n\r\n 和Heinz Züllighoven 97 \r\n\r\n 第 8 章 XP和大型分布式软件项目 \r\n\r\n -Even-André Karlsson和Lars-G?ran Andersson 111 \r\n\r\n 第三部分 柔性技术和UML 125 \r\n\r\n 第 9 章 特洛伊木马中的XP:重构统一软件开发过程 \r\n\r\n -Jutta Eckstein和Rolf F. Katzenberger 127 \r\n\r\n 第 10 章 一种用于新兴机构的柔性软件开发过程 \r\n\r\n -Giuliano Armano和Michele Marchesi 145 \r\n\r\n 第 11章 极限建模 \r\n\r\n -Marko Boger, Toby Baier, Frank Wienberg \r\n\r\n 和Winfried Lamersdorf 163 \r\n\r\n 第 12 章 一种软件维护的随机模型及其与极限编程过 \r\n\r\n 程的关系 \r\n\r\n -Sergio Focardi, Michele Marchesi \r\n\r\n 和Giancarlo Succi 177 \r\n\r\n 第 13 章 模式和XP \r\n\r\n -Joshua Kerievsky 193 \r\n\r\n 第四部分 结对编程. 测试和重构 209 \r\n\r\n 第 14 章 结对编程的代价和收益 \r\n\r\n -Alistair Cockburn和Laurie Williams 211 \r\n\r\n 附录:“身边的行家”项目管理模式 231 \r\n\r\n 第 15 章 在一个Java项目中的单元测试 \r\n\r\n -Peter Gassmann 235 \r\n\r\n 样本代码 253 \r\n\r\n 第 16 章 使用JUnit翻新单元测试 \r\n\r\n -Kevin Rutherford 257 \r\n\r\n 第 17 章 内部测试:使用虚拟对象进行单元测试 \r\n\r\n -Tim Mackinnon, Steve Freeman和Philip Craig 273 \r\n\r\n 第 18 章 重构和重新推理 \r\n\r\n -Neelam Soundarajan 291 \r\n\r\n 第五部分 XP开发工具 307 \r\n\r\n 第 19 章 开发重构浏览器 \r\n\r\n -Ralph Johnson 309 \r\n\r\n 第 20 章 团队流:极限团队支持 \r\n\r\n -Jim des Rivières, Erich Gamma, Kai-Uwe M?tzel, \r\n\r\n Ivan Moore, André Weinand和John Wiegand 317 \r\n\r\n 第 21 章 在极限编程中支持分布式团队 \r\n\r\n -Till Schümmer, Jan Schümmer 337 \r\n\r\n 第 22章 一种基于CORBA的分布式系统的自动测试 \r\n\r\n -Renato Cerqueira和Roberto Ierusalimschy 357 \r\n\r\n 第六部分 实践经验 375 \r\n\r\n 第 23章 VCAPS项目:一个向XP过渡的例子 \r\n\r\n -Don Wells和Trish Buckley 377 \r\n\r\n 第 24 章 采用XP \r\n\r\n -Peter Sommerlad 397 \r\n\r\n 第 25 章 在一个研究和开发实验室引入极限编程 \r\n\r\n -Karl Boutin 407 \r\n\r\n 第 26 章 在事实背后:将XP引入一个现有的C++项目 \r\n\r\n -Manfred Lange 421 \r\n\r\n 第 27 章 TAO的XP:大型. 开发源代码框架的极限编程 \r\n\r\n -Michael Kircher和David L. Levine 435 \r\n\r\n 第七部分 XP及其之外 457 \r\n\r\n 第 28 章 学习XP:举办一个新兵训练营 \r\n\r\n -Christian Wega和Frank Gerhardt 459 \r\n\r\n 第 29 章 遗留到极限 \r\n\r\n -Arie van Deursen, Tobias Kuipers \r\n\r\n 和Leon Moonen 471 \r\n\r\n 第 30 章 设计就在代码之中:C++中的增强性重用技术 \r\n\r\n -Andrei Alexandrescu 485 \r\n\r\n 第 31 章 跟踪开发过程:一种变化性的观点 \r\n\r\n -Giancarlo Succi, Paolo Predonzani \r\n\r\n 和Tullio Vernazza 501 \r\n\r\n 第 32 章 软件智能体的柔性制造技术 \r\n\r\n -Luigi Benedicenti, Raman Paranjape \r\n\r\n 和Kevin Smith 407 \r\n\r\n 第 33 章 柔性过程怎样和软件产品线相关 \r\n\r\n -Jason Yip, Giancarlo Succi \r\n\r\n 和Eric Liu 507 \r\n
\r\n
只有天才才能让困难的事情变得简单, 而任何傻瓜都会让一项简单的任务变得困难!阿尔伯特·爱因斯坦也曾经说过类似的话, 我们认为这句话用在极限编程上相当贴切. 极限编程——也称为XP—(和其他柔性方法论)都是大规模简化软件系统开发过程的一种极端尝试, 它把注意力放在了提供价值的东西上面:对系统的需求以及实现系统的代码. 没有更多别的东西!
在进行极限编程的过程中, 一切都是从需求开始的, 而且采用了用户素材的形式. 客户提供用户素材并确定用户素材的优先级. 开发人员分析这样的素材并为它们编写测试……一切都归结到了代码上. 代码由结对的开发人员进行开发以提高质量. 对代码进行重构以促使其更加简单. 参照需求对代码不断进行测试……其间没有任何东西!
需求和代码两者都要受到仔细的审查:正如所说的那样, 代码只是准确地完成用户素材告诉它的任务, 它什么也不会多做, 并且始终保持为它最有可能的形式.
这本论文集包含了在极限编程和其他柔性方法论上的经验. 它讨论了什么是极限编程——需求加代码—以及我们如何能改进极限编程.
本书里的各个主题是按照自顶而下的顺序编排的. 我们从基础知识开始, 然后转向过程. 实践. 工具支持以及经验, 最后以研讨可能的新途径作为结束.
本书从讨论XP和其他柔性方法论的实质开始. Martin Fowler议论了设计的作用. Peter Merel综合介绍了XP的原则.
第2部分着眼于方法论和过程. 在Dirk Riehle对XP和其他方法论的准则系统进行的讨论之后, Lars-G?ran Andersson. Mark Collins-Cope. Carsten Jacobi. Even-André Karlsson. Martin Lipper. Hubert Matthews. Stefan Roock. Bernhard Rumpe. Henning Wolf和Heinz Züllighoven等人的贡献对框架和其他大型软件开发实践进行了一次全面的分析.
在第3部分, 几位作者试图将其他人认为不相容的东西结合起来:柔性方法论和UML. Jutta Eckstein和Rolf Katzenberger对统一软件开发过程(Unified Software Development Process, USDP)和XP进行了比较, Giuliano Armano和Michele Marchesi介绍了在新成立公司中的实地经验. Marko Boger. Toby Baier. Frank Wienberg和Winfried Lamersdorf详细说明了一种给软件系统快速建模的有意思的方法. Sergio Focardi和我们两个人阐述了为什么XP是一种使用形式化的随机图开发软件的不同方法. Joshua Kerievsky将设计模式与XP进行了调和.
第4部分包含三种关键XP实践的经验和考虑事项:结对编程(Alistair Cockburn和Laurie Williams). 测试(Philip Craig. Steve Freeman. Peter Gassmann. Tim Mackinnon和Kevin Rutherford), 以及重构(Neelam Soundarajan).
第5部分回顾了着眼于重构提供结对编程支持的现有工具(Ralph Johnson), 特定于XP团队的支持(Jim des Rivières. Erich Gamma. Ivan Moore. Kai-Uwe M?tzel. Jan Schümmer. Till Schümmer. André Weinand和John Wiegand), 以及测试(Renato Cerqueira和Roberto Ierusalimschy).
Karl Boutin. Michael Kircher. Manfred Lange. David Levid. Peter Sommerlad和Don Wells在第6部分介绍了他们在XP上的经验.
香槟酒留在了最后!本书的末尾就如何解决XP某些棘手的方面介绍了若干闪光的思想. Christian Wege和Frank Gerhardt概述了他们教授XP的方法. Arie van Deursen. Tobias Kuipers和Leon Moonen解决了遗留代码的问题. Andrei Alexandrescu阐述了如何用C++语言实现柔性方法论. Paolo Predonzani. Giancarlo Succi和Tullio Vernazza讨论了如何在一个极限编程的环境下处理好对变体的管理. Luigi Benedicenti. Raman Paranjape和Kevin Smith则讨论了软件智能体内在的极端灵活性. Jason Yip. Giancarlo Succi和Eric Liu阐述了几个使用XP开发的产品如何组织到一个生产线中, 但又不会变成重量级的方法.
关于作者
Michele Marchesi是意大利卡利亚里大学(Università di Cagliari)电气与电子工程系(Dipartimento di Ingegneria Elettrica e Elettronica)的一位教授. Giancarlo Succi是加拿大阿尔伯塔大学(University of Alberta)电气与计算机工程系(Development of Electrical and Computer Engineering)的一位教授.
——Michele Marchesi和Giancarlo Succi