羅伯特?C.馬丁(鮑勃大叔)因在技術人群中聲名遠播的Clean系列在全球圈粉無數。本書為其燙手新作,旨在為廣大工程師指明一條通向匠師之路,包括飽經洗礪的敏捷技術實踐,如何通過持續的努力提高專業素養,軟件可用之上的目標與技能,以及如何激發團隊最大潛能,等等。本書融會幾本經典著作的精髓,將"整潔”方法論推向至高境界—軟件開發者有責任維護世界正常運行,而"人”才是"技術”的決定者。 本書共分三部分,前兩部分用實例闡釋TDD在敏捷軟件中的運用,以及驗收測試、協同編程等常被忽視的敏捷側面與具體策略,還探討了頗有價值的軟件設計方案相關話題;第Ⅲ部分拔地而起,直接提出十條堪稱金玉良言的"規勸”,以幫助程序員成為團隊基石。
羅伯特?C.馬丁,自1970年起從事程序員職業。他與人合辦了cleancoders.com網站,為軟件開發者提供在線視頻培訓服務。他還創辦了Uncle Bob咨詢有限公司,為分布于世界各地的大公司提供軟件咨詢、培訓和技能培養服務。同時,他也供職于芝加哥的軟件咨詢企業8th Light,任大匠(Master Craftsman)一職。
羅伯特?C.馬丁,自1970年起從事程序員職業。他與人合辦了cleancoders.com網站,為軟件開發者提供在線視頻培訓服務。他還創辦了Uncle Bob咨詢有限公司,為分布于世界各地的大公司提供軟件咨詢、培訓和技能培養服務。同時,他也供職于芝加哥的軟件咨詢企業8th Light,任大匠(Master Craftsman)一職。
第 1 章 匠藝 ................................................................................... 25
第Ⅰ部分 紀律 ................................................................................ 35
極限編程 .............................................................................................................................. 37
生命之環 ...................................................................................................................... 38
測試驅動開發 ...................................................................................................................... 39
重構 ...................................................................................................................................... 40
簡單設計 .............................................................................................................................. 41
協同編程 .............................................................................................................................. 41
驗收測試 .............................................................................................................................. 42
第 2 章 測試驅動開發 ....................................................................... 43
概述 ...................................................................................................................................... 44
軟件 .............................................................................................................................. 46
TDD 三法則 ................................................................................................................. 47
第四法則 ...................................................................................................................... 58
基礎知識 .............................................................................................................................. 59
簡單示例 ...................................................................................................................... 60
棧 .................................................................................................................................. 60
質因數 .......................................................................................................................... 76
保齡球局 ...................................................................................................................... 86
小結 .................................................................................................................................... 103
第3章 高級測試驅動開發 ................................................................... 105
排序示例一 ........................................................................................................................ 106
排序示例二 ........................................................................................................................ 111
卡殼 .................................................................................................................................... 119
安排、行動、斷言 ............................................................................................................ 127
進入 BDD ................................................................................................................... 128
有限狀態機 ................................................................................................................ 129
再談 BDD ................................................................................................................... 131
測試替身 ............................................................................................................................ 132
DUMMY ..................................................................................................................... 135
STUB .......................................................................................................................... 139
SPY ............................................................................................................................. 142
MOCK ........................................................................................................................ 145
FAKE .......................................................................................................................... 148
TDD 不確定性原理 ................................................................................................... 150
倫敦派對決芝加哥派 ................................................................................................ 163
確定性問題 ................................................................................................................ 164
倫敦派 ........................................................................................................................ 165
芝加哥派 .................................................................................................................... 166
融合 ............................................................................................................................ 167
架構 .................................................................................................................................... 167
小結 .................................................................................................................................... 169
第 4 章 設計 ................................................................................. 171
測試數據庫 ........................................................................................................................ 172
測試 GUI ............................................................................................................................ 174
GUI 輸入 .................................................................................................................... 177
測試模式 ............................................................................................................................ 178
專為測試創建子類 .................................................................................................... 179
自勵 ............................................................................................................................ 180
HUMBLE OBJECT .................................................................................................... 181
測試設計 ............................................................................................................................ 184
脆弱測試問題 ............................................................................................................ 184
一一對應 .................................................................................................................... 185
打破對應關系 ............................................................................................................ 187
VIDEO STORE .......................................................................................................... 188
具體 vs 通用 ............................................................................................................... 207
轉換優先順序 .................................................................................................................... 208
{} → NIL(無代碼→空值) .................................................................................. 210
NIL → CONSTANT(空值→常量) ..................................................................... 211
UNCONDITIONAL → SELECTION(無條件→條件選擇) .............................. 212
VALUE → LIST(值→列表) ............................................................................... 213
STATEMENT → RECURSION(語句→遞歸) ................................................... 213
SELECTION → ITERATION(條件選擇→遍歷) .............................................. 214
VALUE → MUTATED VALUE(值→改變了的值) ........................................... 214
示例:斐波那契數列 ................................................................................................ 215
變換模式優先順序假設............................................................................................. 119
小結 .................................................................................................................................... 220
第 5 章 重構 .................................................................................. 221
什么是重構 ........................................................................................................................ 223
基礎工具包 ........................................................................................................................ 224
重命名 ........................................................................................................................ 224
方法抽取 .................................................................................................................... 225
變量抽取 .................................................................................................................... 226
字段抽取 .................................................................................................................... 228
魔方 ............................................................................................................................ 241
紀律 .................................................................................................................................... 241
測試 ............................................................................................................................ 242
快速測試 .................................................................................................................... 242
打破緊密的一一對應關系 ......................................................................................... 242
持續重構 .................................................................................................................... 243
果斷重構 .................................................................................................................... 243
讓測試始終能通過 .................................................................................................... 243
留條出路 .................................................................................................................... 244
小結 .................................................................................................................................... 245
第 6 章 簡單設計 .......................................................................... 247
YAGNI ................................................................................................................................ 250
用測試覆蓋 ........................................................................................................................ 252
覆蓋 ............................................................................................................................ 254
漸近目標 .................................................................................................................... 255
設計? ........................................................................................................................ 256
但還有更多好處 ........................................................................................................ 256
充分表達 ............................................................................................................................ 257
底層抽象 .................................................................................................................... 259
再論測試:問題的后半部分 ..................................................................................... 260
盡量減少重復 .................................................................................................................... 261
意外重復 .................................................................................................................... 262
尺寸盡量小 ........................................................................................................................ 263
簡單設計 .................................................................................................................... 263
第 7 章 協同編程 ............................................................................ 265
第 8 章 驗收測試 ............................................................................ 269
紀律 .................................................................................................................................... 272
持續構建 ............................................................................................................................ 273
第 Ⅱ 部 分 標準 .............................................................................. 275
你的新 CTO ....................................................................................................................... 276
第 9 章 生產力 ............................................................................. 277
永不交付 S**T ................................................................................................................... 278
成本低廉的變更適應能力 ................................................................................................ 280
時刻準備著 ........................................................................................................................ 282
穩定的生產力 .................................................................................................................... 283
第 10 章 質量 .............................................................................. 285
持續改進 ............................................................................................................................ 286
免于恐懼 ............................................................................................................................ 287
極致質量 ............................................................................................................................ 288
我們不把問題留給 QA ...................................................................................................... 289
QA 之疾 ...................................................................................................................... 290
QA 什么問題也不會發現 .................................................................................................. 290
測試自動化 ........................................................................................................................ 291
自動化測試與用戶界面 .................................................................................................... 292
測試用戶界面 .................................................................................................................... 293
第 11 章 勇氣 ................................................................................ 295
我們彼此補位 .................................................................................................................... 296
靠譜的預估 ........................................................................................................................ 298
你得說不 ............................................................................................................................ 300
持續努力學習 .................................................................................................................... 301
教導 .................................................................................................................................... 302
第Ⅲ部分 操守 ............................................................................... 303
第一個程序員 .................................................................................................................... 304
75 年 ................................................................................................................................... 305
書呆子與救世主 ................................................................................................................ 310
榜樣和惡棍 ........................................................................................................................ 313
我們統治世界 .................................................................................................................... 314
災難 .................................................................................................................................... 315
誓言 .................................................................................................................................... 317
第 12 章 傷害 ................................................................................ 319
首先,不造成傷害 ............................................................................................................ 320
對社會無害 ................................................................................................................ 321
對功能的損害 ............................................................................................................ 323
對結構無害 ................................................................................................................ 326
柔軟 ............................................................................................................................ 327
測試 ............................................................................................................................ 329
最好的作品 ........................................................................................................................ 330
使其正確 .................................................................................................................... 331
什么是好結構 ............................................................................................................ 332
艾森豪威爾矩陣 ........................................................................................................ 334
程序員是利益相關者 ................................................................................................ 336
盡力而為 .................................................................................................................... 338
可重復證據 ........................................................................................................................ 340
狄克斯特拉 ................................................................................................................ 340
正確性證明 ................................................................................................................ 341
結構化編程 ................................................................................................................ 343
功能分解 .................................................................................................................... 346
TDD ............................................................................................................................ 347
第 13 章 集成 ................................................................................ 351
小周期 ................................................................................................................................ 352
源代碼控制的歷史 .................................................................................................... 352
GIT .............................................................................................................................. 358
短周期 ........................................................................................................................ 360
持續集成 .................................................................................................................... 361
分支與切換 ................................................................................................................ 362
持續部署 .................................................................................................................... 364
持續構建 .................................................................................................................... 365
持續改進 ............................................................................................................................ 366
測試覆蓋率 ................................................................................................................ 367
突變測試 .................................................................................................................... 368
語義穩定性 ................................................................................................................ 368
清理 ............................................................................................................................ 369
創造 ............................................................................................................................ 370
保持高生產力 .................................................................................................................... 370
拖慢速度的因素 ........................................................................................................ 371
解決注意力分散問題 ................................................................................................ 373
時間管理 .................................................................................................................... 376
第 14 章 團隊合作 .......................................................................... 379
組團工作 ............................................................................................................................ 380
開放式/虛擬辦公室 ................................................................................................... 380
誠實和合理地預估 ............................................................................................................ 382
謊言 ............................................................................................................................ 383
誠實、準確、精確 .................................................................................................... 384
故事 1:載體 ............................................................................................................. 385
故事 2:pCCU ........................................................................................................... 387
教訓 ............................................................................................................................ 389
準確度 ........................................................................................................................ 389
精確度 ........................................................................................................................ 391
匯總 ............................................................................................................................ 393
誠實 ............................................................................................................................ 394
尊重 .................................................................................................................................... 396
永不停止學習 .................................................................................................................... 397