第 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 体系结构 18
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 结论 35
第 6 章 第一次迭代计划 37
6.1 将故事分解为任务 38
6.2 承担任务 43
6.3 估算任务 44
6.4 结论 48
第 7 章 开始第一次迭代 49
7.1 计划是一回事, 现实是另一回事 49
7.2 开始迭代 50
7.2.1 结构 50
7.2.2 测试隔离 64
7.2.3 两次单击按钮 64
7.2.4 糟糕 65
7.2.5 结束 65
7.3 结论 66
7.4 跟踪 67
第 8 章 任务6.3:登录任务 69
8.1 受保护的页 69
8.1.1 我们没有编写测试 72
8.1.2 登录 73
8.1.3 关闭未打开的数据库 74
8.1.4 测试意识 77
8.2 Cookie 77
8.2.1 登录任务结论 83
8.3 跟踪 83
第 9 章 重构引起的混乱 85
9.1 重构LoginServlet 91
9.2 结论 98
9.2.1 第二个实例为一般性付出了代价 98
9.2.2 这值得吗? 98
9.2.3 没有自动测试的重构是令人痛苦的 99
9.2.4 如果更早地做前置设计前置设计, 会减少重构吗? 99
9.3 跟踪 99
第 10 章 逆向工作 101
10.1 TestNoUser 101
10.1.1 欺骗 102
10.1.2 逆向工作 104
10.1.3 但是我们还没有处理完毕 104
10.2 TestGoodEmail 105
10.3 TestBadEmail 108
10.4 实现模拟对象 114
10.4.1 Mailer 114
10.4.2 PasswordReminderDatabase 114
10.5 ForgotPassword Servlet 117
10.6 结论 119
10.7 跟踪 119
第 11 章 结构推敲 121
11.1 重构测试 125
11.2 再次重构Database 127
11.3 结构变革 136
11.4 注册Servlet 136
11.5 结论 140
11.6 跟踪 141
第 12 章 第一次迭代-摘要 143
12.1 Cookie的悲哀 143
12.2 HTML/JSP任务 146
12.3 我们认为已经完成了任务 147
第 13 章 指 导 149
13.1 有趣的误解 152
13.2 是什么错了? 156
第 14 章 完成版本 159
14.1 你就不能减少两个小时 159
14.2 任务计划 161
14.3 迭代 161
14.3.1 更改过程 161
14.3.2 总结第2次迭代 163
14.4 学到的经验 163
14.5 第三次迭代 163
14.5.1 创建验收测试框架的失败 164
14.6 发行 165
14.6.1 版本:最初版本和当前版本 165
14.6.2 根据技术风险指定优先级 168
14.6.3 如果这不是一个XP项目, 会出现什么情况呢? 168
第 15 章 结 论 171
15.1 将此次经验应用于更大型的项目中 171
15.1.1 短周期 172
15.1.2 频繁的沟通 172
15.1.3 反馈 173
15.2 学到的经验 173
15.3 最终结论 175