本書主要圍繞軟件的系統(tǒng)工程化開發(fā)過程,介紹相關的理論、方法、技術和工具。本書以面向?qū)ο蟮姆治龊驮O計為主線,以基本理論為出發(fā)點,遵循UML 2標準,介紹軟件開發(fā)的階段組織及生命周期模型;重點針對軟件開發(fā)的具體活動,討論需求分析、軟件架構的構建、類的分析與設計、代碼生成、類的詳細設計、設計優(yōu)化、實現(xiàn)技術、交互設計、軟件測試等重要環(huán)節(jié);介紹軟件項目級管理及軟件過程管理與改進。本書內(nèi)容豐富、循序漸進,注重軟件工程理論與實踐的結合,適合作為高等院校計算機相關專業(yè)本科生和研究生的教材,可也為從事軟件開發(fā)的理論研究人員和工程技術人員提供參考。
樸勇,工學博士,大連理工大學軟件學院副教授。畢業(yè)于大連理工大學計算機系,2004年3月至今就職于大連理工大學軟件學院(國家示范性軟件學院)。目前主講"軟件工程”、"軟件測試與質(zhì)量保證”兩門本科課程,均為專業(yè)必修課,其中"軟件測試與質(zhì)量保證”獲遼寧省精品課程。曾獲大連市IT優(yōu)秀教師二等獎。
目 錄
第1章 軟件工程概述 1
1.1 軟件危機與軟件工程 1
1.1.1 軟件危機 1
1.1.2 軟件工程 2
1.2 系統(tǒng)工程與UML 3
1.2.1 系統(tǒng)工程 3
1.2.2 統(tǒng)一建模語言UML 4
1.3 系統(tǒng)開發(fā)的解空間 6
1.4 軟件工程開發(fā)方法 8
1.4.1 傳統(tǒng)方法 8
1.4.2 面向?qū)ο蠓椒?8
1.4.3 理解兩種開發(fā)方法 9
1.5 習題 10
第2章 軟件開發(fā)過程 11
2.1 軟件生命周期與軟件過程 11
2.2 傳統(tǒng)生命周期模型 13
2.2.1 瀑布模型 13
2.2.2 快速原型模型 14
2.2.3 增量模型 16
2.2.4 螺旋模型 16
2.2.5 噴泉模型 18
2.3 敏捷生命周期模型 18
2.3.1 增量交付與迭代開發(fā) 19
2.3.2 敏捷生命周期模型的優(yōu)勢 20
2.3.3 極限編程 21
2.3.4 Scrum 22
2.3.5 DevOps過程 23
2.4 習題 25
第3章 需求分析 26
3.1 需求分析活動 26
3.1.1 需求準備 26
3.1.2 系統(tǒng)涉眾 27
3.1.3 系統(tǒng)目標 29
3.2 用例與系統(tǒng)功能 29
3.2.1 用例及其表示 30
3.2.2 識別用例 31
3.2.3 用例規(guī)約 33
3.2.4 用例提煉 34
3.3 過程建模與事件流 36
3.3.1 過程建模 36
3.3.2 事件流 40
3.4 功能性需求 41
3.5 非功能性需求 44
3.6 需求跟蹤 46
3.7 習題 48
第4章 軟件架構的構建 50
4.1 軟件架構及其定義 50
4.1.1 軟件架構的理解 50
4.1.2 軟件架構的定義 51
4.1.3 軟件架構的“4+1”視圖模型 51
4.2 軟件架構模型 53
4.3 軟件架構風格 53
4.3.1 管道與過濾器 53
4.3.2 層次結構 54
4.3.3 倉庫/黑板系統(tǒng) 55
4.3.4 正交軟件結構 56
4.3.5 客戶機/服務器結構 56
4.3.6 瀏覽器/服務器結構 57
4.3.7 MVC結構 58
4.4 軟件架構設計 59
4.4.1 包及其結構 59
4.4.2 包結構設計 60
4.5 習題 63
第5章 類的分析與設計 64
5.1 基本類的確定 64
5.1.1 類的識別 65
5.1.2 初始類圖 66
5.1.3 類的方法 67
5.1.4 類的關系 68
5.1.5 類與對象 70
5.2 類的細化 70
5.2.1 管理類和控制類 70
5.2.2 設計優(yōu)化 73
5.3 補充和確認 74
5.3.1 順序圖 74
5.3.2 場景模擬 76
5.4 界面類設計 80
5.5 習題 82
第6章 代碼生成 83
6.1 逆向工程與CASE工具 83
6.2 單個類的實現(xiàn) 84
6.3 關聯(lián)關系的實現(xiàn) 86
6.4 對象歸屬關系的實現(xiàn) 90
6.4.1 聚合關系 90
6.4.2 組合關系 92
6.4.3 依賴關系 94
6.5 軟件架構的實現(xiàn) 94
6.6 其他物理實現(xiàn) 99
6.7 習題 101
第7章 類的詳細設計 103
7.1 詳細設計的主要活動 103
7.2 類方法的詳細設計 104
7.2.1 圖形工具 104
7.2.2 表格工具 106
7.2.3 語言工具 108
7.3 類的行為設計 108
7.3.1 狀態(tài)圖的結構 109
7.3.2 狀態(tài)圖的擴展 111
7.3.3 狀態(tài)圖的應用 112
7.4 對象約束語言 114
7.5 習題 118
第8章 設計優(yōu)化 121
8.1 小即是美 121
8.2 設計優(yōu)化思想 122
8.2.1 運行時的多態(tài) 122
8.2.2 耦合的消息鏈 124
8.2.3 狎昵關系 125
8.2.4 被拒絕的遺贈 126
8.2.5 循環(huán)依賴 126
8.3 設計原則 127
8.3.1 接口隔離原則 127
8.3.2 依賴倒置原則 128
8.3.3 開放封閉原則 128
8.3.4 Liskov替換原則 130
8.3.5 單一職責原則 131
8.3.5 合成/聚合復用原則 132
8.4 設計模式 133
8.4.1 抽象工廠模式 134
8.4.2 單例模式 136
8.4.3 適配器模式 138
8.4.4 橋模式 139
8.4.5 裝飾模式 140
8.4.6 門面模式 141
8.4.7 代理模式 142
8.4.8 觀察者模式 143
8.4.9 策略模式 144
8.4.10 狀態(tài)模式 144
8.5 習題 147
第9章 實現(xiàn)技術 149
9.1 非功能性需求的實現(xiàn) 149
9.2 分布式技術 151
9.3 可擴展標記語言XML 153
9.4 程序輪子 154
9.4.1 組件 155
9.4.2 框架 158
9.5 數(shù)據(jù)的持久化 162
9.5.1 文件持久化 162
9.5.2 數(shù)據(jù)庫持久化 163
9.6 領域特定語言 164
9.7 模型驅(qū)動架構 166
9.7.1 原理及過程 166
9.7.2 MDA的應用 168
9.8 重構 170
9.9 習題 172
第10章 交互設計 173
10.1 交互設計概述 173
10.2 可用性 174
10.2.1 任務適合性 175
10.2.2 自我描述性 176
10.2.3 可控性 177
10.2.4 與用戶期望一致性 177
10.2.5 容錯性 179
10.2.6 可定制性 179
10.2.7 易學性 179
10.3 交互設計過程 180
10.4 可用性的驗證 181
10.5 習題 183
第11章 軟件測試 184
11.1 形式化驗證 184
11.2 測試技術 186
11.2.1 測試分類 186
11.2.2 測試策略 187
11.2.3 非功能性測試 189
11.3 軟件度量 189
11.3.1 控制流圖與環(huán)形復雜度 191
11.3.2 方法內(nèi)聚缺乏度 193
11.4 等價類測試 194
11.4.1 等價類方法 194
11.4.2 等價類與邊界 196
11.4.3 等價類組合 197
11.4.4 面向?qū)ο笾械牡葍r類 198
11.5 基于控制流的測試 200
11.6 斷言機制 204
11.7 測試框架 206
11.7.1 測試環(huán)境 206
11.7.2 JUnit 207
11.8 可測試性 213
11.9 建設性質(zhì)量保證 217
11.10 人工測試 218
11.11 習題 220
第12章 軟件項目級管理 223
12.1 軟件配置管理 223
12.1.1 版本管理 224
12.1.2 構建管理 228
12.2 項目管理 230
12.2.1 項目計劃與工作分解 231
12.2.2 軟件規(guī)模估算 232
12.2.3 開發(fā)成本估算 234
12.2.4 任務安排與工程網(wǎng)絡圖 237
12.2.5 項目組織與甘特圖 238
12.3 項目計劃跟蹤控制 239
12.3.1 項目計劃跟蹤 239
12.3.2 掙值分析 240
12.3.3 項目偏差控制 242
12.4 軟件質(zhì)量保證 243
12.4.1 質(zhì)量管理 243
12.4.2 軟件質(zhì)量保證的內(nèi)容 244
12.4.3 軟件質(zhì)量保證的任務 245
12.4.4 軟件質(zhì)量保證計劃 245
12.5 風險管理 245
12.6 項目人員構成與溝通 247
12.6.1 項目人員構成 247
12.6.2 人員溝通 249
12.7 習題 250
第13章 軟件過程管理與改進 252
13.1 軟件過程管理 252
13.1.1 過程改進 252
13.1.2 能力成熟度模型 253
13.1.3 CMMI過程域 255
13.2 個體軟件過程 262
13.3 團隊軟件過程 262
13.4 習題 263