第一部分 XP基础 1
第1小时课程 初识XP 3
1.1 软件开发概述 3
1.1.1 软件工程的进展 5
1.1.2 个人计算机革命 6
1.1.3 有控制地快速地构建应用程序 6
1.1.4 Internet时代的软件开发 7
1.2 软件开发方法 7
1.2.1 编码-修复方法 7
1.2.2 瀑布式方法 8
1.2.3 进化式原型化方法 9
1.2.5 RUP方法 10
1.2.4 分步交付方法 10
1.2.6 MSF方法 11
1.3 使用敏捷方法解决软件开发悖论 12
1.4 XP如何交付高质量的软件 13
1.5 各种开发方法之比较 13
1.6 总结 14
1.7 问与答 14
1.8 作业 15
1.8.1 小测验 15
1.8.2 答案 15
1.8.3 练习 15
第2小时课程 XP概述 17
2.1 第一个XP项目 17
2.2.1 价值观 18
2.2 定义XP 18
2.2.3 行为 19
2.2.2 原则 19
2.2.4 实践 20
2.3 XP的关键特征 21
2.3.1 明确的反馈 21
2.3.2 逐步规划 21
2.3.3 时间安排灵活 22
2.3.4 自动化测试 22
2.3.5 口头交流 22
2.3.6 进化式设计 22
2.4 XP的极端方面 22
2.6 总结 23
2.5 XP与其他开发方法的不同之处 23
2.7 问与答 24
2.8 作业 25
2.8.1 小测验 25
2.8.2 答案 25
2.8.3 练习 25
第3小时课程 使用XP解决软件开发中的问题 27
3.1 揭示软件开发中的问题 27
3.1.1 软件开发危机 27
3.1.2 死亡之旅 28
3.1.3 项目中的4个控制变量 29
3.2.1 INCIS:一个关于软件灾难的案例研究 30
3.2 使用XP控制风险 30
3.2.2 使用XP避免灾难 31
3.3 使用XP提高质量 31
3.4 使用XP管理变化 33
3.5 总结 35
3.6 问与答 35
3.7 作业 36
3.7.1 小测验 36
3.7.2 答案 36
3.7.3 练习 36
第4小时课程 XP开发的生命周期 39
4.1 XP项目的生命周期概述 39
4.2.1 编写用户故事 41
4.2 调查用户需求 41
4.2.2 估算和发现 42
4.3 制定项目计划 43
4.4 将发布划分为迭代 44
4.4.1 迭代过程 44
4.4.2 度量生产量 45
4.4.3 开发和测试 45
4.5 将软件部署到生产环境中 45
4.6 发布后维护系统 46
4.7 总结 47
4.8 问与答 47
4.9.3 练习 48
4.9.2 答案 48
4.9 作业 48
4.9.1 小测验 48
第二部分 XP的工作原理 49
第5小时课程 XP小组中的角色 49
5.1 XP角色如何协同工作 49
5.1.1 协作的重要性 49
5.1.2 作为一个团队来解决问题 50
5.1.3 权利和职责 51
5.2 客户 52
5.3 指导XP小组 53
5.4 开发人员 54
5.4.1 日常工作 54
5.4.2 将XP实践同开发人员的工作对应起来 55
5.5 测试人员 56
5.6 跟踪人员 56
5.7 经理 57
5.8 其他XP角色 57
5.9 总结 58
5.10 问与答 58
5.11 作业 58
5.11.1 小测验 59
5.11.2 答案 59
5.11.3 练习 59
第6小时课程 XP实践 61
6.1 XP实践如何协同工作 61
6.2 计划游戏 62
6.4 隐喻 63
6.3 小型发布 63
6.5 简单设计 64
6.6 测试 64
6.7 重构 65
6.8 结对编程 65
6.9 集体拥有 66
6.10 持续集成 66
6.11.2 揭露加班黑市 67
6.11.3 长期还是短期 67
6.11.1 可忍受的工作时间 67
6.11 每周工作40小时 67
6.12 现场客户 68
6.13 编码标准 69
6.13.1 编码标准的方方面面 69
6.13.2 到哪里去了解编码标准 69
6.14 总结 70
6.15 问与答 70
6.16 作业 71
6.16.1 小测验 71
6.16.2 答案 71
6.16.3 练习 72
第7小时课程 指导XP项目 75
7.1 使用XP价值观来运作项目 75
7.2 信任小组 76
7.3 领导XP小组 76
7.3.1 做一名受小组拥戴的领导 77
7.3.2 不应容忍的行为 77
7.3.3 您是哪种类型的领导 78
7.4 组建小组 79
7.4.1 营造小组文化 79
7.5 总结 81
7.6 问与答 81
7.4.2 激励小组 81
7.7 作业 82
7.7.1 小测验 82
7.7.2 答案 83
7.7.3 练习 83
第8小时课程 规划XP中的软件发布 85
8.1 软件发布基础 85
8.1.1 确定项目的范围 86
8.1.2 发布规划 87
8.2 总结 92
8.3 问与答 92
8.4.1 小测验 93
8.4.2 答案 93
8.4 作业 93
8.4.3 练习 94
第9小时课程 以迭代的方式开发软件 95
9.1 将发布划分为迭代 95
9.2 小组集思广益地讨论任务 96
第三部分 运作XP项目 97
9.3 承担工作 98
9.4 编写验收测试 98
9.5 跟踪和指导迭代 100
9.5.1 处理延迟的情况 102
9.5.2 控制迭代的方向 102
9.5.3 度量和控制速度 103
9.5.4 常务会议 103
9.6 结束迭代 104
9.7 总结 104
9.8 问与答 104
9.9.1 小测验 105
9.9 作业 105
9.9.2 答案 106
9.9.3 练习 106
第10小时课程 以用户故事的方式收集客户需求 107
10.1 编写第一个用户故事 107
10.1.1 选择用于编写用户故事的工具 109
10.1.2 用于收集客户需求的用户故事范例 112
10.2 用户故事变体 112
10.2.1 用户故事和用例之比较 113
10.2.2 转换功能规范 113
10.2.3 使用用户故事设计原型 114
10.3 总结 114
10.5.1 小测验 115
10.4 问与答 115
10.5 作业 115
10.5.2 答案 116
10.5.3 练习 116
第11小时课程 以结对编程的方式开发软件 117
11.1 养成结对编程的习惯 117
11.2 营造物理空间 118
11.3 结对编程的代价和好处 120
11.3.1 通过结对编程提高开发人员的士气 121
11.3.2 程序员的看法 122
11.4 驳斥对结对编程的非难 122
11.5 使结对编程适合于您 123
11.7 问与答 124
11.6 总结 124
11.8 作业 125
11.8.1 小测验 125
11.8.2 答案 126
11.8.3 练习 126
第四部分 使用XP工具 127
第12小时课程 以XP方式集成系统 129
12.1 集成周期 129
12.1.1 提供产品 130
12.1.2 每天构建软件 131
12.1.3 定义良好的构建 132
12.1.4 确保源代码的安全 133
12.2.1 通过持续集成将构建演绎到极致 134
12.2 开始自动化构建 134
12.2.2 消除集成障碍 135
12.3 总结 136
12.4 问与答 136
12.5 作业 137
12.5.1 小测验 137
12.5.2 答案 137
12.5.3 练习 137
第13小时课程 使用XP开发工具 139
13.1 搜集XP工具集 139
13.2 使用xUnit测试框架来测试软件 140
13.3 使用工具跟踪缺陷 143
13.4 使用基于纸张的工具 144
13.5 提高代码速度的软件工具 145
13.6 源代码控制工具 146
13.7 检查代码质量的工具 147
13.8 利用集成开发环境 149
13.8.1 IBM的VisualAge for Java 149
13.8.2 Microsoft的Visual Studio.NET 152
13.8.3 其他集成开发环境 155
13.9 总结 156
13.10 问与答 156
13.11 作业 157
13.11.1 小测验 157
13.11.3 练习 158
13.11.2 答案 158
第14小时课程 Java单元测试工具 159
14.1 再谈测试先行 159
14.2 JUnit简介 160
14.3 安装JUnit 161
14.4 编写第一个JUnit测试 165
14.5 测试方面的难题 168
14.5.1 用户界面 168
14.5.2 基于Web的系统 168
14.5.3 数据库 168
14.8.1 小测验 169
14.8 作业 169
14.7 问与答 169
14.6 总结 169
14.8.2 答案 170
14.8.3 练习 170
第15小时课程 Microsoft单元测试工具 171
15.1 Microsoft COM和.NET 171
15.1.1 Microsoft COM 171
15.1.2 Microsoft.NET 172
15.2 建立.NET环境 173
15.2.1 下载并安装.NET 173
15.2.2 安装并运行.NET测试框架 173
15.3 编写第一个NUnit测试 174
15.3.1 用于NUnit测试的范例用户故事 174
15.3.2 创建范例应用程序 175
15.3.3 为Rugby类创建单元测试 176
15.3.4 使用NUnit进行调试 183
15.3.5 从命令行运行NUnit 184
15.4 总结 185
15.5 问与答 185
15.6 作业 186
15.6.1 小测验 186
15.6.2 答案 187
15.6.3 练习 187
第16小时课程 软件开发自动化 189
16.1 使用Ant实现自动化构建 189
16.1.1 安装Ant 190
16.1.2 Ant命令选项 191
16.2 Ant构建文件 192
16.2.1 project标记 194
16.2.2 target标记 194
16.2.3 任务 195
16.2.4 属性 195
16.3 使用Ant构建HelloWorld程序 196
16.4 在Microsoft平台上自动化构建 198
16.5 总结 200
16.6 问与答 200
16.7 作业 201
16.7.1 小测验 201
16.7.2 答案 201
16.7.3 练习 202
第17小时课程 充分利用Ant来自动化XP项目 203
17.1 使用Ant来自动化单元测试 203
17.1.1 使用Ant建立数据库 204
17.1.2 通过Ant运行JUnit测试 213
17.1.3 使用Ant以Email的方式发送测试报告 218
17.2 在.NET平台上自动化构建 221
17.3 总结 224
17.4 问与答 225
17.5 作业 225
17.5.1 小测验 225
17.5.2 答案 226
17.5.3 练习 226
第五部分 实施XP 227
第18小时课程 在组织中实施XP 229
18.1 技术接纳曲线 229
18.2 XP实施指南 230
18.2.1 解决最严重的问题 231
18.2.2 针对项目修正XP 233
18.2.3 创造物理环境 233
18.3 避开陷阱 235
18.4 评估XP实施情况 236
18.5 总结 237
18.6 问与答 237
18.7 作业 237
18.7.3 练习 238
18.7.2 答案 238
18.7.1 小测验 238
第19小时课程 成功地推销XP 239
19.1 在内部推销XP 239
19.1.1 如何向开发人员推销XP 239
19.1.2 赢得结队编程之战 241
19.2 说服管理人员 242
19.3 如何向客户推销XP 243
19.3.1 确定问题 244
19.3.2 确定解决方案 245
19.3.5 就价格达成一致 246
19.3.6 签订合同 246
19.3.4 确定后勤保障 246
19.3.3 确定资源 246
19.4 总结 247
19.5 问与答 247
19.6 作业 247
19.6.1 小测验 247
19.6.2 答案 248
19.6.3 练习 248
第20小时课程 XP案例研究 249
20.1 案例研究:确保推销方法和交付方法相称的重要性 249
20.2 案例研究:中途采用XP的后果 250
20.3 案例研究:独立软件厂商采用XP 252
20.4 案例研究:在大型项目中采用XP 253
20.7.1 小测验 254
20.7 作业 254
20.5 总结 254
20.6 问与答 254
20.7.2 答案 255
20.7.3 练习 255
第六部分 扩大XP的应用范围及其他高级主题 257
第21小时课程 再谈重构技术 259
21.1 为何需要重构 259
21.2 何时重构 260
21.3 重构面临的挑战 261
21.4 重构思想 261
21.4.1 提取(extract)方法 261
21.4.2 将幻数变为符号常量 263
21.4.3 内联临时变量 264
21.4.4 使用断言 265
21.4.5 用显式方法替代参数 266
21.4.6 重构小结 267
21.5 养成重构的习惯 268
21.6 重构除代码外的其他东西 268
21.7 有关重构技术的资源 269
21.8 总结 270
21.9 问与答 270
21.10 作业 270
21.10.1 小测验 270
21.10.3 练习 271
21.10.2 答案 271
第22小时课程 突破XP的局限 273
22.1 如何将XP用于大型项目 273
22.1.1 划分功能小组 274
22.1.2 扩展结对编程 276
22.1.3 规划游戏 276
22.1.4 没有现场客户 277
22.2 虚拟小组工具 278
22.3 总结 279
22.4 问与答 279
22.5 作业 279
22.5.3 练习 280
22.5.2 答案 280
22.5.1 小测验 280
第23小时课程 在XP中使用敏捷建模技术 281
23.1 敏捷建模技术简介 281
23.1.1 AM的价值观 282
23.1.2 AM的核心原则 283
23.1.3 AM的辅助原则 283
23.1.4 AM的核心实践 284
23.1.5 AM的辅助实践 285
23.1.6 XP与AM之比较 286
23.2 AM使用范例 287
23.3 总结 292
23.4 问与答 292
23.5.1 小测验 293
23.5 作业 293
23.5.3 练习 294
23.5.2 答案 294
第24小时课程 其他敏捷开发方法 295
24.1 敏捷开发方法 295
24.1.1 敏捷宣言 296
24.1.2 敏捷原则 296
24.1.3 敏捷软件开发的平衡术 296
24.2 Scrum方法 297
24.3 动态系统开发方法 299
24.4 特性驱动的开发 301
24.5 创建自己的敏捷方法 302
24.8 作业 303
24.6 总结 303
24.7 问与答 303
24.8.1 小测验 304
24.8.2 答案 304
24.8.3 练习 304
第七部分 附录 305
附录A 参考资料 307
附录B 网上资源 311
B.1 极限编程链接 311
B.2 与XP相关的链接 312
B.3 XP工具链接 312
B.4 敏捷方法链接 312