第 1 章 真 相 1
1.1 第一个解决方案 2
1.2 变化 3
1.3 是什么错了 4
第 2 章 积极求胜 5
2.1 极限编程(XP) 5
2.2 本书的结构 6
第 3 章 什么是XP 9
3.1 介绍 9
3.2 探索 10
3.3 探究 11
3.4 发行计划 11
3.5 迭代计划 12
3.6 开发 13
第 4 章 探 索 15
4.1 一个故事的故事 15
4.2 一些约束的故事 16
4.3 体系结构 19
4.4 花费昂贵的故事 19
4.5 组合故事 20
4.6 注册故事 23
4.7 现有用户 24
4.8 旧版的转换 25
4.9 通知 26
4.10 注册页的外观 27
4.11 杂项 27
4.12 结论 28
4.13 故事摘要 29
第 5 章 计 划 31
5.1 按优先顺序对故事进行排列 32
5.2 结构重要性 33
5.3 发布和迭代周期 33
5.4 速度 33
5.5 计划第一个版本 34
5.6 结论 36
第 6 章 第一次迭代计划 37
6.1 将故事分解为任务 38
6.2 承担任务 44
6.3 估算任务 44
6.4 结论 48
7.1 计划是一回事,现实是另一回事 51
第 7 章 开始第一次迭代 51
7.2 开始迭代 52
7.2.1 结构 52
7.2.2 测试隔离 66
7.2.3 两次单击按钮 66
7.2.4 糟糕 67
7.2.5 结束 67
7.3 结论 68
7.4 跟踪 69
第 8 章 任务6.3:登录 71
8.1 受保护的页 71
8.1.1 我们没有编写测试 74
8.1.2 登录 75
8.1.3 关闭未打开的数据库 76
8.2 Cookie 79
8.1.4 测试意识 79
8.3 跟踪 85
第 9 章 重构引起的混乱 87
9.1 重构LoginServlet 93
9.2 结论 100
9.2.1 第二个实例为一般性付出了代价 100
9.2.2 这值得吗 100
9.2.3 没有自动测试的重构是令人痛苦的 101
9.2.4 如果更早地做前置设计,会减少重构吗 101
9.3 跟踪 101
第 10 章 逆向工作 103
10.1 TestNoUser 103
10.1.1 欺骗 104
10.1.3 但是我们还没有处理完毕 106
10.1.2 逆向工作 106
10.2 TestGoodEmail 107
10.3 TestBadEmail 110
10.4 实现模拟对象 116
10.4.1 Mailer 116
10.4.2 PasswordReminderDatabase 118
10.5 ForgotPassword Servlet 119
10.6 结论 121
10.7 跟踪 121
第 11 章 结构推敲 123
11.1 重构测试 127
11.2 再次重构Database 129
11.3 结构变革 138
11.4 注册Servlet 138
11.5 结论 142
11.6 跟踪 143
第 12 章 第一次迭代-摘要 145
12.1 Cookie的悲哀 145
12.2 HTML/JSP任务 148
12.3 我们认为已经完成了任务 149
第 13 章 指 导 151
13.1 有趣的误解 154
13.2 是什么错了 158
第 14 章 完成版本 161
14.1 你就不能减少两个小时 161
14.2 任务计划 163
14.3 迭代 163
14.3.1 更改过程 163
14.5 第三次迭代 165
14.3.2 总结第二次迭代 165
14.4 学到的经验 165
14.6 发行 167
14.6.1 版本:最初版本和当前版本 167
14.6.2 根据技术风险指定优先级 169
14.6.3 如果这不是一个XP项目,会出现什么情况 170
第 15 章 结 论 171
15.1 将此次经验应用于更大型的项目中 171
15.1.1 短周期 172
15.1.2 频繁的沟通 172
15.1.3 反馈 173
15.2 学到的经验 173
15.3 最终结论 175
附录A 第一次迭代—源代码 177