軟件設(shè)計與體系結(jié)構(gòu)從CDIO工程理念出發(fā),圍繞構(gòu)思(Conceive)、設(shè)計(Design)、實現(xiàn)(Implement)、運作(Operate)四個方面展開闡述,以一種嶄新的視角展現(xiàn)軟件設(shè)計和體系結(jié)構(gòu)的內(nèi)容,盡可能做到覆蓋面廣和內(nèi)容新穎,在保持經(jīng)典內(nèi)容的基礎(chǔ)上,力求提供來自業(yè)界最新的內(nèi)容和進展。構(gòu)思(C)給出一個軟件要做什么的總體思路;設(shè)計(D)給出一個軟件怎么做的方法和手段;實現(xiàn)(I)給出一個軟件實際做出來的實現(xiàn)技術(shù)和路線;運作(O)給出一個軟件如何成功運作的模式和方法。CDIO各個部分相對獨立但又互有聯(lián)系,能夠讓讀者以全面的、主動的和實用的方式學(xué)習(xí)和掌握相關(guān)內(nèi)容,并著重強調(diào)工程實踐訓(xùn)練和綜合能力培養(yǎng)。軟件設(shè)計與體系結(jié)構(gòu)可作為計算機相關(guān)專業(yè)本科生和研究生的教材,同時也是軟件工程領(lǐng)域?qū)I(yè)人員的優(yōu)秀參考讀物。
更多科學(xué)出版社服務(wù),請掃碼獲取。
目錄
第一篇 構(gòu)思篇 (Conceive)
第1章 軟件環(huán)境 2
1.1 軟件與軟件分類 2
1.1.1 軟件的特點 2
1.1.2 軟件的分類 3
1.2 程序設(shè)計語言與開發(fā)環(huán)境 4
1.2.1 程序設(shè)計語言 4
1.2.2 開發(fā)環(huán)境 5
1.3 數(shù)據(jù)庫環(huán)境 6
1.3.1 關(guān)系數(shù)據(jù)庫 6
1.3.2 面向?qū)ο髷?shù)據(jù)庫 11
1.3.3 非結(jié)構(gòu)化數(shù)據(jù)庫 13
1.4 平臺環(huán)境 14
1.4.1 集成平臺 14
1.4.2 虛擬化平臺 15
1.4.3 云平臺 18
1.5 軟件工程環(huán)境 23
1.5.1 軟件過程模型 23
1.5.2 軟件工程經(jīng)濟學(xué) 30
1.5.3 軟件過程管理 31
1.5.4 軟件維護及演化 44
1.6 習(xí)題與思考題 56
第2章 軟件需求 58
2.1 軟件需求與需求工程概述 58
2.1.1 需求的定義 58
2.1.2 需求工程概述 59
2.2 需求獲取 60
2.2.1 引言 60
2.2.2 需求獲取的實質(zhì) 60
2.2.3 常用方法 61
2.3 需求建模與分析 62
2.3.1 面向?qū)ο蠼?62
2.3.2 過程建模 67
2.3.3 數(shù)據(jù)建模 74
2.4 需求規(guī)約與驗證 76
2.4.1 需求規(guī)約 76
2.4.2 需求驗證 78
2.5 需求管理 78
2.6 習(xí)題與思考題 79
第3章 軟件體系結(jié)構(gòu) 81
3.1 “4+1”視圖模型 81
3.1.1 邏輯視圖 81
3.1.2 開發(fā)視圖 82
3.1.3 進程視圖 82
3.1.4 物理視圖 83
3.1.5 場景 83
3.2 軟件體系結(jié)構(gòu)的定義 83
3.3 軟件體系結(jié)構(gòu)的核心模型 85
3.4 軟件體系結(jié)構(gòu)描述方法 85
3.5 軟件體系結(jié)構(gòu)描述語言(ADL) 86
3.6 軟件體系結(jié)構(gòu)設(shè)計原則 87
3.7 基于體系結(jié)構(gòu)的軟件開發(fā)過程 89
3.8 軟件體系結(jié)構(gòu)的風(fēng)格 90
3.8.1 管道-過濾器風(fēng)格 90
3.8.2 分層風(fēng)格 91
3.8.3 客戶/服務(wù)器風(fēng)格 92
3.8.4 瀏覽器/服務(wù)器風(fēng)格 93
3.8.5 事件驅(qū)動風(fēng)格 94
3.9 體系結(jié)構(gòu)模式 95
3.9.1 從混沌到結(jié)構(gòu) 95
3.9.2 分布式系統(tǒng) 104
3.9.3 交互系統(tǒng) 107
3.9.4 適應(yīng)性系統(tǒng) 109
3.10 習(xí)題與思考題 112
第二篇 設(shè)計篇 (Design)
第4章 軟件設(shè)計 114
4.1 設(shè)計目標及要素 115
4.2 設(shè)計原則 115
4.2.1 抽象化 116
4.2.2 模塊化 117
4.2.3 信息隱藏 118
4.2.4 模塊的功能獨立性 118
4.2.5 降低模塊間耦合度的方法 122
4.3 設(shè)計規(guī)約 122
4.4 設(shè)計方法 123
4.4.1 結(jié)構(gòu)化設(shè)計方法 123
4.4.2 面向?qū)ο蟮脑O(shè)計 133
4.5 習(xí)題與思考題 141
第5章 統(tǒng)一建模語言UML 142
5.1 UML核心概念 142
5.1.1 元素 142
5.1.2 具名元素 143
5.1.3 命名空間 143
5.1.4 可打包元素 143
5.1.5 可重定義元素 144
5.1.6 分類器 144
5.1.7 特性 144
5.1.8 注解 144
5.1.9 關(guān)系 145
5.2 UML關(guān)鍵字與版型 148
5.2.1 關(guān)鍵字 148
5.2.2 版型 149
5.3 UML圖示 151
5.3.1 類圖 152
5.3.2 對象圖 153
5.3.3 包圖 154
5.3.4 組件圖 156
5.3.5 合成結(jié)構(gòu)圖 157
5.3.6 部署圖 159
5.3.7 用例圖 160
5.3.8 活動圖 164
5.3.9 狀態(tài)機圖 173
5.3.10 交互圖 176
5.3.11 順序圖 177
5.3.12 通信圖 180
5.3.13 計時圖 180
5.4 習(xí)題與思考題 182
第6章 設(shè)計模式 183
6.1 模式思維方法 183
6.1.1 模式的概念 183
6.1.2 模式的重要性 184
6.1.3 軟件設(shè)計模式的分類 184
6.1.4 模式描述模板 185
6.1.5 模式思維的步驟 187
6.2 設(shè)計模式概述 188
6.2.1 創(chuàng)建型模式 189
6.2.2 結(jié)構(gòu)型模式 195
6.2.3 行為型模式 199
6.3 習(xí)題與思考題 203
第7章 軟件復(fù)用 204
7.1 概述 204
7.1.1 概念 204
7.1.2 軟件復(fù)用的發(fā)展 206
7.1.3 可復(fù)用的軟件制品 207
7.1.4 軟件復(fù)用的分類 208
7.1.5 軟件復(fù)用的困難與建議 208
7.1.6 軟件復(fù)用的宗旨 210
7.2 分析復(fù)用 210
7.2.1 分析過程復(fù)用 210
7.2.2 分析制品復(fù)用 211
7.3 設(shè)計復(fù)用 212
7.3.1 設(shè)計過程復(fù)用 212
7.3.2 基于構(gòu)件的設(shè)計復(fù)用 213
7.4 代碼復(fù)用 215
7.5 測試復(fù)用 219
7.5.1 面向復(fù)用的測試用例設(shè)計過程 219
7.5.2 復(fù)用測試用例描述要素 220
7.6 習(xí)題與思考題 221
第8章 軟件界面設(shè)計 223
8.1 軟件界面設(shè)計概述 223
8.1.1 軟件界面分析 223
8.1.2 軟件界面開發(fā)過程 226
8.1.3 軟件界面設(shè)計基本原則 228
8.2 人機界面基礎(chǔ)知識 230
8.2.1 認知心理學(xué) 230
8.2.2 軟件人機工程學(xué) 230
8.2.3 藝術(shù)設(shè)計 231
8.3 界面的定量分析 231
8.3.1 GOMS擊鍵層模型 231
8.3.2 界面效率的測量 232
8.3.3 Fitts律和Hick律 234
8.4 人本界面 235
8.4.1 認知和關(guān)注點 235
8.4.2 界面模式與單調(diào)性 236
8.4.3 統(tǒng)一性和元動作 239
8.4.4 易用性和幫助機制 240
8.5 移動設(shè)備界面設(shè)計 241
8.6 習(xí)題與思考題 242
第三篇 實現(xiàn)篇 (Implement)
第9章 Web開發(fā)技術(shù) 244
9.1 Web開發(fā)概述 244
9.1.1 運作原理及概念 244
9.1.2 開發(fā)語言及技術(shù)概述 247
9.1.3 Web應(yīng)用的特點 249
9.2 Web服務(wù)器 249
9.2.1 Microsoft IIS 250
9.2.2 Apache 250
9.2.3 Tomcat 251
9.2.4 J2EE服務(wù)器 251
9.2.5 Nginx 252
9.3 服務(wù)器端開發(fā)技術(shù)及框架 253
9.3.1 Java技術(shù) 253
9.3.2 .Net技術(shù) 255
9.3.3 PHP技術(shù) 260
9.3.4 Ruby技術(shù) 261
9.3.5 MVC框架 262
9.3.6 Spring框架 263
9.4 Web前端開發(fā)技術(shù) 267
9.4.1 HTML 267
9.4.2 CSS層疊樣式表 270
9.4.3 JavaScript技術(shù) 272
9.4.4 AJAX技術(shù) 274
9.4.5 Silverlight技術(shù) 276
9.5 習(xí)題與思考題 278
第10章 數(shù)據(jù)庫開發(fā)技術(shù) 279
10.1 SQL語言 279
10.2 數(shù)據(jù)庫和表 279
10.2.1 創(chuàng)建及刪除數(shù)據(jù)庫 279
10.2.2 創(chuàng)建表 280
10.2.3 修改表 280
10.2.4 刪除表 281
10.3 索引 281
10.3.1 創(chuàng)建索引 281
10.3.2 刪除索引 282
10.4 查詢 282
10.4.1 SELECT語句 282
10.4.2 多表査詢 284
10.4.3 子查詢 286
10.4.4 集合運算 287
10.4.5 聚集函數(shù) 288
10.5 數(shù)據(jù)維護 289
10.5.1 插入 289
10.5.2 更新 290
10.5.3 刪除 290
10.6 視圖 291
10.6.1 創(chuàng)建視圖 291
10.6.2 刪除視圖 292
10.7 游標 292
10.7.1 聲明游標 292
10.7.2 打開和關(guān)閉游標 293
10.7.3 刪除游標 293
10.7.4 應(yīng)用游標 293
10.8 存儲過程 294
10.8.1 存儲過程創(chuàng)建與修改 294
10.8.2 執(zhí)行存儲過程 296
10.8.3 刪除存儲過程 296
10.9 觸發(fā)器 296
10.9.1 創(chuàng)建觸發(fā)器 297
10.9.2 刪除觸發(fā)器 298
10.10 習(xí)題與思考題 298
第11章 軟件成本估算技術(shù) 299
11.1 軟件成本估算的步驟 299
11.1.1 建立目標 299
11.1.2 計劃所需的數(shù)據(jù)與資源 301
11.1.3 準確說明軟件需求 303
11.1.4 盡可能詳細地做出估算 303
11.1.5 采用多個獨立的方法與資源 308
11.1.6 比較與迭代估算 308
11.1.7 跟蹤與變更 309
11.2 軟件成本估算的方法 310
11.2.1 算法模型 310
11.2.2 專家判斷 311
11.2.3 通過推理來進行估算 312
11.2.4 帕金森估算 312
11.2.5 價格策略估算 312
11.2.6 自頂向下估算 313
11.2.7 自底向上估算 313
11.2.8 各方法的總結(jié)比較 314
11.3 基本COCOMO模型軟件成本估算 315
11.3.1 模型定義與假設(shè) 315
11.3.2 軟件開發(fā)模式分類 316
11.3.3 組織型基本COCOMO模型 317
11.3.4 其他模式COCOMO模型 319
11.4 習(xí)題與思考題 320
第12章 軟件架構(gòu)技術(shù) 321
12.1 構(gòu)件技術(shù) 321
12.1.1 軟件構(gòu)件技術(shù)基礎(chǔ) 321
12.1.2 基于構(gòu)件的軟件工程 323
12.2 軟件架構(gòu)綜述 325
12.2.1 企業(yè)架構(gòu) 325
12.2.2 業(yè)務(wù)架構(gòu) 327
12.2.3 應(yīng)用架構(gòu) 329
12.2.4 信息架構(gòu) 330
12.3 中間件 331
12.3.1 中間件的目標及地位 331
12.3.2 中間件的基本類型 332
12.3.3 常見中間件技術(shù)介紹 333
12.4 習(xí)題與思考題 343
第13章 軟件集成技術(shù) 344
13.1 軟件合成與軟件集成 344
13.2 軟件集成模式 345
13.2.1 集成適配器模式 345
13.2.2 集成消息器模式 346
13.2.3 集成正面模式 346
13.2.4 集成媒介器模式 347
13.3 企業(yè)應(yīng)用集成 347
13.3.1 EAI的產(chǎn)生和意義 347
13.3.2 企業(yè)應(yīng)用系統(tǒng)的分類 348
13.3.3 企業(yè)應(yīng)用集成的基本原則 349
13.4 數(shù)據(jù)集成 350
13.4.1 數(shù)據(jù)集成的基本概念 350
13.4.2 參考數(shù)據(jù)模型 352
13.4.3 數(shù)據(jù)集成的元數(shù)據(jù)管理 352
13.5 基于消息服務(wù)的集成框架 355
13.5.1 消息傳輸模型 356
13.5.2 消息代理任務(wù) 356
13.5.3 消息代理拓撲結(jié)構(gòu) 357
13.5.4 消息代理產(chǎn)品的選擇 357
13.5.5 使用J2EE的企業(yè)消息傳遞 358
13.6 過程集成 359
13.6.1 工作流和工作流管理系統(tǒng) 359
13.6.2 跨組織過程集成 361
13.7 習(xí)題與思考題 366
第14章 軟件測試技術(shù) 368
14.1 軟件測試概述 368
14.1.1 軟件測試技術(shù)的發(fā)展 368
14.1.2 軟件開發(fā)與軟件測試 369
14.1.3 軟件測試基本原理與原則 370
14.1.4 軟件測試模型 371
14.1.5 測試心理學(xué) 372
14.1.6 測試覆蓋 373
14.2 軟件測試管理 374
14.2.1 質(zhì)量改進模型PDCA 374
14.2.2 測試需求 374
14.2.3 測試計劃 375
14.2.4 測試設(shè)計及測試用例 376
14.2.5 測試執(zhí)行 377
14.2.6 測試記錄與跟蹤 378
14.2.7 回歸測試 379
14.2.8 總結(jié)與報告 380
14.3 軟件測試技術(shù) 380
14.3.1 黑盒測試與白盒測試 380
14.3.2 手工測試與自動化測試 381
14.3.3 單元測試 382
14.3.4 數(shù)據(jù)庫性能檢查 382
14.3.5 壓力測試 383
14.3.6 安全性測試 383
14.3.7 安裝測試 383
14.3.8 環(huán)境測試 384
14.4 測試工具 384
14.5 習(xí)題與思考題 385
第四篇 運作篇 (Operate)
第15章 軟件架構(gòu)師角色與職責(zé) 388
15.1 軟件架構(gòu)師的定義 388
15.2 軟件架構(gòu)師的工作場景 388
15.3 軟件架構(gòu)師的角色 389
15.4 軟件架構(gòu)師與其他角色的關(guān)系及區(qū)別 390
15.4.1 軟件架構(gòu)師與產(chǎn)品經(jīng)理的關(guān)系及區(qū)別 390
15.4.2 軟件架構(gòu)師與項目經(jīng)理的關(guān)系及區(qū)別 390
15.4.3 軟件架構(gòu)師與系統(tǒng)分析員的關(guān)系及區(qū)別 391
15.5 軟件架構(gòu)師的職責(zé) 391
15.6 軟件架構(gòu)師的所應(yīng)具備的能力 392
15.7 軟件架構(gòu)師的工作評價標準 393
15.8 習(xí)題與思考題 394
第16章 軟件運作模式 395
16.1 軟件企業(yè)的崛起 395
16.1.1 大型科研項目的研究是軟件業(yè)的萌芽 395
16.1.2 獨立軟件產(chǎn)品的出現(xiàn)預(yù)示軟件業(yè)開始步入正軌 395
16.1.3 企業(yè)解決方案讓軟件業(yè)開始興盛 396
16.1.4 個人電腦及互聯(lián)網(wǎng)的普及讓軟件業(yè)繁榮 396
16.2 傳統(tǒng)的軟件運作模式 397
16.3 基于Free的運作模式 398
16.3.1 自由軟件 398
16.3.2 免費軟件 400
16.3.3 共享軟件 400
16.3.4 案例 401
16.4 基于開源的運作模式 402
16.4.1 開源軟件 402
16.4.2 開源軟件盈利模式 403
16.4.3 案例 404
16.5 基于服務(wù)的運作模式 404
16.5.1 軟件企業(yè)職能轉(zhuǎn)變 404
16.5.2 基礎(chǔ)設(shè)施即服務(wù)(IaaS) 405
16.5.3 平臺即服務(wù)(PaaS) 406
16.5.4 軟件即服務(wù)(SaaS) 407
16.6 習(xí)題與思考題 410
第17章 案例分析 411
17.1 Google搜索引擎 411
17.1.1 營銷模式 411
17.1.2 運作分析 412
17.2 Twitter 413
17.2.1 營銷模式 413
17.2.2 運作分析 414
17.3 Facebook 415
17.3.1 營銷模式 415
17.3.2 運作分析 415
17.4 淘寶 417
17.4.1 營銷模式 417
17.4.2 運作分析 418
17.5 習(xí)題與思考題 418
參考文獻 419
第1章 軟件環(huán)境
11 軟件與軟件分類
軟件(Software)是用戶與硬件之間的接口界面,用戶主要是通過軟件與計算機進行交流。軟件是計算機系統(tǒng)設(shè)計的重要依據(jù)。為了方便用戶,為了使計算機系統(tǒng)具有較高的總體效用,在設(shè)計計算機系統(tǒng)時,必須全局考慮軟件與硬件的結(jié)合,以及用戶的要求和軟件的要求。來自眾多教材的關(guān)于軟件的定義一般包含如下三方面內(nèi)容:
(1)指令的集合(也稱為計算機程序),通過執(zhí)行這些指令可以滿足預(yù)期的特征、功能和性能需求。
(2)數(shù)據(jù)結(jié)構(gòu),它使程序可以充分利用信息。
(3)描述程序功能需求以及程序如何操作和使用的文檔。因而可以認為軟件=程序+數(shù)據(jù)+文檔
中華人民共和國國家標準軟件工程術(shù)語GB/T11457―1995對軟件的定義是:與計算機系統(tǒng)的操作有關(guān)的程序、規(guī)程、規(guī)則及任何與之有關(guān)的文檔。對于計算機來說,硬件就如同是一個人的身軀,軟件就如同一個人的思想和靈魂。
111 軟件的特點軟件作為一個產(chǎn)品或服務(wù),與其他產(chǎn)品相比具有很大的區(qū)別,具體表現(xiàn)如下特點:
(1)軟件是一種邏輯實體,不是具體的物理實體,它具有抽象性。軟件的好壞與否,正確與否,必須通過測試、分析、思考、判斷之后才知道。這一特性就給軟件的設(shè)計、生產(chǎn)和管理帶來了很多困難。
(2)軟件產(chǎn)品的生產(chǎn)主要是研制,是知識的結(jié)晶,不像傳統(tǒng)意義上的硬件制造有明顯的制造過程,在軟件的開發(fā)過程中沒有明顯的制造過程。
(3)軟件具有“復(fù)雜性”,其開發(fā)和運行常受到計算機系統(tǒng)的限制,對計算機系統(tǒng)有著不同程度的依賴性。為了消除這種依賴性,引入了軟件移植,并把可移植性當做衡量軟件質(zhì)量的因素之一。
(4)軟件的生產(chǎn)職能由人采用人工方式來生產(chǎn),還未完全擺脫手工開發(fā)方式,成本昂貴。所以為了加快軟件技術(shù)的發(fā)展,就必須提出和采用新的軟件開發(fā)方法。例如,可以采用軟件復(fù)用技術(shù)或者使用有效的軟件開發(fā)環(huán)境提高軟件開發(fā)效率。
(5)在軟件的運行和使用期間,沒有硬件那樣的機械磨損和老化問題,但存在退化問題,由于修改及需求的變化導(dǎo)致退化。硬件故障率曲線是一個U形曲線(即為浴盆曲線,在產(chǎn)品整個使用壽命期間,典型的故障率變化曲線,形似浴盆),說明硬件隨著使用時間的增加,故障率也急劇上升)。
軟件故障率曲線,沒有U形曲線的右半部分說明軟件不會隨著使用時間的增加使得故障率增加,所以軟件不存在磨損和老化