第 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 發(fā)行計劃 11
3.5 迭代計劃 12
3.6 開發(fā) 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 按優(yōu)先順序對故事進行排列 32
5.2 結構重要性 33
5.3 發(fā)布和迭代周期 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 創(chuàng)建驗收測試框架的失敗 164
14.6 發(fā)行 165
14.6.1 版本:最初版本和當前版本 165
14.6.2 根據技術風險指定優(yōu)先級 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