敏捷開發(紀念版)
內容描述
《敏捷開發(紀念版)》介紹敏捷原則、模式和實踐,包含4部分38章24個附錄,首先概述敏捷開發、包含6個主題,分別為敏捷實踐、極限編程、規劃、測試、重構和編程活動。接下來介紹敏捷設計,解釋了5個設計原則、UML及其應用,包括狀態圖、對象圖、用例圖、序列圖和類圖,並以一個完整的咖啡機編程案例來介紹具體的用法。通過薪水支付系統Payroll的實戰練習,書中呈現了敏捷開發的整個過程及其實用價值。 《敏捷開發(紀念版)》適合真正想要通過敏捷方法來提升軟件開發技能以及及時交付軟件價值的所有讀者閱讀和參考,尤其適合開發、管理和業務分析崗位的人員學習。通過本書的閱讀,讀者還可以瞭解UML、設計模式、面向對象設計原則以及包括極限編程在內的敏捷方法。
目錄大綱
詳細目錄
第Ⅰ部分 敏捷開發
第1章 敏捷實踐 002
敏捷聯盟 003
個人和互動優先於過程和工具 004
可以工作的軟件優先於詳盡的文檔 004
客戶合作優先於合同談判 005
應對變化優先於遵循計劃 006
原則 007
小結 009
參考文獻 010
第2章 極限編程概述 011
極限編程實踐 011
完整的團隊 011
用戶故事 012
短的周期 012
驗收測試 013
結對編程 014
測試驅動開發 015
集體所有權 015
持續集成 016
可持續的開發速度 016
開放的工作空間 017
規劃游戲 017
簡單設計 018
重構 019
隱喻 019
小結 020
參考文獻 021
第3章 計劃 022
初探 023
技術預研、故事拆分和速率 023
發布計劃 024
迭代計劃 024
定義“完成” 025
任務計劃 025
迭代 027
跟蹤 027
小結 028
參考文獻 029
第4章 測試 030
測試驅動開發 030
驗收測試 035
意外獲得的架構 037
小結 037
參考文獻 038
第5章 重構 039
素數產生程序:一個簡單的重構示例 040
重構 043
最後檢查 049
小結 053
參考文獻 054
第6章 一次編程實踐 055
保齡球比賽 056
小結 106
保齡球規則概述 107
第Ⅱ部分 敏捷設計
臭味和原則 110
參考文獻 110
第7章 什麽是敏捷設計 111
設計臭味 112
設計的臭味:軟件腐化的氣味 112
僵化 113
脆弱 113
頑固 113
粘滯 114
不必要的復雜 114
不必要的重復 114
晦澀 115
為什麽軟件會腐化 115
Copy程序 116
一個熟悉的場景 116
Copy程序的敏捷設計 120
小結 122
參考文獻 123
第8章 單一職責原則(SRP) 124
定義職責 126
分離耦合的職責 127
持久化 128
小結 128
參考文獻 129
第9章 開/關原則(OCP) 130
描述 131
Shape應用程序 133
違反OCP 133
遵循OCP 136
預測變化和“貼切的”結構 138
放置“鉤子” 139
使用抽象獲得顯式封閉性 140
使用“數據驅動”的方法獲取
封閉性 141
小結 142
參考文獻 143
第10章 里氏替換原則(LSP) 144
違反LSP的情形 145
更微妙的違反情形 147
一個實際的例子 154
用提取公共部分的方法代替繼承 158
啟發式規則和習慣用法 162
小結 162
參考文獻 163
第11章 依賴倒置原則(DIP) 164
層次化 165
倒置的接口所有權 166
依賴於抽象 167
一個簡單的DIP例子 168
找出底層抽象 169
熔爐示例 171
小結 172
參考文獻 173
第12章 接口隔離原則(ISP) 174
接口污染 174
分離客戶端就是分離接口 176
類接口和對象接口 177
通過委托來分離接口 178
使用多重繼承隔離接口 179
ATM 用戶界面的例子 180
小結 187
參考文獻 187
第13章 C#程序員UML概述(C#語言) 188
類圖 191
對象圖 193
順序圖 193
協作圖 194
狀態圖 195
小結 196
參考文獻 196
第14章 使用UML 197
為什麽建模 197
為什麽要建軟件模型 198
寫代碼之前是否應該做好詳細設計 198
有效使用UML 199
與他人交流 199
脈絡圖 201
項目結束文檔 202
要保留的和要丟棄的 203
迭代式改進 204
行為優先 204
檢查結構 206
想象代碼 208
圖示的演化 209
何時以及如何繪制圖示 210
何時要畫圖,何時不要畫圖 210
CASE工具 211
那麽,文檔呢 212
小結 212
第15章 狀態圖 214
基礎知識 214
特定事件 216
超狀態 217
初始偽狀態和結束偽狀態 218
使用FSM圖示 219
小結 220
第16章 對象圖 221
即時快照 221
主動對象 223
小結 227
第17章 用例 228
寫用例 229
備選流程 230
其他東西呢 230
用例圖 231
小結 232
參考文獻 232
第18章 順序圖 233
基礎知識 234
對象、生命線、消息及其他 234
創建和析構 235
簡單循環 236
時機和場合 237
高級概念 240
循環和條件 240
耗費時間的消息 241
異步消息 243
多線程 248
主動對象 249
向接口發送消息 250
小結 251
第19章 類圖 252
基礎知識 253
類 253
關聯 253
繼承 254
類圖示例 255
細節 258
類的衍型 258
抽象類 259
屬性 260
聚合 260
組合 261
多重性 263
關聯衍型 263
嵌套類 264
關聯類 265
關聯修飾符 266
小結 266
參考文獻 266
第20章 咖啡的啟示 267
Mark IV型專用咖啡機 267
規格說明書 268
常見的醜陋方案 271
虛構的抽象 273
改進方案 275
實現抽象模型 279
這個設計的好處 295
面向對象過度設計 303
參考文獻 304
第21章 命令模式和主動對象模式 310
簡單的命令模式 311
事務操作 313
實體上的解耦和時間上的解耦 314
時間上的解耦 315
UNDO()方法 315
主動對象模式 316
小結 322
參考文獻 322
第22章 模板方法模式和策略模式:繼承和委托 323
模板方法模式 324
模式濫用 327
冒泡排序 328
策略模式 332
小結 338
參考文獻 338
第23章 外觀模式和中介者模式 339
外觀模式 339
中介者模式 340
小結 343
參考文獻 343
第24章 單例模式和單狀態模式 344
單例模式 345
好處 347
代價 347
單例模式實戰 348
單狀態模式 350
好處 351
代價 352
單狀態模式實戰 352
小結 358
參考文獻 359
第25章 空對象模式 360
描述 360
小結 363
參考文獻 364
第26章 案例學習:Payroll系統的第一輪迭代 365
規格說明書 366
基於用例進行分析 367
添加新員工 368
刪除員工 369
提交考勤卡 370
提交銷售憑證 370
提交工會服務費 371
更改員工信息 372
薪水支付日 374
反思:我們從中學到了什麽 376
薪水支付類別抽象 376
支付薪水時間表抽象 377
第Ⅲ部分 案例學習:薪水支付系統Payroll
支付方式 378
工會所屬關系 378
小結 379
參考文獻 380
第27章 案例學習:Payroll系統
實現 381
事務 381
添加員工 382
Payoll系統的數據庫 384
刪除雇員 388
考勤卡、銷售憑證和服務費用 390
更改員工信息 399
更改員工類別 403
我犯了什麽暈? 409
支付員工薪水 413
我們是否希望開發人員來做商業決策? 415
按月薪結算的員工支付薪水 415
支付小時工的薪水 418
主程序 431
數據庫 432
小結 433
關於本章 433
參考文獻 434
第Ⅳ部分 案例學習:打包Payroll系統
第28章 包和組件的設計原則 436
包和組件 436
組件的內聚性原則:粒度 437
重用-發布等價原則(REP) 438
共同重用原則(CRP) 439
共同封閉原則(CCP) 440
組件內聚性小結 441
組件耦合原則:穩定性 441
無環依賴原則(ADP) 441
穩定依賴原則(SDP) 447
穩定抽象原則(SAP) 452
小結 456
第29章 工廠模式 457
依賴問題 460
靜態類型與動態類型 461
可替換的工廠 462
對測試支架使用對象工廠 463
工廠模式的重要性 465
小結 465
參考文獻 465
第30章 案例學習:Payroll系統的包分析 466
組件結構和符號 467
應用共同封閉原則(CCP) 469
應用發布等價原則(REP) 471
耦合和封裝 474
度量指標 475
在薪水支付系統中使用這些度量 477
對象工廠 479
重新思考內聚的邊界 483
最終的包結構 483
小結 485
參考文獻 485
第31章 組合模式 487
組合命令 489
多重性還是非多重性 490
小結 490
第32章 觀察者模式 491
數字時鐘 492
觀察者模式 512
模型 513
觀察者模式與面向對象設計原則 514
小結 514
參考文獻 515
第33章 抽象服務器、適配器和橋接模式 516
抽象服務器模式 517
適配器模式 518
類形式的適配器 519
調制解調器問題、適配器和里氏替換原則 520
橋接模式 524
小結 527
參考文獻 527
第34章 代理模式和TDG模式:管理第三方API 528
代理模式 529
代理購物車應用 534
小結 550
處理數據庫、中間件以及其他第三方
接口 550
TDG模式 553
測試和內存TDG 561
測試DbGateway 562
小結 568
參考文獻 568
第35章 訪問者模式 569
訪問者模式 570
非循環訪問者模式 575
使用訪問者模式 581
訪問者模式的其他用途 589
裝飾者模式 589
擴展對象模式 596
小結 610
參考文獻 610
第36章 狀態模式 611
嵌套語句switch/case 612
內部作用域內有效的狀態變量 615
測試動作 616
代價和好處 616
遷移表 617
使用表解釋 618
代價和收益 619
狀態模式 620
狀態模式和策略模式 624
使用狀態模式的代價和好處 624
SMC(狀態機編譯器) 625
SMC生成的Turnstile.cs以及其他
支持文件 628
代價和收益 634
狀態機的應用場合 634
作為 GUI 中的高層應用策略 634
GUI 交互控制器 636
分佈式處理 637
小結 638
參考文獻 639
第37章 案例學習:Payroll系統的數據庫 640
建立數據庫 641
代碼設計中的一個缺陷 642
增加雇員 644
事務 658
加載Employee對象 665
還有什麽工作? 680
第38章 案例學習:Payroll系統的用戶界面 681
界面 683
實現 684
構建窗口 696
Payroll的窗口 705
真面目 720
小結 720
參考 721
Rupert:Alpha項目 722
附錄A 兩家公司的諷刺故事 722
附錄B 源碼即設計 739
作者介紹
羅伯特·C.馬丁(Robert C.Martin),業內人士尊稱的“鮑勃大叔”(Uncle Bob),是國際知名的軟件工程師和導師,一位有五十多年健康編碼經驗的程序員,cleancoders.com聯合創始人和Uncle Bob諮詢公司創始人,主要提供軟件諮詢、技能培訓和□□教學服務。
他在專業技術領域具有較深的造詣。除了擔任C++Report雜誌的總編輯,他還發表了大量有影響力的文章,受邀在許多國際性軟件大會上發表演講。他是SOLID五大原則的奠基人,是《敏捷宣言》聯合簽署人並擔任過敏捷聯盟首屆主席。他擅長的主題有軟件匠藝、敏捷軟件開發和測試驅動開發等。
馬丁是個終生學習者,5□年出生的他,還在考飛行駕照。
米咖·馬丁(Micah Martin),軟件工程師、諮詢顧問、培訓師,擅長的領域有面向對象設計原則與模式、敏捷軟件開發實踐。
他是開源項目FitNesse項目的創始人和開發總監。
他著述頗豐,同時也是很多軟件大會的演講嘉賓。