第一部分 軟件架構概念與思想篇. 1
第1章 解析軟件架構概念 3
1.1 軟件架構概念的分類 3
1.1.1 組成派 4
1.1.2 決策派 5
1.2 軟件架構概念大觀
1.2.1 Booch. Rumbaugh和Jacobson的定義 5
1.2.2 Woods的觀點 6
1.2.3 Garlan和Shaw的定義 6
1.2.4 Perry和Wolf的定義 6
1.2.5 Boehm的定義 6
1.2.6 IEEE的定義 6
1.2.7 Bass的定義 6
1.3 軟件架構關注分割與交互 7
1.4 軟件架構是一系列有層次性的決策 8
1.5 PM Tool案例:領會軟件架構概念 10
1.5.1 案例故事 10
1.5.2 軟件架構概念的體現(xiàn) 12
1.5.3 重要結論 14
1.6 總結與強調 14
第2章 子系統(tǒng). 框架與架構 15
2.1 子系統(tǒng)和框架在架構設計中的地位 16
2.1.1 關注點分離之道 16
2.1.2 子系統(tǒng)和框架在架構設計中的地位 17
2.2 子系統(tǒng)與軟件架構 19
2.2.1 不同粒度的軟件單元 20
2.2.2 子系統(tǒng)也有架構 21
2.2.3 子系統(tǒng)不同,28架構不同 21
2.2.4 不同實踐者眼中的粒度 23
2.3 框架與軟件架構 23
2.3.1 框架的概念 23
2.3.2 架構和框架的區(qū)別 24
2.3.3 架構和框架的聯(lián)系 25
2.3.4 框架也有架構 26
2.4 超越概念:立足實踐理解架構 26
2.4.1 理解架構 26
2.4.2 回到實踐 28
2.5 專題:框架技術 29
2.5.1 框架vs.類庫 29
2.5.2 框架的分類 30
2.5.3 框架的開發(fā)過程 32
2.5.4 如何實現(xiàn)框架中的擴展點 33
2.6 總結與強調 36
第3章 軟件架構的作用 37
3.1 充分發(fā)揮軟件架構的作用 37
3.2 軟件架構對新產品開發(fā)的作用 38
3.3 軟件架構對軟件產品線開發(fā)的作用 40
3.4 軟件架構對軟件維護的作用 42
3.5 軟件架構重構 42
3.6 總結與強調 43
第二部分 軟件架構設計方法與過程篇 45
第4章 軟件架構視圖 47
4.1 呼喚軟件架構視圖 47
4.1.1 辦公室里的爭論 48
4.1.2 呼喚軟件架構視圖 48
4.2 軟件架構為誰而設計 49
4.2.1 為用戶而設計 49
4.2.2 為客戶而設計 50
4.2.3 為開發(fā)人員而設計 50
4.2.4 為管理人員而設計 51
4.2.5 總結 51
4.3 引入軟件架構視圖 52
4.3.1 生活中的“視圖”運用 53
4.3.2 什么是軟件架構視圖 54
4.3.3 多組涉眾,65多個視圖 54
4.4 實踐指南:邏輯架構與物理架構 55
4.4.1 邏輯架構 56
4.4.2 物理架構 57
4.4.3 從邏輯架構和物理架構到設計實現(xiàn) 58
4.5 設備調試系統(tǒng)案例:領會邏輯架構和物理架構 59
4.5.1 設備調試系統(tǒng)案例簡介 59
4.5.2 邏輯架構設計 59
4.5.3 物理架構設計 61
4.6 總結與強調 62
第5章 架構設計的5視圖法 63
5.1 架構設計的5視圖法 64
5.2 實踐中的5視圖方法 66
5.3 辦公室里的爭論:回顧與落實 67
5.4 案例:再談設備調試系統(tǒng) 67
5.4.1 根據需求決定引入哪些架構視圖 68
5.4.2 開發(fā)架構設計 68
5.4.3 運行架構設計 69
5.5 總結與強調 71
第6章 從概念性架構到實際架構 73
6.1 概念性架構 73
6.2 實際架構 77
6.3 從概念性架構到實際架構 78
6.4 網絡管理系統(tǒng)案例:從分層架構開始 78
6.4.1 構思:概念性架構設計 78
6.4.2 深入:實際架構設計 81
6.5 總結與強調 82
第7章 如何進行成功的架構設計 83
7.1 何謂成功的軟件架構設計 83
7.2 探究成功架構設計的關鍵要素 84
7.2.1 是否遺漏了至關重要的非功能需求 84
7.2.2 能否馴服數(shù)量巨大且頻繁變化的需求 86
7.2.3 能否從容設計軟件架構的不同方面 86
7.2.4 是否及早驗證架構方案并做出了調整 87
7.3 制定軟件架構設計策略 87
7.3.1 策略一:全面認識需求 88
7.3.2 策略二:關鍵需求決定架構 89
7.3.3 策略三:多視圖探尋架構 89
7.3.4 策略四:盡早驗證架構 90
7.4 總結與強調 90
第8章 軟件架構要設計到什么程度 93
8.1 軟件架構要設計到什么程度 94
8.1.1 分而治之的兩種方式 94
8.1.2 架構設計與詳細設計 96
8 .1.3 軟件架構是團隊開發(fā)的基礎 96
8.1.4 架構設計要進行到什么程度 98
8.2 高來高去式架構設計的癥狀 98
8.2.1 缺失重要架構視圖 99
8.2.2 淺嘗輒止. 不夠深入 100
8.2.3 名不副實的分層架構 101
8.3 如何克服高來高去癥 101
8.4 網絡管理系統(tǒng)案例:如何將架構設計落到實處 102
8.4.1 網管產品線的概念性架構 102
8.4.2 識別每一層中的功能模塊 102
8.4.3 明確各層之間的交互接口 103
8.4.4 明確各層之間的交互機制 104
8.4.5 案例小結 105
8.5 總結與強調 105
第9章 軟件架構設計過程 107
9.1 打造有效的架構設計過程 107
9.1.1 一般的軟件過程 107
9.1.2 架構師自己的架構設計過程 109
9.2 軟件架構設計過程解析 111
9.2.1 架構設計策略應成為一等公民 111
9.2.2 架構設計過程中的工作產品 112
9.3 總結與強調 114
第10章 需求分析 115
10.1 軟件需求基礎 116
10.1.1 什么是軟件需求 116
10.1.2 需求捕獲vs.需求分析vs.系統(tǒng)分析 116
10.1.3 需求捕獲及其工作成果 118
10.1.4 需求分析及其工作成果 118
10.1.5 系統(tǒng)分析及其工作成果 119
10.2 需求分析在軟件過程中所處的位置 120
10.2.1 概念化階段所做的工作 120
10.2.2 需求分析所處的位置 122
10.3 架構師必須掌握的需求知識 123
10.3.1 軟件需求的類型 123
10.3.2 各類需求對架構設計的不同影響 .. 127
10.3.3 超市系統(tǒng)案例:領會需求類型的不同影響 129
10.3.4 各類需求的“易變更性”不同 130
10.3.5 質量屬性需求與需求折衷 132
10.4 PM Tool實戰(zhàn):需求分析 135
10.4.1 上游活動:確定項目愿景 135
10.4.2 第1步:從業(yè)務目標到特性列表 135
10.4.3 第2步:從特性列表到用例圖 136
10.4.4 第3步:從用例圖到用例規(guī)約 138
10.4.5 需求啟發(fā)與需求驗證 139
10.4.6 最終成果:《軟件需求規(guī)格說明書》 140
10.5 總結與強調 141
第11章 專題:用例技術及應用 143
11.1 用例圖vs.用例簡述vs.用例規(guī)約vs.用例實現(xiàn) 143
11.2 儲蓄系統(tǒng)案例:需求變化對用例的影響 148
11.3 用例技術應用指南 150
11.4 用例與需求捕獲 152
11.5 用例與需求分析 153
11.6 用例與《軟件需求規(guī)格說明書》 154
11.7 總結與強調 155
第12章 領域建模 157
12.1 領域模型基礎知識 157
12.1.1 什么是領域模型 158
12.1.2 領域模型相關的UML圖 158
12.2 領域建模在軟件過程中所處的位置 159
12.2.1 領域建模的必要性:從需求分析的兩個典型困難說起 159
12.2.2 領域建模與需求分析的關系 161
12.2.3 領域建模所處的位置 162
12.3 領域模型對軟件架構的重要作用 163
12.3.1 配置管理工具案例:探索復雜問題. 固化領域知識 163
12.3.2 人事管理系統(tǒng)案例:決定功能范圍. 影響可擴展性 165
12.3.3 在線拍賣系統(tǒng)案例:提供交流基礎. 促進有效溝通 168
12.4 領域模型 vs. 文字說明 170
12.5 PM Tool實戰(zhàn):建立項目管理的領域模型 171
12.5.1 領域建模實錄(1) 171
12.5.2 領域建模實錄(2) 174
12.6 總結與強調 176
第13章 確定對軟件架構關鍵的需求 177
13.1 虛擬高峰論壇:窮兵黷武還是擇戰(zhàn)而斗 177
13.1.1 需求是任何促成設計決策的因素 178
13.1.2 很少有開發(fā)者能奢侈地擁有一個穩(wěn)定的需求集 178
13.1.3 關鍵性的第一步是縮小范圍 178
13.1.4 要擇戰(zhàn)而斗 178
13.1.5 功能. 質量和商業(yè)需求的某個集合塑造了構架 179
13.2 關鍵需求決定架構 179
13.2.1 實踐中的常見問題 179
13.2.2 關鍵需求決定架構 181
13.3 確定關鍵需求在軟件過程中所處的位置 182
13.3.1 對架構關鍵的需求vs.需求優(yōu)先級 182
13.3.2 關鍵需求對后續(xù)活動的影響 183
13.4 什么是對軟件架構關鍵的需求 184
13.4.1 關鍵的功能需求 184
13.4.2 關鍵的質量屬性需求 185
13.4.3 關鍵的商業(yè)需求 186
13.5 如何確定對軟件架構關鍵的需求 187
13.5.1 全面整理需求 188
13.5.2 分析約束性需求 188
13.5.3 確定關鍵功能需求 189
13.5.4 確定關鍵質量屬性需求 190
13.6 PM Tool實戰(zhàn):確定關鍵需求 190
13.7 總結與強調 191
第14章 概念性架構設計 193
14.1 概念性架構設計的步驟 194
14.2 魯棒性分析 195
14.2.1 分析和設計之間的鴻溝 195
14.2.2 魯棒圖簡介 196
14.2.3 從用例到魯棒圖 197
14.3 運用架構模式 198
14.3.1 架構模式簡介 198
14.3.2 架構模式的經典分類 199
14.3.3 架構模式的現(xiàn)代分類 200
14.3.4 分層 201
14.3.5 MVC 201
14.3.6 微內核 202
14.3.7 基于元模型的架構 203
14.3.8 管道—過濾器 204
14.4 PM Tool實戰(zhàn):概念性架構設計 204
14.4.1 進行魯棒性分析 204
14.4.2 引入架構模式 206
14.4.3 質量屬性分析 207
14.4.4 設計結果 207
14.5 總結與強調 208
第15章 質量屬性分析 209
15.1 質量屬性需求基礎 210
15.2 質量屬性分析的位置 211
15.3 利用“屬性—場景—決策”表設計架構決策 211
15.3.1 概述 211
15.3.2 “屬性—場景—決策”表方法 212
15.3.3 題外話:《需求文檔》如何定義質量屬性需求 214
15.4 PM Tool實戰(zhàn):可擴展性設計 214
15.5 總結與強調 215
第16章 細化架構設計 217
16.1 架構細化在軟件過程中所處的位置 218
16.1.1 我們走到哪了 218
16.1.2 運用基于5視圖方法進行架構細化 219
16.2 設計邏輯架構 220
16.2.1 概述 220
16.2.2 識別通用機制 220
16.3 設計開發(fā)架構 223
16.3.1 概述 223
16.3.2 分層和分區(qū) 223
16.4 設計數(shù)據架構 226
16.4.1 概述 226
16.4.2 如何將OO模型映射為數(shù)據模型 227
16.5 設計運行架構 229
16.5.1 概述 229
16.5.2 運用主動類規(guī)劃并發(fā) 230
16.5.3 應用協(xié)議的設計 234
16.6 設計物理架構 234
16.6.1 概述 234
16.7 注意滿足所有約束性軟件需求 235
16.8 PM Tool實戰(zhàn):細化架構設計 236
16.9 總結與強調 239
第17章 實現(xiàn)并驗證軟件架構 241
17.1 基礎知識 242
17.1.1 原型技術及分類 242
17.1.2 驗證架構的兩種方法 245
17.2 實現(xiàn)并驗證軟件架構的具體做法 245
17.3 總結與強調 247
第三部分 程序員成長篇 249
第18章 MIME編碼類案例: 從面向過程到面向對象 251
18.1 設計目標 251
18.2 MIME編碼基礎知識 252
18.3 MIME編碼類的設計過程 252
18.3.1 面向過程的設計方案 252
18.3.2 轉向面向對象設計 254
18.3.3 面向對象設計方案的確定 257
18.3.4 Template Method和Strategy模式的對比 260
第19章 突破OOP思維:繼承在OOD中的應用 261
19.1 從一則禪師語錄說起 261
19.1.1 見繼承是繼承——程序員境界 262
19.1.2 見繼承不是繼承——成長境界 262
19.1.3 見繼承只是繼承——設計師境界 262
19.2 從OOD層面認識繼承 262
19.3 針對接口編程——隔離變化 263
19.3.1 相關理論 263
19.3.2 針對接口編程舉例——用于架構設計 263
19.3.3 針對接口編程舉例——用于類設計 265
19.4 混入類——更好的重用性 266
19.4.1 相關理論 266
19.4.2 混入類舉例 266
19.5 基于角色的設計——使用角色組裝協(xié)作 267
19.5.1 相關理論 267
19.5.2 基于角色的設計舉例 268
第20章 細微見真章:耦合其實并不空洞 269
20.1 順序耦合性簡介 269
20.2 案例研究:順序耦合性Bug一例 269
20.2.1 項目簡介 270
20.2.2 新的需求 270
20.2.3 發(fā)現(xiàn)順序耦合性Bug 271
20.2.4 跟蹤調試 271
20.2.5 分析原因 273
20.2.6 解決策略 273
20.2.7 運用重構的“Extra t Method”成例 273
20.2.8 運用重構的“Hide Method”成例 274
20.2.9 運用重構的“Introdu e Parameter Obje t”成例 274
20.2.10 其他改進 274
第21章 敏捷設計:從理論到實踐 277
21.1 換個角度考察依賴 278
21.1.1 依賴的概念 278
21.1.2 從會不會造成“實際危害”的角度考察依賴 278
21.2 良性依賴原則 278
21.2.1 依賴是不可避免的 278
21.2.2 重要的是如何務實地應付變化 279
21.3 案例:需求改變引起良性依賴變成惡性依賴 279
21.4 案例:隔離第三方SDK可能造成的沖擊 281
21.5 案例:對具體類的良性依賴 283
21.6 總結:如何處理好依賴關系 285
第22章 基于角色的設計:從理論到實踐 287
22.1 基于角色的設計理論 288
22.2 基于角色的設計與團隊開發(fā) 288
22.3 基于角色的設計實踐 289
22.4 基于角色的設計案例 291
22.4.1 項目簡介 291
22.4.2 通過基于角色的設計組織子系統(tǒng)之間的協(xié)作 291
22.4.3 通過基于角色的設計組織同一子系統(tǒng)內不同模塊之間的協(xié)作 292
22.5 基于角色的設計與面向對象分析 293
第23章 超越設計模式:理解和運用更多模式 295
23.1 關于模式的兩個問題 295
23.2 模式的正交分類法 296
23.2.1 正交思維 296
23.2.2 正交思維用于模式分類 297
23.3 專攻性能:性能模式簡介 299
23.4 模型驅動開發(fā)的方方面面:MDD模式簡介 301
23.5 總結:擁抱模式 302
第24章 如此輕松:立足圖論學UML 303
24.1 管窺UML中的OO思想 304
24.1.1 一道筆試題的故事 304
24.1.2 UML背后的思想 305
24.2 圖的定義與UML應用 306
24.2.1 圖的定義 306
24.2.2 圖的定義的UML應用——UML的圖論觀點 307
24.2.3 圖的定義的UML應用——關聯(lián)類語法的理解 308
24.2.4 圖的定義的UML應用——說說序列圖 309
24.3 有向邊與UML應用 310
24.3.1 有向邊 310
24.3.2 有向邊的UML應用——依賴關系 310
24.3.3 有向邊的UML應用——泛化. 實現(xiàn)和關聯(lián)的依賴思想 312
24.3.4 有向邊的UML應用——一個例子 312
24.4 著色頂點與UML應用 313
24.4.1 著色頂點 313
24.4.2 著色頂點的UML應用——通過顏色為圖元分類 314
24.4.3 著色頂點的UML應用——UML彩色建模方法介紹 315
24.5 著色邊與UML應用 317
24.6 圖的同構與UML應用 317
24.6.1 圖的同構 317
24.6.2 圖的同構的UML應用——UML風格 318
第25章 理解軟件過程:解析RUP核心概念 321
25.1 架構師必須了解軟件過程 321
25.1.1 架構師的工作職責 321
25.1.2 架構師必須了解軟件過程 322
25.2 RUP實踐中的常見問題 322
25.3 RUP核心概念解析 323
25.3.1 一圖勝千言 323
25.3.2 角色執(zhí)行活動,357活動生產工件 323
25.3.3 階段和迭代:提供不同級別的決策時機 324
25.3.4 配置和變更管理支持迭代式的基于基線的開發(fā) 326
25.3.5 發(fā)布是什么,360發(fā)布不是什么 327
第26章 海闊憑魚躍:通盤理解軟件工程 329
26.1 什么是軟件工程概念模型 329
26.2 一個精簡的軟件工程概念模型 329
26.3 一個細化的軟件工程概念模型 330
26.3.1 模型概述 331
26.3.2 方法論 331
26.3.3 過程 331
26.3.4 目標 332
26.3.5 項目 332
26.3.6 其他 333
26.4 軟件工程概念模型的具體應用 333
26.4.1 搞清楚Agile是過程還是方法論 333
26.4.2 為CMM定位 334
26.4.3 理解RUP定制 335
26.5 總結:軟件工程概念模型的啟示 335
26.5.1 軟件工程,376一門實踐的科學 335
26.5.2 軟件過程,377合適的才是最好的 336
26.5.3 對個人的啟示 336
26.5.4 呼喚高層次人才 336
參考文獻 337