內容簡介
本書全面而又系統地介紹了軟體工程的基本概念、原理和典型的技術方法,在注重軟體工程學科的系統性、原理性的同時,通過實際項目的介紹來提高讀者對軟體工程方法與技術在實踐中的套用。本書共分為11章,第1章是對軟體工程的概括,第2章至第5章按照軟體生命周期的開發順序,以結構化方法為主線,介紹軟體工程各階段的任務、過程、方法和工具,第6章介紹軟體測試,第7章至第9章結合軟體生命周期過程,以面向對象方法為主線,介紹UML統一建模語言、面向對象分析、面向對象設計等內容,第10章介紹軟體維護,第11章介紹軟體項目管理。本書注重理論與實踐相結合,在每章後的習題中都有一定的實際分析、設計習題,讓讀者更好地在實踐戶尋歡中掌握基礎理論。
本書對軟體工程教學和實踐相結合,可作為高等院校計算機專業或信晚剃戰頸息類相關專業課程的教材或教學參考書,也可作為有一定實踐經驗的軟體工程人員和需要開發套用軟體的廣大計算機用戶的參考資料。
圖書目錄
第1章軟體工程概述/1
1.1軟體工程的發展歷程1
1.1.1軟體危機1
1.1.2軟體危機出現的原因3
1.1.3軟體工程的發展4
1.2軟體工程的概陵己念5
1.2.1軟體工程的定義5
1.2.2軟體工程的目標6
1.2.3軟體工程的實拳幾台施原則8
1.2.4軟體工程的基本狼紙兵原理9
1.3軟體與軟體過程10
1.3.1軟體的概念11
1.3.2軟體的分類12
1.3.3軟體生命周期13
1.3.4軟體過程15
1.4軟體過程模型16
1.4.1瀑布模型16
1.4.2原型模型17
1.4.3增量模型18
1.4.4螺旋模型19
1.4.5噴泉模型20
1.4.6敏捷過程模型20
1.4.74GT過程模型22
1.4.8基於構件的開發模型23
1.4.9Rational統一建模過程24
1.4.10微軟解決框架過程模型25
1.5軟體開發方法26
1.5.1結構化開發方法27
1.5.2面向對象開發方法27
1.6案例描述28
1.6.1簡歷信息自動獲取和查詢系統28
1.6.2試卷自動生成系統29
1.7本章小結30
習題31
第2章軟體需求工程/33
2.1軟體需求的基本概念33
2.1.1需求分析的任務33
2.1.2需求分析的原則34
2.1.3需求分析的內容35
2.2需求工程的過程36
2.2.1需求工程中的參與人員36
2.2.2可行性研究37
2.2.3需求工程過程中的活動39
2.2.4需求工程的管理40
2.3需求獲取技術41
2.4結構化需求分析和建模43
2.4.1結構化需求分析概述44
2.4.2面向數據的數據建模44
2.4.3面向數據流的功能建模46
2.4.4面向狀態轉換的行為建模50
2.4.5數據字典51
2.4.6加工邏輯53
2.5案例——“簡歷自動獲取和鞏厚虹疊查詢系統”的需求建模54
2.5.1數據建模——ER圖描述54
2.5.2功能建模——數據流圖55
2.5.3行為建模——狀態轉換圖56
2.5.4數據字典57
2.5.5加工邏輯——PDL語言的描述57
2.6需求評審58
2.6.1軟體需求規格說明文檔58
2.6.2需求評審標準及需求驗證61
2.6.3需求變更管理63
2.7本章小結64
習題64
第3章軟體設計基礎/66
3.1軟體設計概述66
3.1.1軟體設計與軟體需求66
3.1.2軟體設計的任務67
3.1.3軟體設計的原則69
3.2軟體體系結構設計70
3.2.1體系結構設計概述70
3.2.2以數據為中心的數據倉庫模型70
3.2.3客戶端/伺服器模式的分散式結構71
3.2.4層次模型73
3.2.5管淋少熱道與過濾器模型74
3.3模組化設計75
3.3.1軟體模組化與分解75
3.3.2抽象76
3.3.3信息隱藏76
3.3.4模組獨立性77
3.3.5啟發式規則79
3.4界面設計82
3.4.1界面設計的任務82
3.4.2界面設計的原則83
3.4.3界面設計的特性84
3.4.4MVC模型84
3.5軟體設計評審85
3.5.1軟體設計規格說明文檔85
3.5.2軟體設計評審標準89
3.5.3軟體設計驗證90
3.6本章小結91
習題92
第4章結構化設計方法/93
4.1結構化設計方法概述93
4.2面向數據流的設計方法94
4.2.1層次圖和結構圖94
4.2.2變換分析法96
4.2.3事務分析法100
4.2.4混合分析法101
4.3面向數據的設計方法102
4.3.1Jackson圖102
4.3.2Jackson系統開發方法103
4.4案例——“簡歷自動獲取和查詢系統”的數據流設計方法106
4.4.1用變換分析法進行設計106
4.4.2用事務分析法進行設計107
4.4.3兩種方法的比較108
4.5結構化詳細設計的工具109
4.5.1程式流程圖109
4.5.2盒圖(NS圖)110
4.5.3問題分析圖(PAD圖)111
4.5.4判定樹113
4.5.5判定表113
4.5.6詳細設計工具的比較114
4.6本章小結115
習題116
第5章軟體實現/118
5.1程式設計語言118
5.1.1程式設計語言的分類118
5.1.2程式設計語言的特性119
5.1.3選擇程式設計語言120
5.2程式設計風格122
5.2.1程式編排和組織的準則122
5.2.2程式設計的效率126
5.3代碼復用127
5.4代碼評審129
5.5本章小結132
習題133
第6章軟體測試/136
6.1軟體測試基礎136
6.1.1軟體測試概念136
6.1.2軟體測試過程模型137
6.1.3軟體測試原則139
6.1.4軟體測試在軟體開發各階段的工作流程141
6.1.5軟體測試信息流143
6.1.6軟體測試技術分類143
6.2白盒測試145
6.2.1邏輯覆蓋145
6.2.2循環測試148
6.2.3路徑測試149
6.3黑盒測試152
6.3.1等價類劃分152
6.3.2邊界值分析154
6.3.3錯誤推測法154
6.3.4因果圖法155
6.4白盒測試和黑盒測試的比較157
6.5軟體測試策略158
6.5.1單元測試158
6.5.2集成測試161
6.5.3確認測試164
6.5.4系統測試165
6.6調試167
6.6.1軟體調試過程167
6.6.2軟體調試方法168
6.7軟體測試報告169
6.7.1軟體測試說明169
6.7.2軟體測試報告170
6.8本章小結171
習題172
第7章UML統一建模語言/174
7.1UML的發展174
7.1.1UML的產生174
7.1.2UML的構成175
7.1.3UML的特點176
7.2面向對象的基本概念176
7.3UML視圖182
7.4UML的圖和模型元素183
7.4.1用例圖183
7.4.2類圖185
7.4.3包圖186
7.4.4狀態圖187
7.4.5活動圖187
7.4.6順序圖189
7.4.7協作圖190
7.4.8構件圖191
7.4.9配置圖192
7.5UML的關係192
7.5.1關聯關係193
7.5.2泛化關係196
7.5.3依賴關係199
7.5.4實現關係200
7.6UML的通用機制200
7.6.1修飾201
7.6.2注釋201
7.6.3規格說明201
7.6.4擴展機制202
7.7基於UML的軟體過程203
7.8本章小結205
習題206
第8章面向對象分析/207
8.1面向對象分析概述207
8.1.1傳統軟體過程中的不足207
8.1.2面向對象的特點208
8.1.3面向對象分析的基本過程209
8.1.4面向對象分析的3類模型209
8.1.5靜態模型的5個層次210
8.2建立功能模型(用例模型)211
8.2.1識別參與者212
8.2.2識別用例212
8.2.3識別用例間關係214
8.2.4用例描述文檔215
8.3建立靜態模型(對象模型)216
8.3.1識別類與對象216
8.3.2劃分主題218
8.3.3確定結構219
8.3.4確定屬性220
8.3.5確定服務221
8.3.6類圖描述文檔221
8.3.7包圖描述文檔222
8.4建立動態模型223
8.4.1建立順序圖及其描述文檔223
8.4.2建立狀態圖及其描述文檔225
8.4.3建立協作圖及其描述文檔226
8.4.4建立活動圖及其描述文檔227
8.5本章小結229
習題229
第9章面向對象設計/231
9.1面向對象設計概述231
9.1.1面向對象分析與設計的關係231
9.1.2面向對象設計原則232
9.2精化類及類間關係233
9.2.1設計類的屬性233
9.2.2設計類的方法234
9.2.3設計類間泛化關係235
9.2.4設計關聯類236
9.3數據設計237
9.3.1基於關係資料庫的數據設計237
9.3.2基於其他方式的數據設計239
9.4人機互動設計240
9.5建立實現模型241
9.5.1構件圖及其描述文檔241
9.5.2配置圖及其描述文檔243
9.6設計模式簡介244
9.6.1概述244
9.6.2Singleton模式245
9.6.3Abstract Factory模式247
9.6.4Mediator模式249
9.6.5Adapter模式251
9.6.6Iterator模式253
9.6.7State模式256
9.7面向對象的測試258
9.7.1面向對象測試概述258
9.7.2面向對象的單元測試259
9.8本章小結261
習題262
第10章軟體維護/265
10.1軟體維護概述265
10.1.1軟體維護的任務265
10.1.2軟體維護的特點266
10.1.3軟體維護的分類266
10.2軟體維護過程267
10.2.1軟體維護方式268
10.2.2軟體維護管理的基本內容269
10.2.3維護中存在的問題273
10.2.4維護活動記錄274
10.3軟體的可維護性275
10.3.1可維護性因素275
10.3.2提高軟體的可維護性276
10.4逆向工程278
10.5本章小結280
習題281
第11章軟體項目管理/282
11.1軟體項目管理概述282
11.1.1軟體項目管理的特點和內容282
11.1.2軟體項目管理目標283
11.1.3軟體項目管理的4P觀點284
11.2軟體項目規模度量285
11.2.1代碼行技術286
11.2.2功能點計算287
11.2.3代碼行與功能點間的轉換290
11.3軟體項目估算291
11.3.1代碼行和功能點的其他估算模型291
11.3.2專家估算模型291
11.3.3Putnam模型292
11.3.4COCOMO模型292
11.3.5項目估算模型的小結295
11.4項目進度管理295
11.4.1項目進度控制295
11.4.2甘特圖296
11.4.3工程網路圖297
11.5項目風險管理298
11.5.1軟體風險概念299
11.5.2風險管理過程299
11.6項目質量管理302
11.6.1軟體質量因素303
11.6.2軟體質量保證活動307
11.6.3軟體質量保證計畫308
11.7軟體配置管理309
11.7.1軟體配置項310
11.7.2配置管理過程310
11.7.3軟體配置管理計畫313
11.8項目人員組織管理315
11.8.1團隊組織315
11.8.2團隊組織方式315
11.9軟體能力成熟度模型317
11.9.1基本概念317
11.9.2軟體能力成熟度模型等級319
11.9.3關鍵過程域319
11.10本章小結320
習題321
參考文獻/323
2.4.1結構化需求分析概述44
2.4.2面向數據的數據建模44
2.4.3面向數據流的功能建模46
2.4.4面向狀態轉換的行為建模50
2.4.5數據字典51
2.4.6加工邏輯53
2.5案例——“簡歷自動獲取和查詢系統”的需求建模54
2.5.1數據建模——ER圖描述54
2.5.2功能建模——數據流圖55
2.5.3行為建模——狀態轉換圖56
2.5.4數據字典57
2.5.5加工邏輯——PDL語言的描述57
2.6需求評審58
2.6.1軟體需求規格說明文檔58
2.6.2需求評審標準及需求驗證61
2.6.3需求變更管理63
2.7本章小結64
習題64
第3章軟體設計基礎/66
3.1軟體設計概述66
3.1.1軟體設計與軟體需求66
3.1.2軟體設計的任務67
3.1.3軟體設計的原則69
3.2軟體體系結構設計70
3.2.1體系結構設計概述70
3.2.2以數據為中心的數據倉庫模型70
3.2.3客戶端/伺服器模式的分散式結構71
3.2.4層次模型73
3.2.5管道與過濾器模型74
3.3模組化設計75
3.3.1軟體模組化與分解75
3.3.2抽象76
3.3.3信息隱藏76
3.3.4模組獨立性77
3.3.5啟發式規則79
3.4界面設計82
3.4.1界面設計的任務82
3.4.2界面設計的原則83
3.4.3界面設計的特性84
3.4.4MVC模型84
3.5軟體設計評審85
3.5.1軟體設計規格說明文檔85
3.5.2軟體設計評審標準89
3.5.3軟體設計驗證90
3.6本章小結91
習題92
第4章結構化設計方法/93
4.1結構化設計方法概述93
4.2面向數據流的設計方法94
4.2.1層次圖和結構圖94
4.2.2變換分析法96
4.2.3事務分析法100
4.2.4混合分析法101
4.3面向數據的設計方法102
4.3.1Jackson圖102
4.3.2Jackson系統開發方法103
4.4案例——“簡歷自動獲取和查詢系統”的數據流設計方法106
4.4.1用變換分析法進行設計106
4.4.2用事務分析法進行設計107
4.4.3兩種方法的比較108
4.5結構化詳細設計的工具109
4.5.1程式流程圖109
4.5.2盒圖(NS圖)110
4.5.3問題分析圖(PAD圖)111
4.5.4判定樹113
4.5.5判定表113
4.5.6詳細設計工具的比較114
4.6本章小結115
習題116
第5章軟體實現/118
5.1程式設計語言118
5.1.1程式設計語言的分類118
5.1.2程式設計語言的特性119
5.1.3選擇程式設計語言120
5.2程式設計風格122
5.2.1程式編排和組織的準則122
5.2.2程式設計的效率126
5.3代碼復用127
5.4代碼評審129
5.5本章小結132
習題133
第6章軟體測試/136
6.1軟體測試基礎136
6.1.1軟體測試概念136
6.1.2軟體測試過程模型137
6.1.3軟體測試原則139
6.1.4軟體測試在軟體開發各階段的工作流程141
6.1.5軟體測試信息流143
6.1.6軟體測試技術分類143
6.2白盒測試145
6.2.1邏輯覆蓋145
6.2.2循環測試148
6.2.3路徑測試149
6.3黑盒測試152
6.3.1等價類劃分152
6.3.2邊界值分析154
6.3.3錯誤推測法154
6.3.4因果圖法155
6.4白盒測試和黑盒測試的比較157
6.5軟體測試策略158
6.5.1單元測試158
6.5.2集成測試161
6.5.3確認測試164
6.5.4系統測試165
6.6調試167
6.6.1軟體調試過程167
6.6.2軟體調試方法168
6.7軟體測試報告169
6.7.1軟體測試說明169
6.7.2軟體測試報告170
6.8本章小結171
習題172
第7章UML統一建模語言/174
7.1UML的發展174
7.1.1UML的產生174
7.1.2UML的構成175
7.1.3UML的特點176
7.2面向對象的基本概念176
7.3UML視圖182
7.4UML的圖和模型元素183
7.4.1用例圖183
7.4.2類圖185
7.4.3包圖186
7.4.4狀態圖187
7.4.5活動圖187
7.4.6順序圖189
7.4.7協作圖190
7.4.8構件圖191
7.4.9配置圖192
7.5UML的關係192
7.5.1關聯關係193
7.5.2泛化關係196
7.5.3依賴關係199
7.5.4實現關係200
7.6UML的通用機制200
7.6.1修飾201
7.6.2注釋201
7.6.3規格說明201
7.6.4擴展機制202
7.7基於UML的軟體過程203
7.8本章小結205
習題206
第8章面向對象分析/207
8.1面向對象分析概述207
8.1.1傳統軟體過程中的不足207
8.1.2面向對象的特點208
8.1.3面向對象分析的基本過程209
8.1.4面向對象分析的3類模型209
8.1.5靜態模型的5個層次210
8.2建立功能模型(用例模型)211
8.2.1識別參與者212
8.2.2識別用例212
8.2.3識別用例間關係214
8.2.4用例描述文檔215
8.3建立靜態模型(對象模型)216
8.3.1識別類與對象216
8.3.2劃分主題218
8.3.3確定結構219
8.3.4確定屬性220
8.3.5確定服務221
8.3.6類圖描述文檔221
8.3.7包圖描述文檔222
8.4建立動態模型223
8.4.1建立順序圖及其描述文檔223
8.4.2建立狀態圖及其描述文檔225
8.4.3建立協作圖及其描述文檔226
8.4.4建立活動圖及其描述文檔227
8.5本章小結229
習題229
第9章面向對象設計/231
9.1面向對象設計概述231
9.1.1面向對象分析與設計的關係231
9.1.2面向對象設計原則232
9.2精化類及類間關係233
9.2.1設計類的屬性233
9.2.2設計類的方法234
9.2.3設計類間泛化關係235
9.2.4設計關聯類236
9.3數據設計237
9.3.1基於關係資料庫的數據設計237
9.3.2基於其他方式的數據設計239
9.4人機互動設計240
9.5建立實現模型241
9.5.1構件圖及其描述文檔241
9.5.2配置圖及其描述文檔243
9.6設計模式簡介244
9.6.1概述244
9.6.2Singleton模式245
9.6.3Abstract Factory模式247
9.6.4Mediator模式249
9.6.5Adapter模式251
9.6.6Iterator模式253
9.6.7State模式256
9.7面向對象的測試258
9.7.1面向對象測試概述258
9.7.2面向對象的單元測試259
9.8本章小結261
習題262
第10章軟體維護/265
10.1軟體維護概述265
10.1.1軟體維護的任務265
10.1.2軟體維護的特點266
10.1.3軟體維護的分類266
10.2軟體維護過程267
10.2.1軟體維護方式268
10.2.2軟體維護管理的基本內容269