軟件工程學是一門理論性和實踐性都很強的學科,它采用工程化的概念、理論、技術和方法來指導開發與維護計算機軟件。本書系統、全面地介紹了現代軟件工程技術,在軟件工程的概念、原理、方法及其應用等方面有較詳盡的論述,具有較強的系統性和可讀性。本書較為詳細地介紹了軟件生存周期、傳統軟件工程、軟件工程過程、面向對象軟件工程和軟件體系結構等的思想和實現方法,力圖反映軟件工程領域的新發展,內容包括:軟件和軟件工程、軟件過程、需求工程、設計的概念、體系結構設計、構件級設計、用戶界面設計、基于模式的設計、WebApp設計、軟件質量管理、軟件測試、軟件配置管理、軟件項目管理和軟件維護與再工程。
本書可作為高等院校“軟件工程”課程的教材和教學參考書,也可供有一定實踐經驗的軟件開發人員和管理人員參考,或作為繼續教育的教材。
目錄
出版說明
前言
課程教學進度表
第1章 軟件和軟件工程1
1.1 計算機系統與軟件1
1.1.1 軟件的本質2
1.1.2 定義軟件3
1.1.3 軟件應用領域4
1.1.4 WebApp的特性6
1.2 軟件工程定義7
1.2.1 軟件工程的內容7
1.2.2 軟件工程的基本目標和原則8
1.2.3 軟件工程與一般工程的差異9
1.3 軟件生存周期及其過程10
1.4 軟件工具與開發環境11
1.4.1 軟件工具11
1.4.2 軟件開發環境12
1.5 軟件工程發展的4個階段13
1.6 軟件工程師的責任13
小結14
習題15
第2章 軟件過程17
2.1 通用過程模型17
2.1.1 定義框架活動18
2.1.2 明確任務集19
2.1.3 過程模式20
2.1.4 過程評估與改進21
2.2 傳統過程模型22
2.2.1 軟件生存周期模型22
2.2.2 瀑布模型23
2.2.3 增量模型24
2.2.4 演化模型25
2.2.5 協同模型28
2.2.6 噴泉模型29
2.2.7 智能模型29
2.3 軟件生存周期過程與軟件過程
工程30
2.4 軟件生存周期基本過程31
2.4.1 獲取過程31
2.4.2 供應過程32
2.4.3 開發過程33
2.4.4 運作過程34
2.4.5 維護過程34
2.5 軟件生存周期支持過程35
2.5.1 文檔編制過程35
2.5.2 配置管理過程35
2.5.3 質量保證過程35
2.5.4 驗證過程36
2.5.5 確認過程36
2.5.6 聯合評審過程36
2.5.7 審核過程36
2.5.8 問題解決過程36
2.6 軟件生存周期組織過程36
2.6.1 管理過程37
2.6.2 基礎設施過程37
2.6.3 改進過程37
2.6.4 培訓過程37
2.7 剪裁過程37
2.8 過程與組織的關系38
2.9 Rational統一過程41
2.10 敏捷開發42
2.10.1 什么是敏捷43
2.10.2 敏捷及變更的成本費用44
2.10.3 什么是敏捷過程44
2.10.4 極限編程46
2.10.5 工業極限編程48
小結49
習題50
第3章 需求工程53
3.1 理解需求53
3.1.1 建立根基53
3.1.2 導出需求54
3.1.3 開發用例56
3.1.4 構建需求模型56
3.1.5 協商需求58
3.1.6 確認需求59
3.2 需求分析59
3.2.1 總體目標和原理60
3.2.2 域分析61
3.2.3 需求建模的方法61
3.2.4 需求建模策略62
3.3 基于場景建模62
3.3.1 新建初始用例62
3.3.2 細化初始用例63
3.3.3 編寫正規用例63
3.4 補充用例的UML模型64
3.4.1 開發活動圖64
3.4.2 泳道圖64
3.5 數據建模概念65
3.5.1 數據對象65
3.5.2 數據屬性66
3.5.3 關系66
3.6 基于類的建模67
3.6.1 識別分析類67
3.6.2 描述屬性68
3.6.3 定義操作68
3.6.4 類?職責?協作者建模68
3.6.5 關聯和依賴71
3.7 面向數據流建模71
3.7.1 創建數據流模型71
3.7.2 創建控制流模型73
3.7.3 控制規格說明73
3.7.4 處理規格說明75
3.8 生成行為模型75
3.9 需求建模的模式77
3.10 Web應用系統的需求建模78
3.10.1 需求建模的輸入78
3.10.2 需求建模的輸出79
3.10.3 Web應用系統內容建模79
3.10.4 Web應用系統的交互模型80
3.10.5 Web應用系統的功能模型80
3.10.6 Web應用系統的配置模型81
3.10.7 導航建模81
小結81
習題83
第4章 設計的概念86
4.1 軟件工程中的設計86
4.2 設計過程87
4.2.1 軟件質量指導原則和屬性88
4.2.2 軟件設計的演化89
4.3 關注點分離89
4.4 關于設計的概念91
4.4.1 抽象91
4.4.2 體系結構91
4.4.3 模式92
4.4.4 模塊化92
4.4.5 信息隱蔽92
4.4.6 功能獨立93
4.4.7 求精93
4.4.8 方面93
4.4.9 重構94
4.4.10 設計類94
4.5 設計模型95
4.5.1 數據設計元素96
4.5.2 體系結構設計元素96
4.5.3 接口設計元素97
4.5.4 構件級設計元素97
4.5.5 部署級設計元素98
4.6 模塊的劃分98
4.6.1 軟件結構99
4.6.2 模塊劃分的基本原則99
4.6.3 內聚度100
4.6.4 耦合度100
4.6.5 高內聚和低耦合101
4.7 Parnas方法101
4.7.1 信息隱蔽原則101
4.7.2 加強系統各成分間的檢查102
4.8 軟件詳細設計102
4.8.1 結構化構造103
4.8.2 程序流程圖103
4.8.3 方塊圖(N?S)104
4.8.4 PAD圖105
小結106
習題107
第5章 體系結構設計110
5.1 概述110
5.1.1 什么是體系結構110
5.1.2 軟件體系結構的定義111
5.1.3 體系結構描述112
5.1.4 體系結構決策113
5.2 體系結構的類型113
5.3 體系結構的風格115
5.3.1 體系結構風格的簡單分類116
5.3.2 體系結構模式118
5.3.3 組織和求精118
5.4 體系結構的設計118
5.4.1 系統環境的表示119
5.4.2 定義原型120
5.4.3 將體系結構精化為構件121
5.4.4 描述系統實例122
5.5 評估可選的體系結構設計122
5.5.1 體系結構權衡分析方法122
5.5.2 體系結構復雜性123
5.5.3 體系結構描述語言124
小結124
習題124
第6章 構件級設計127
6.1 什么是構件127
6.1.1 面向對象的觀點127
6.1.2 傳統觀點129
6.1.3 過程相關的觀點130
6.2 設計基于類的構件131
6.2.1 基本設計原則131
6.2.2 構件級設計指導方針132
6.2.3 內聚性133
6.2.4 耦合性134
6.3 實施構件級設計134
6.4 WebApp的構件級設計137
6.4.1 構件級內容設計137
6.4.2 構件級功能設計138
6.5 設計傳統構件138
6.6 基于構件的開發139
6.6.1 領域工程139
6.6.2 構件合格性檢驗、適應性修改
與組合140
6.6.3 復用的分析與設計141
6.6.4 構件分類與檢索142
小結142
習題143
第7章 用戶界面設計145
7.1 黃金規則145
7.1.1 用戶操縱控制145
7.1.2 減輕用戶記憶負擔146
7.1.3 保持界面一致146
7.2 用戶界面的分析與設計147
7.2.1 用戶界面分析和設計模型147
7.2.2 過程148
7.3 界面分析148
7.3.1 用戶分析149
7.3.2 任務分析和建模149
7.3.3 顯示內容分析151
7.3.4 工作環境分析151
7.4 界面設計步驟151
7.4.1 應用界面設計步驟152
7.4.2 用戶界面設計模式153
7.4.3 設計問題153
7.5 WebApp界面設計154
7.5.1 界面設計的原則與指導方針155
7.5.2 WebApp的界面設計工作流156
7.6 設計評估157
小結158
習題159
第8章 基于模式的設計160
8.1 模式設計160
8.1.1 模式的種類160
8.1.2 框架162
8.1.3 描述模式162
8.1.4 模式語言和存儲庫163
8.2 基于模式的軟件設計163
8.2.1 不同環境下基于模式的設計163
8.2.2 在模式中思考164
8.2.3 設計任務165
8.2.4 建立模式組織表166
8.3 體系結構模式166
8.4 構件級設計模式167
8.5 用戶界面設計模式168
8.6 WebApp設計模式170
8.6.1 設計焦點170
8.6.2 設計粒度171
小結171
習題172
第9章 WebApp設計174
9.1 WebApp設計質量174
9.2 設計目標176
9.3 WebApp界面設計177
9.4 美學設計177
9.5 內容設計178
9.5.1 內容對象178
9.5.2 設計問題179
9.6 體系結構設計179
9.6.1 內容體系結構180
9.6.2 WebApp體系結構181
9.7 導航設計182
9.7.1 導航語義182
9.7.2 導航語法183
9.8 構件級設計183
9.9 面向對象的超媒體設計方法183
9.9.1 OOHDM的概念設計184
9.9.2 OOHDM的導航設計185
9.9.3 抽象界面設計與實現185
小結185
習題186
第10章 軟件質量管理188
10.1 對軟件質量的需求188
10.2 軟件質量度量189
10.2.1 軟件質量框架模型189
10.2.2 軟件質量特性190
10.2.3 評估指標的選取原則191
10.3 軟件質量評估指標體系191
10.3.1 功能度指標191
10.3.2 可靠性指標192
10.3.3 易用性指標192
10.3.4 效率特征指標193
10.4 軟件評價193
10.4.1 復雜性度量193
10.4.2 可靠性評價194
10.4.3 性能評價195
10.4.4 運行評價195
10.5 CMM:軟件能力成熟度模型197
10.6 質量管理文件198
小結199
習題199
第11章 軟件測試203
11.1 軟件測試策略203
11.1.1 策略問題203
11.1.2 驗證與確認204
11.1.3 宏觀策略204
11.2 傳統軟件的測試策略206
11.2.1 單元測試206
11.2.2 集成測試207
11.2.3 冒煙測試209
11.2.4 回歸測試209
11.3 面向對象的測試策略210
11.3.1 面向對象環境中的單元測試210
11.3.2 面向對象環境中的集成測試210
11.3.3 面向對象環境中的確認測試211
11.4 WebApp的測試策略211
11.5 確認測試212
11.5.1 確認測試準則212
11.5.2 ? 測試與? 測試212
11.6 系統測試213
11.6.1 恢復測試213
11.6.2 安全測試213
11.6.3 壓力測試213
11.6.4 性能測試214
11.6.5 部署測試214
11.7 調試技巧214
11.7.1 調試過程214
11.7.2 調試策略215
11.8 測試傳統應用系統215
11.8.1 靜態測試技術216
11.8.2 動態測試技術216
11.8.3 白盒測試方法217
11.8.4 黑盒測試方法217
11.8.5 模糊測試方法218
11.8.6 極限測試219
11.8.7 基于風險的測試219
11.9 測試面向對象應用系統219
11.9.1 擴展測試的視野220
11.9.2 測試OOA和OOD模型221
11.9.3 面向對象測試方法221
11.10 測試Web應用系統221
11.10.1 WebApp環境中的錯誤222
11.10.2 內容測試222
11.10.3 界面測試223
11.10.4 構件測試225
11.10.5 導航測試226
11.10.6 配置測試227
11.10.7 安全測試227
11.10.8 性能測試228
小結228
習題229
第12章 軟件配置管理233
12.1 概述233
12.1.1 SCM場景234
12.1.2 配置管理系統元素234
12.1.3 基線235
12.1.4 軟件配置項236
12.2 SCM中心存儲庫237
12.2.1 中心存儲庫的作用238
12.2.2 一般特征和內容238
12.2.3 SCM特征239
12.3 SCM過程239
12.3.1 配置標識240
12.3.2 版本控制240
12.3.3 變更控制241
12.4 WebApp配置管理242
小結243
習題243
第13章 軟件項目管理245
13.1 軟件項目的特點245
13.1.1 軟件管理的特殊困難245
13.1.2 軟件管理涉及的范圍246
13.1.3 W5HH原則247
13.2 軟件開發組織247
13.2.1 軟件設計小組的形式247
13.2.2 對項目經理人員的要求248
13.2.3 評價軟件人員的條件249
13.3 軟件項目估算249
13.3.1 對估算的觀察249
13.3.2 項目策劃過程250
13.3.3 軟件范圍和可行性250
13.3.4 資源251
13.3.5 項目估算252
13.3.6 自行開發或購買的決策253
13.4 安排項目進度254
13.4.1 項目進度的安排254
13.4.2 為軟件項目定義任務集255
13.4.3 定義任務網絡257
13.5 風險管理257
13.5.1 軟件風險258
13.5.2 風險識別259
13.5.3 風險預測259
13.5.4 風險緩解、監測和管理261
13.6 標準化管理261
13.6.1 軟件工程標準化261
13.6.2 軟件工程標準化的意義262
13.6.3 軟件工程國家標準262
小結264
習題265
第14章 軟件維護與再工程268
14.1 概述268
14.1.1 軟件維護工作的必要性269
14.1.2 改正(糾錯)性維護270
14.1.3 適應性維護270
14.1.4 完善性維護270
14.1.5 維護工作的過程271
14.2 維護策略272
14.2.1 控制維護問題和成本的策略272
14.2.2 將維護成本和延誤減少到
低限度的措施273
14.3 軟件的可維護性276
14.3.1 可維護性的度量276
14.3.2 提高軟件的可維護性281
14.4 業務過程再工程285
14.4.1 業務過程285
14.4.2 BPR模型286
14.5 軟件再工程287
14.6 正向工程288
14.6.1 客戶/服務器體系結構的正向
工程289
14.6.2 面向對象體系結構的正向工程290
14.7 維護管理與文件290
14.7.1 軟件維護的管理290
14.7.2 軟件問題報告291
14.7.3 軟件修改報告293
小結294
習題295
附錄 習題參考答案298
參考文獻304