前言
教學建議
上篇 基礎理論篇
第1章 軟件架構概述 …… 2
1.1 軟件架構産生的背景 …… 2
1.2 軟件架構的主要思想和特徵 …… 3
1.2.1 軟件架構的主要思想 …… 3
1.2.2 軟件架構的特徵 …… 3
1.3 軟件架構的發展階段 …… 4
1.3.1 基礎研究階段(1968—1994) …… 4
1.3.2 概念體係和核心技術形成階段(1991—2000) …… 6
1.3.3 理論體係完善與發展階段(1996年至今) …… 7
1.3.4 普及應用階段(1999年至今) …… 7
1.4 軟件架構研究和應用現狀 …… 7
1.4.1 軟件架構理論和方法研究 …… 8
1.4.2 軟件架構的應用研究 …… 11
1.5 本章小結 …… 13
思考題 …… 13
參考文獻 …… 14
第2章 軟件架構的概念 …… 17
2.1 引言 …… 17
2.2 組成派的主要定義 …… 18
2.3 決策派的主要定義 …… 19
2.4 其他定義 …… 20
2.5 參考定義框架 …… 20
2.6 本章小結 …… 21
思考題 …… 22
參考文獻 …… 22
第3章 軟件架構模型 …… 23
3.1 引言 …… 23
3.2 軟件架構的可視化建模方法 …… 24
3.2.1 基於圖形可視化的建模方法 …… 24
3.2.2 基於UML的建模方法 …… 25
3.3 軟件架構的形式化建模方法 …… 31
3.3.1 基於形式化規格說明語言的建模方法 …… 32
3.3.2 基於UML的形式化建模方法 …… 36
3.4 其他建模方法 …… 45
3.4.1 文本語言建模方法 …… 45
3.4.2 模型驅動的架構建模方法 …… 47
3.5 軟件架構建模方法的發展趨勢分析 …… 49
3.5.1 第1層:文本模型 …… 50
3.5.2 第2層:圖形可視化模型 …… 50
3.5.3 第3層:UML模型 …… 50
3.5.4 第4層:形式化模型 …… 51
3.5.5 第5層:未來模型 …… 52
3.6 本章小結 …… 52
思考題 …… 53
參考文獻 …… 53
第4章 軟件架構的風格與模式 …… 59
4.1 軟件架構風格的定義 …… 59
4.2 軟件架構風格的分類 …… 60
4.3 典型的軟件架構風格 …… 60
4.3.1 管道-過濾器風格 …… 60
4.3.2 主程序/子程序風格 …… 62
4.3.3 麵嚮對象風格 …… 64
4.3.4 層次化風格 …… 65
4.3.5 事件驅動風格 …… 67
4.3.6 解釋器風格 …… 69
4.3.7 基於規則的係統風格 …… 71
4.3.8 倉庫風格 …… 73
4.3.9 黑闆係統風格 …… 75
4.3.10 C2風格 …… 77
4.3.11 客戶機/服務器風格 …… 79
4.3.12 瀏覽器/服務器風格 …… 83
4.3.13 平颱/插件風格 …… 85
4.3.14 麵嚮Agent風格 …… 87
4.3.15 麵嚮方麵架構風格 …… 91
4.3.16 麵嚮服務架構風格 …… 93
4.3.17 正交架構風格 …… 95
4.3.18 異構風格 …… 97
4.3.19 基於層次消息總綫的架構風格 …… 99
4.3.20 模型-視圖-控製器風格 …… 101
4.4 軟件架構模式 …… 103
4.5 本章小結 …… 103
思考題 …… 104
參考文獻 …… 104
第5章 軟件架構描述語言 …… 107
5.1 引言 …… 107
5.2 ADL的核心設計元素 …… 107
5.2.1 組件 …… 108
5.2.2 連接件 …… 108
5.2.3 架構配置 …… 109
5.3 幾種典型的ADL …… 109
5.3.1 Aesop …… 109
5.3.2 C2 SADL …… 110
5.3.3 UniCon …… 114
5.3.4 Wright …… 116
5.3.5 XYZ/ADL …… 117
5.3.6 ACME …… 118
5.3.7 XBA …… 118
5.3.8 ABC/ADL …… 120
5.3.9 MetaH …… 121
5.3.10 Rapide …… 121
5.3.11 Darwin …… 122
5.3.12 xADL 2.0 …… 122
5.4 本章小結 …… 123
思考題 …… 123
參考文獻 …… 123
第6章 軟件架構與敏捷開發 …… 125
6.1 軟件開發的發展簡史 …… 125
6.2 敏捷開發 …… 127
6.2.1 敏捷開發的基本理念 …… 127
6.2.2 敏捷開發實踐 …… 128
6.3 敏捷開發過程中的軟件架構設計 …… 130
6.3.1 需求分析 …… 130
6.3.2 初始設計 …… 130
6.3.3 迭代過程 …… 130
6.3.4 敏捷的設計思想 …… 131
6.4 兩類常見的敏捷軟件架構設計方法 …… 132
6.4.1 敏捷開發初始階段設計 …… 133
6.4.2 敏捷開發迭代過程中的設計 …… 134
6.5 本章小結 …… 136
思考題 …… 137
參考文獻 …… 137
中篇 工程實踐篇
第7章 架構驅動的軟件開發 …… 140
7.1 架構驅動的軟件開發簡介 …… 140
7.2 架構需求獲取 …… 140
7.3 架構設計、文檔化和評估 …… 144
7.3.1 架構設計、文檔化和評估是一個迭代過程 …… 144
7.3.2 什麼是架構的結構 …… 147
7.3.3 從架構需求齣發的評估 …… 148
7.3.4 尋找ATAM中的“權衡點”和“敏感點” …… 149
7.4 架構的實現與維護 …… 151
7.4.1 架構的實現 …… 151
7.4.2 架構的維護 …… 152
7.5 本章小結 …… 152
思考題 …… 152
參考文獻 …… 153
第8章 軟件架構設計和實現 …… 154
8.1 從需求分析到架構設計 …… 154
8.1.1 軟件架構對需求的影響 …… 155
8.1.2 基於軟件需求的軟件架構設計 …… 156
8.1.3 需求與架構的協同演化 …… 163
8.2 從軟件架構到詳細設計 …… 163
8.2.1 詳細設計對軟件架構的影響 …… 164
8.2.2 從軟件架構映射到詳細設計 …… 166
8.2.3 軟件架構視圖 …… 168
8.3 軟件架構設計原則 …… 169
8.3.1 架構設計的一些基本原則 …… 169
8.3.2 架構設計的關鍵原則 …… 170
8.4 軟件架構設計麵臨的主要威脅及對策 …… 171
8.4.1 被忽略的重要非功能需求 …… 171
8.4.2 頻繁變化的需求 …… 172
8.4.3 考慮不全麵的架構設計 …… 172
8.4.4 不及時的架構驗證 …… 173
8.4.5 較高的創造性架構比重 …… 173
8.4.6 架構的低可執行性 …… 174
8.5 本章小結 …… 174
思考題 …… 174
參考文獻 …… 174
第9章 軟件架構的演化和維護 …… 178
9.1 軟件架構演化和軟件架構定義的關係 …… 179
9.1.1 對象演化 …… 179
9.1.2 消息演化 …… 180
9.1.3 復閤片段演化 …… 184
9.1.4 約束演化 …… 186
9.2 軟件架構演化方式的分類 …… 186
9.2.1 軟件架構靜態演化 …… 187
9.2.2 軟件架構動態演化 …… 190
9.3 軟件架構演化原則 …… 197
9.4 軟件架構維護 …… 201
9.4.1 軟件架構知識管理 …… 201
9.4.2 軟件架構修改管理 …… 202
9.4.3 軟件架構版本管理 …… 202
9.5 本章小結 …… 202
思考題 …… 203
參考文獻 …… 203
第10章 軟件架構恢復 …… 207
10.1 引言 …… 207
10.1.1 軟件架構的恢復過程 …… 208
10.1.2 架構信息提取 …… 208
10.1.3 架構恢復技術 …… 209
10.2 架構信息提取 …… 212
10.2.1 相關定義 …… 212
10.2.2 從源代碼提取架構信息 …… 212
10.2.3 從編譯構建過程提取架構信息 …… 215
10.2.4 從目錄層次提取架構信息 …… 217
10.2.5 基於架構文檔的架構信息提取 …… 219
10.3 基於多規則聚類的架構恢復 …… 220
10.3.1 聚類理論基礎 …… 220
10.3.2 架構恢復流程 …… 222
10.3.3 具體恢復技術 …… 223
10.4 本章小結 …… 232
思考題 …… 233
參考文獻 …… 233
第11章 軟件架構質量 …… 237
11.1 引言 …… 237
11.2 軟件架構與質量屬性 …… 239
11.3 軟件架構質量指標 …… 240
11.3.1 內部質量指標 …… 240
11.3.2 外部質量指標 …… 243
11.4 軟件架構質量保障和評估方法 …… 245
11.4.1 評估準備 …… 246
11.4.2 利益相關者 …… 247
11.4.3 參與者 …… 248
11.4.4 評估時機 …… 249
11.4.5 評估技術 …… 250
11.4.6 軟件架構評估的收益與成本 …… 253
11.5 本章小結 …… 254
思考題 …… 254
參考文獻 …… 254
第12章 軟件架構仿真 …… 256
12.1 軟件仿真的概念 …… 256
12.1.1 連續型仿真 …… 256
12.1.2 離散型仿真 …… 257
12.1.3 混閤型仿真 …… 257
12.2 軟件架構仿真流程 …… 258
12.3 UML軟件架構仿真 …… 259
12.3.1 基於UML類圖和順序圖的軟件架構仿真 …… 259
12.3.2 基於UML用例圖和活動圖的軟件架構仿真 …… 259
12.3.3 從帶有注釋的UML圖産生OPNET仿真模型 …… 260
12.4 非UML軟件架構仿真 …… 261
12.4.1 SASIM仿真:用於係統功能分析 …… 261
12.4.2 麵嚮對象數據庫的架構仿真 …… 263
12.5 軟件架構仿真實踐 …… 264
12.5.1 軟件架構描述文檔 …… 264
12.5.2 SSD和SD轉化為事件執行圖 …… 266
12.5.3 局部仿真和整體仿真 …… 269
12.5.4 仿真結果的分析 …… 275
12.6 本章小結 …… 276
思考題 …… 276
參考文獻 …… 277
第13章 軟件架構度量和評估 …… 279
13.1 引言 …… 279
13.1.1 單版本的軟件架構度量和評估 …… 280
13.1.2 多版本的軟件架構度量和評估 …… 281
13.2 典型的軟件架構度量和評估方法 …… 283
13.2.1 SAEM方法 …… 283
13.2.2 SAABNet方法 …… 283
13.2.3 SACMM方法 …… 285
13.2.4 SASAM方法 …… 287
13.2.5 ALRRA方法 …… 288
13.2.6 AHP方法 …… 290
13.2.7 COSMIC+UML方法 …… 291
13.2.8 基於Shannon信息論的方法 …… 292
13.3 軟件架構度量和評估過程 …… 293
13.3.1 質量屬性選擇 …… 293
13.3.2 軟件架構可維護性度量及評估 …… 294
13.3.3 軟件架構可靠性度量及評估 …… 297
13.4 軟件架構演化度量和評估實踐 …… 302
13.4.1 演化過程已知的軟件架構演化評估 …… 302
13.4.2 演化過程未知的軟件架構演化評估 …… 305
13.4.3 實例分析 …… 305
13.5 本章小結 …… 313
思考題 …… 313
參考文獻 …… 313
第14章 軟件架構形式化驗證 …… 317
14.1 引言 …… 317
14.2 形式化驗證 …… 317
14.2.1 形式語義 …… 318
14.2.2 規約語言 …… 318
14.2.3 求精分析 …… 319
14.2.4 驗證方法 …… 320
14.2.5 形式化驗證方法的優缺點 …… 320
14.3 軟件架構驗證 …… 322
14.3.1 靜態軟件架構驗證 …… 322
14.3.2 動態軟件架構驗證 …… 323
14.3.3 運行態軟件架構驗證 …… 323
14.4 基於SPIN的靜態軟件架構驗證實踐 …… 324
14.4.1 SPIN簡介 …… 324
14.4.2 基於SPIN的驗證過程 …… 325
14.4.3 架構模型 …… 326
14.4.4 驗證模型 …… 332
14.4.5 驗證結果 …… 334
14.5 架構演化驗證案例分析——以MVC為例 …… 335
14.5.1 演化案例 …… 335
14.5.2 場景1演化評估 …… 337
14.5.3 場景2演化評估 …… 341
14.6 本章小結 …… 344
思考題 …… 345
參考文獻 …… 345
第15章 軟件架構分析與測試 …… 347
15.1 引言 …… 347
15.2 軟件架構分析方法 …… 347
15.2.1 SAAM …… 348
15.2.2 SAAMCS …… 350
15.2.3 ESAAMI …… 351
15.2.4 SAAMER …… 352
15.2.5 ATAM …… 352
15.2.6 QAW …… 356
15.2.7 OATAM …… 358
15.2.8 ARID …… 358
15.2.9 SBAR …… 361
15.2.10 ALPSM …… 362
15.2.11 SNA …… 362
15.2.12 ALMA …… 363
15.2.13 PSAEM …… 364
15.2.14 ASAAM …… 365
15.2.15 PASA …… 365
15.2.16 SALUTA …… 367
15.2.17 HoPLAA …… 368
15.2.18 CBAM …… 370
15.2.19 CPASA …… 370
15.3 軟件架構測試 …… 371
15.4 本章小結 …… 371
思考題 …… 372
參考文獻 …… 372
第16章 軟件架構重構 …… 375
16.1 引言 …… 375
16.2 軟件重構現狀 …… 376
16.2.1 軟件重構概念 …… 376
16.2.2 重構點識彆和定位方法 …… 376
16.2.3 重構實施技術 …… 379
16.2.4 現狀分析 …… 380
16.3 基於度量的軟件架構重構 …… 381
16.3.1 軟件架構度量評估 …… 382
16.3.2 産生重構需求 …… 385
16.3.3 分析重構需求 …… 385
16.3.4 建議重構操作 …… 387
16.3.5 實施重構操作 …… 389
16.4 麵嚮模式的軟件架構重構 …… 392
16.4.1 模式選擇 …… 392
16.4.2 重構點定位 …… 393
16.4.3 重構實施 …… 394
16.5 本章小結 …… 397
思考題 …… 398
參考文獻 …… 398
下篇 未來主題篇
第17章 軟件架構的腐蝕和對策 …… 402
17.1 引言 …… 402
17.2 軟件架構腐蝕的含義 …… 403
17.3 軟件架構腐蝕的預防控製策略 …… 403
17.3.1 腐蝕最小化方法 …… 403
17.3.2 腐蝕預防方法 …… 406
17.3.3 腐蝕修補方法 …… 407
17.4 軟件架構實踐中麵臨的主要威脅及其對策 …… 408
17.4.1 主要威脅 …… 408
17.4.2 有效對策 …… 409
17.5 本章小結 …… 409
思考題 …… 409
參考文獻 …… 409
第18章 軟件架構解耦 …… 412
18.1 引言 …… 412
18.2 分層架構及其解耦 …… 413
18.2.1 模式描述 …… 413
18.2.2 架構解耦 …… 413
18.2.3 實例分析 …… 414
18.3 微內核架構及其解耦 …… 414
18.3.1 模式描述與解耦 …… 415
18.3.2 實例分析 …… 415
18.4 微服務架構及其解耦 …… 416
18.4.1 模式描述與解耦 …… 416
18.4.2 設計原則 …… 417
18.4.3 實例分析 …… 417
18.5 黑闆架構風格及其解耦 …… 418
18.6 乾淨架構及其解耦 …… 419
18.6.1 模式描述 …… 419
18.6.2 架構解耦 …… 421
18.7 管道-過濾器風格及其解耦 …… 421
18.7.1 模式描述與解耦 …… 421
18.7.2 實例分析 …… 422
18.8 基於元模型的架構及其解耦 …… 422
18.9 REST架構風格及其解耦 …… 422
18.10 本章小結 …… 424
思考題 …… 424
參考文獻 …… 424
第19章 軟件架構技術債 …… 426
19.1 引言 …… 426
19.2 技術債簡介 …… 426
19.2.1 技術債的定義 …… 426
19.2.2 技術債的分類 …… 427
19.2.3 技術債的産生 …… 428
19.3 設計債 …… 429
19.3.1 設計債的定義 …… 429
19.3.2 設計債的識彆方法 …… 429
19.3.3 架構技術債 …… 430
19.4 代碼債 …… 432
19.5 測試債 …… 432
19.6 文檔債 …… 433
19.7 技術債的處理 …… 433
19.7.1 發現技術債 …… 433
19.7.2 管理技術債 …… 433
19.7.3 償還技術債 …… 435
19.8 本章小結 …… 435
思考題 …… 435
參考文獻 …… 436
第20章 軟件架構壞味道 …… 438
20.1 引言 …… 438
20.2 典型的代碼壞味道 …… 439
20.2.1 應用級壞味道 …… 439
20.2.2 類級壞味道 …… 440
20.2.3 方法級壞味道 …… 441
20.3 典型的設計壞味道 …… 442
20.3.1 架構壞味道 …… 442
20.3.2 架構壞味道的檢測 …… 447
20.4 本章小結 …… 450
思考題 …… 451
參考文獻 …… 451
第21章 軟件架構脆弱性 …… 453
21.1 引言 …… 453
21.2 什麼是軟件脆弱性 …… 453
21.2.1 軟件脆弱性定義 …… 453
21.2.2 軟件脆弱性的特點和産生的原因 …… 454
21.2.3 軟件脆弱性的生命周期 …… 455
21.3 典型的軟件架構脆弱性 …… 455
21.3.1 分層架構 …… 456
21.3.2 C/S架構 …… 457
21.3.3 B/S架構 …… 457
21.3.4 事件驅動架構 …… 458
21.3.5 MVC架構 …… 460
21.3.6 微內核架構 …… 461
21.3.7 管道-過濾器架構 …… 461
21.3.8 黑闆模式架構 …… 462
21.3.9 微服務架構 …… 462
21.3.10 基於空間的架構 …… 463
21.3.11 PAC架構 …… 464
21.4 本章小結 …… 465
思考題 …… 466
參考文獻 …… 466
第22章 軟件架構模式識彆 …… 468
22.1 引言 …… 468
22.2 模式識彆方法現狀 …… 468
22.2.1 設計模式識彆現狀 …… 468
22.2.2 架構模式識彆現狀 …… 469
22.3 兩種典型的架構模式識彆方法 …… 470
22.3.1 IDAPO方法 …… 470
22.3.2 基於DSL的架構模式識彆方法 …… 472
22.4 基於本體的架構模式識彆方法 …… 473
22.4.1 可行性分析 …… 473
22.4.2 識彆過程 …… 474
22.4.3 典型步驟 …… 475
22.5 本章小結 …… 481
思考題 …… 481
參考文獻 …… 481
第23章 結束語 …… 484
23.1 軟件架構是早期階段質量保障的基礎 …… 484
23.2 軟件架構的作用 …… 485
23.2.1 好的架構設計能夠滿足係統的多種品質 …… 485
23.2.2 架構設計能夠使利益相關者達成一緻的目標 …… 485
23.2.3 架構設計能夠支持計劃編製過程 …… 485
23.2.4 架構設計能夠有效地管理復雜性 …… 486
23.2.5 架構設計為重用奠定瞭基礎 …… 486
23.2.6 架構設計能夠降低維護費用 …… 487
23.2.7 架構設計能夠支持衝突分析 …… 487
23.2.8 架構設計的其他作用 …… 487
23.3 軟件架構發展趨勢 …… 487
思考題 …… 489
參考文獻 …… 489
· · · · · · (
收起)