本書介紹了高效的軟件設計和編程方法,把精益需求分析、領域驅(qū)動設計、面向?qū)ο、契約式設計、測試驅(qū)動開發(fā)、意圖導向編程及演進式設計等編程實踐融會貫通,深入洞察軟件設計本質(zhì),展示了一個清晰的程序員編程能力提升路線圖。全書共十二章,按照程序員技能提升的順序,分為品味篇、專業(yè)篇和高效篇。 本書適合各種編程語言的一線開發(fā)者、大學計算機和軟件工程相關專業(yè)三年級以上本科生或研究生閱讀,也適合專業(yè)的軟件開發(fā)團隊作為統(tǒng)一編程范式、提升設計意識和能力的參考書。
1.軟件設計的進階指南
讀者可以按順序閱讀本書的各章節(jié)。也可以按照需要在各章節(jié)之間跳轉(zhuǎn)。由于每一位開發(fā)者或多或少地接觸過某些知識點,所以本書的各章節(jié)盡量做到彼此獨立。此外,書末包含索引,在其中可以找到各主要概念在本書中出現(xiàn)的位置。
2.編程能力提升路線圖
本書被設計為一個“藏寶圖”。它提供一個路線圖,引導讀者找到所需的寶藏。在保證每個部分介紹的內(nèi)容是完整的基礎上,我刻意控制了每章的篇幅,把更具體的內(nèi)容和做法指引到該領域的參考文獻。讀者們可以通過參考文獻的線索以及自主的知識檢索,深入了解其中的關鍵實踐。
3.形成團隊設計共識
軟件開發(fā)是集體活動,特別是考慮到演進因素時更是如此。本書可以作為關心提升效率的研發(fā)團隊集體學習和討論的素材,在本書介紹的實踐基礎上結(jié)合實際形成和加深共識。
張剛,軟件工程博士、資深技術(shù)專家、CCF 軟件工程委員會執(zhí)行委員、貝爾實驗室杰出工程師。先后任職于阿爾卡特朗訊、上海理工大學和阿里巴巴。20 余年軟件開發(fā)、架構(gòu)設計和技術(shù)領導者的成功經(jīng)驗,先進軟件工程方法與實踐的持續(xù)探索者和積極傳播者。
目錄
品味篇 識別優(yōu)秀設計
第 1章 優(yōu)質(zhì)代碼的外部特征 2
1.1 實現(xiàn)了期望的功能 2
1.2 缺陷盡量少 6
1.3 易于理解 8
1.4 易于演進 11
1.5 易于復用 13
1.6 小結(jié) 14
第 2章 優(yōu)質(zhì)代碼的內(nèi)在特征 16
2.1 一致的編碼風格 16
2.2 有意義的命名 19
2.3 簡潔的行為實現(xiàn) 24
2.4 高內(nèi)聚和低耦合的模塊化結(jié)構(gòu) 28
2.5 沒有重復 37
2.6 沒有多余的設計 42
2.7 具備自動化測試 45
2.8 小結(jié) 47
第3章 高質(zhì)量的需求 52
3.1 用結(jié)構(gòu)化的方法分析需求 52
3.2 定義業(yè)務目標 58
3.3 探索業(yè)務流程,定義系統(tǒng)功能 61
3.4 完善操作步驟,澄清業(yè)務規(guī)則 68
3.5 小結(jié) 77
第4章 領域建模 79
4.1 領域模型的概念 79
4.2 捕獲業(yè)務概念 85
4.3 辨析業(yè)務概念 85
4.4 持續(xù)演進業(yè)務概念 91
4.5 用領域模型指導軟件開發(fā) 95
4.6 小結(jié) 97
專業(yè)篇 建立扎實功底
第5章 設計分解和責任分配 99
5.1 通過分而治之管理復雜性 99
5.2 架構(gòu)分解的原則與模式 105
5.3 正確使用語言特性 110
5.4 關注點分離 116
5.5 設計模式 119
5.6 小結(jié) 124
第6章 依賴、接口和契約 126
6.1 依賴的設計原則 126
6.2 需求方接口 134
6.3 提供方接口 142
6.4 設計契約 145
6.5 事件機制 151
6.6 小結(jié) 156
卓越篇 實現(xiàn)高效編碼
第7章 用測試描述需求和契約 160
7.1 將測試作為一個建設性活動 160
7.2 從V 模型到I 模型 161
7.3 用測試澄清和文檔化需求 164
7.4 用測試澄清職責和契約 170
7.5 測試先行 174
7.6 小結(jié) 180
第8章 用領域模型指導實現(xiàn) 182
8.1 用領域模型指導實現(xiàn) 182
8.2 基本構(gòu)造塊 188
8.3 聚合、資源庫和工廠 196
8.4 分層架構(gòu)和代碼結(jié)構(gòu) 208
8.5 限界上下文 211
8.6 上下文映射 213
8.7 領域模型的持續(xù)演進 217
8.8 小結(jié) 219
第9章 由外而內(nèi)的設計 221
9.1 如何由外而內(nèi) 221
9.2 由外而內(nèi)設計的優(yōu)勢 235
9.3 應用測試替身 238
9.4 測試先行和由外而內(nèi) 247
9.5 把由外而內(nèi)應用于大規(guī)模的項目 249
9.6 小結(jié) 261
第 10章 設計質(zhì)量貫穿始終 263
10.1 質(zhì)量內(nèi)建 263
10.2 契約式設計和防御式編程 265
10.3 高質(zhì)量的自動化測試 273
10.4 代碼評審和結(jié)對編程 285
10.5 代碼質(zhì)量度量和問題檢測 288
10.6 小結(jié) 300
第 11章 讓設計持續(xù)演進 302
11.1 軟件設計的演進本質(zhì) 302
11.2 簡單設計 305
11.3 重構(gòu) 310
11.4 測試驅(qū)動開發(fā) 318
11.5 持續(xù)集成 330
11.6 小結(jié) 332
第 12章 精益思想和高效編程 334
12.1 精益思想 334
12.2 精益思想和軟件設計的關系 337
12.3 總結(jié) 340
參考文獻 345
索引 349