《軟體架構》是一部由李必信 / 廖力等所著書籍, 機械工業出版社出版發行。
基本介紹
出版信息
內容簡介
目錄
教學建議
上篇 基礎理論篇
第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.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