极限编程,通常称为XP,是一种针对业务和软件开发的规则,其作用在于将两者的力量集中在共同的、可以达到的目标上,使XP团队以可持续的步调生产优质的软件。本书是在《解析极限编程》第一版面世的5年之后,作者重新考虑,整理和重构XP的基础上写成的,也是作者不断参与软件开发项目的心路历程和对XP的许多新的深刻理解。
本书共分两部分。第1部分包括第1章至第16章,阐述了实现XP过程的方方面面;第2部分包括第17章至25章,内容着重于对XP的理解上升到哲学的高度来看待XP的生命力。
本书配有中英文对照,语言通畅、富有实用性和可读性,适合于软件开发人员、软件项目管理人员、软件工程研究人员,以及广大电脑爱好者阅读并领略英文原文的风采。
第1章 XP是什么? 1
第1部分 探索XP
第2章 学习开车 17
第3章 价值、原则和实践 21
第4章 价值 29
沟通 31
简单 31
反馈 33
勇气 35
尊重 37
其他 37
第5章 原则 41
人性化 43
经济学 45
互惠互利 47
自相似性 49
改进 51
多样性 53
反省 53
流 55
机遇 55
冗余 57
失败 59
质量 59
婴儿步 61
接受责任 63
小结 63
第6章 实践 65
第7章 基本实践 69
坐到一起 69
完整团队 71
富含信息的工作空间 73
充满活力的工作 77
结对编程 79
故事 83
周循环 87
季度循环 89
松弛 91
10分钟构建 93
持续集成 93
测试先行编程 95
增量设计 97
那么现在…… 101
第8章 启程 103
为实践绘图 109
小结 111
第9章 扩展实践 113
真实客户参与 113
增量部署 115
团队连续性 117
缩减团队 119
根源分析 119
共享代码 123
代码和测试 123
单一代码库 125
每日部署 127
范围可协商的合同 129
依用付费 129
小结 133
第10章 完整XP团队 135
测试人员 137
交互设计师 139
架构师 139
项目经理 141
产品经理 143
主管人员 145
技术文档书写员 149
用户 151
程序员 151
人力资源 151
角色 153
第11章 约束理论 157
第12章 计划:管理范围 169
第13章 尽早测试、经常测试、自动测试 179
第14章 设计:时间的价值 191
简单 203
第15章 扩大XP规模 207
人数 207
投资 211
组织的大小 211
时间 213
问题复杂性 215
解决方案复杂性 215
故障的后果 217
小结 219
第16章 访谈 221
第2部分 XP哲学
第17章 XP诞生的故事 229
第18章 泰勒主义和软件 239
第19章 丰田生产制度 245
第20章 应用XP 251
选择一个教练 259
什么时候你不应该使用XP 261
第21章 纯度 263
认证和鉴定 265
第22章 离岸开发 269
第23章 编程的永恒之道 275
第24章 XP和社区 281
第25章 结语 285
参考书目 288
第一版序
极限编程(Extreme Programming, XP)的目标是杰出的软件开发——更低的成本、更少的缺陷、更高的生产率、更高的投资回报。现正在艰苦奋斗的团队,通过小心注意并精化他们工作的方式,通过把日常开发实践极限化,可以达到这个结果。
开发软件有好的方式和坏的方式。优秀的团队都是相似的。不管你的团队好还是差,你始终可以改进。我希望本书成为你试图改进时的资源。
本书是我个人理解的优秀软件开发团队的共同之处。我把我自己做过的和我看到的凑效的事情提取成我所认为的纯粹的最“极限”的形式。这个过程中我最受打击的是我这方面想像力的局限。5年前本书第一版出版时看起来不可能极限化的实践,现在已经很平常了。5年后本书的实践可能会显得保守了。
如果我只讲优秀团队做什么,不会切中要点。杰出团队的行为根据他们工作环境的不同应该有所不同。透过表面看实质,他们的活动就像河面的涟漪暗示着下面的形态,优秀软件开发背后的智慧和直觉知识,是我试图提取和阐述的。
评论家抱怨第一版强迫他们用某种方式编程。除了我能控制别人行为的谬论之外,我很尴尬那就是我的目的。放弃控制别人行为的幻想,承认每人对自己选择的责任,这一版我试图用正面和全面的方式改叙我的信息。我介绍经证实的实践,你可以加入自己的锦囊。
• 无论环境如何,你始终可以改进
• 你总是可以自己开始改进
• 你可以今天开始改进
第二版 中文版前言
很高兴中国的程序员可以用母语读到XP的最新版本。
所有书都反映了作者本人的文化视角,本书也不例外。但是,在逐渐精炼XP思想的过程中,我发现自己想得越来越接近一些通用主题:责任,职责,人际关系,还有快乐。
应用XP必须改变信仰和行为方式,并维持这些改变。找到一个团体,他们支持你做出改变,并坚持这些改变——即使这会很困难。这一重要性我怎么强调都不过分。不论这个团体是你的团队,还是在线社区,抑或你的老板、你的客户、或者一个朋友,他们知道你很快会坦率地、公正地、不推诿地汇报自己的活动,都能帮你自始至终竭尽全力。
我希望你能从本书中学到对工作和团队成功有帮助的经验教训——其他的就不用管了。我越来越清楚地意识到,极限编程不仅仅是写程序的方式,而且是一种生存方式,这种方式将得到具有诸如可靠性、灵活性、可响应性等明显品质的程序。程序员做出承诺并兑现,与非程序员之间会建立更好的关系,这将开启软件开发中新的价值来源。
Kend Beck
2005年10月
第一版前言
极限编程(Extreme Programming, XP)把编码工作作为贯穿软件项目的关键活动。这不可能行得通!
该回想我自己的开发工作了。我工作在一个“及时(just-in-time)”的软件文化中:紧凑的发布周期,高技术风险。一定要令朋友改变是一种生存技能。通过代码在地理上通常是隔离的团队中或之间进行沟通。通过阅读代码理解新的或演化的子系统的API。复杂对象的行为和生命周期定义在测试用例中——又是用代码。问题报告用测试用例示范问题——再一次使用代码。最后,我们通过重构持续改进既有代码。显然我们的开发是以代码为中心的,但我们成功的及时交付软件,所以这总算行得通。
由此断定,交付软件所需要的只是蛮勇编程是错误的。交付软件很难,及时交付高质量软件更难。要让这些运行通过需要遵守其他一些最佳实践。这就是Kent开始他发人深省的XP书的特色。
Tektronix 的领导者们认识到用Smalltalk结对编写复杂工程应用时人的潜能,Kent是其中之一。他还跟Ward Cunningham一起推进影响我职业生涯至深的模式运动。XP描述了一种开发方法,它结合了许多成功开发者的实践,这些曾埋没于软件方法和过程的大量文献中。就像模式,XP构建在诸如单元
测试、结对编程和重构等最佳实践的基础上。XP中这些实践结合在一起,互为补充,常常互相调节。本书关注不同实践的互相影响,——这是本书的重要贡献。惟一的目标是在正确的日期交付功能正确的软件。虽然OTI成功的及时(Just In Time)软件过程不是纯粹XP,但它们有很多共同之处。
我曾经享受过跟Kent交互实践一段XP的乐趣,编一个叫JUnit的小东西。他的观点和方法总是挑战我处理软件开发的方式。XP无疑挑战了一些传统的“超级”方法论,本书帮你决定你是否接受XP。
Erich Gamma
1999年8月
第二版 中文版前言
很高兴中国的程序员可以用母语读到XP的最新版本。
所有书都反映了作者本人的文化视角,本书也不例外。但是,在逐渐精炼XP思想的过程中,我发现自己想得越来越接近一些通用主题:责任,职责,人际关系,还有快乐。
应用XP必须改变信仰和行为方式,并维持这些改变。找到一个团体,他们支持你做出改变,并坚持这些改变——即使这会很困难。这一重要性我怎么强调都不过分。不论这个团体是你的团队,还是在线社区,抑或你的老板、你的客户、或者一个朋友,他们知道你很快会坦率地、公正地、不推诿地汇报自己的活动,都能帮你自始至终竭尽全力。
我希望你能从本书中学到对工作和团队成功有帮助的经验教训——其他的就不用管了。我越来越清楚地意识到,极限编程不仅仅是写程序的方式,而且是一种生存方式,这种方式将得到具有诸如可靠性、灵活性、可响应性等明显品质的程序。程序员做出承诺并兑现,与非程序员之间会建立更好的关系,这将开启软件开发中新的价值来源。
Kend Beck
2005年10月
无封面