圖書簡介
本書是為計算機專業的本科生編寫的軟體工程教科書。它在一個軟體工程學總體的框架下來一一介紹軟體工程所涉及的重要的話題,章節的編排遵循一個軟體產品的生命周期中所要進行的所有活動的順序。首先概述了軟體工程的概念,包括一些重要的生命周期模型以及軟體項目管理的技術和概念。接下來詳述了軟體項目的需求分析、設計、建模及編碼和測試等內容。最後描述了軟體的質量管理、維護、復用等問題;同時也解釋了近年來發展起來的CASE工具的基本概念。
目錄
第1章概述 1
1.1軟體工程學科——發展和影響 2
1.1.1工程學科藝術的發展 2
1.1.2軟體危機的一個解決方案 3
1.2程式與軟體產品 4
1.3為什麼研究軟體工程 5
1.4軟體工程的出現 5
1.4.1早期計算機編程 6
1.4.2高級語言編程 6
1.4.3基於流程控制的設計 6
1.4.4面向數據結構的設計 8
1.4.5面向數據流的設計 8
1.4.6面向對象的設計 9
1.4.7其他發展 9
1.5軟體開發實踐中的重要變化 10
1.6計算機系統工程 11
1.7小結 12
1.8練習 12
第2章軟體生命周期模型 15
2.1為什麼使用生命周期 16
2.1.1為什麼要記錄一個生命周期模型 16
2.1.2階段出入標準 16
2.2經典瀑布模型 17
2.2.1可行性研究 18
2.2.2需求分析和說明 19
2.2.3設計 20
2.2.4編碼和單元測試 21
2.2.5集成和系統測試 22
2.2.6維護 22
2.3疊代瀑布模型 22
2.4原型模型 24
2.5進化模型 26
2.6螺旋模型 27
2.7不同生命周期模型的比較 28
2.8小結 29
2.9練習 30
第3章軟體項目管理 33
3.1軟體項目經理的職責 33
3.1.1軟體項目經理的工作職責 33
3.1.2軟體項目經理所必需的...
3.2項目規劃 34
3.3項目規模估算的度量 36
3.3.1代碼行(LOC) 36
3.3.2功能點度量 37
3.4項目估算方法 39
3.4.1經驗估算法 39
3.4.2啟發式方法 40
3.4.3分析估算法 40
3.5經驗估算法 40
3.5.1專家判斷法 41
3.5.2Delphi成本估算 41
3.6COCOMO——一種啟發式估算法 41
3.6.1基本COCOMO模型 42
3.6.2中等COCOMO模型 45
3.6.3完整COCOMO模型 45
3.7HALSTEAD的軟體科學——一種分析技術 46
3.7.1標準C語言的運算符和運算元 47
3.7.2長度和辭彙 47
3.7.3程式量 47
3.7.4潛在最小量 47
3.7.5工作量和時間 48
3.7.6長度估算 48
3.8人員配置級別估算 50
3.8.1Norden的工作 50
3.8.2Putnam的工作 50
3.8.3時間表改變對於成本的影響 51
3.8.4Jensen模型 52
3.9調度 52
3.9.1工作分解結構 53
3.9.2活動網路和關鍵路徑方法 54
3.9.3Gantt圖 55
3.9.4PERT圖 56
3.9.5項目監測和控制 57
3.10組織和團隊結構 57
3.10.1組織結構 58
3.10.2團隊結構 59
3.11人員配置 61
3.12風險管理 62
3.12.1風險識別 63
3.12.2風險評估 63
3.12.3風險遏制 63
3.13軟體組態管理 64
3.13.1軟體組態管理的必要性 65
3.13.2組態管理活動 65
3.13.3原始碼控制系統(SCCS)和RCS 67
3.14雜項計畫 67
3.15小結 68
3.16練習 68
第4章需求分析和規約 73
4.1需求收集和分析 74
4.2軟體需求規約(SRS) 75
4.2.1SRS文檔內容 76
4.2.2功能需求 77
4.2.3如何識別功能需求 78
4.2.4如何記錄功能需求 78
4.2.5可追蹤性 80
4.2.6好的SRS文檔的特徵 80
4.2.7差的SRS文檔的例子 81
4.2.8SRS文檔的組織 81
4.2.9表示複雜邏輯的技術 82
4.3形式系統開發技術 84
4.3.1什麼是形式技術 84
4.3.2模型與面向屬性的方法 85
4.3.3操作語義 85
4.3.4形式方法的優點和局限 86
4.4公理規約 87
4.5代數規約 88
4.5.1輔助函式 91
4.5.2結構規約 92
4.5.3代數規約的優劣 92
4.6可執行規約和4GL 92
4.7小結 93
4.8練習 93
第5章軟體設計 97
5.1什麼是一個優秀的軟體設計 98
5.2內聚和耦合 99
5.2.1內聚力的分類 100
5.2.2耦合的分類 101
5.3整齊排列 101
5.4軟體設計的方法 102
5.4.1面向功能的設計 103
5.4.2面向對象的設計 103
5.5面向對象的設計與面向功能的設計 103
5.6小結 105
5.7練習 105
第6章面向功能的軟體設計 107
6.1SA/SD方法總覽 107
6.2結構分析 108
6.3數據流程圖(DFD) 108
6.3.1用於構建DFD的原始符號 109
6.3.2與設計DFD相關的一些重要概念 109
6.3.3開發一個系統的DFD模型 112
6.3.4DFD模型的缺點 121
6.4將DFD技術擴展到實時系統 121
6.5結構設計 122
6.5.1流程圖與結構圖 123
6.5.2將一個DFD模型轉換為一個結構圖 123
6.6細節設計 126
6.7設計審查 127
6.8小結 127
6.9練習 127
第7章使用UML的對象建模 139
7.1面向對象的概念總覽 139
7.1.1基本機制 140
7.1.2關鍵概念 143
7.1.3相關的技術名詞 147
7.1.4OOD的優勢 147
7.2統一建模語言(UML) 148
7.3UML圖 150
7.4使用實例模型 151
7.4.1用例的表示 152
7.4.2為什麼開發用例圖 154
7.4.3如何識別一個系統的用例 155
7.4.4基本用例與真實用例 155
7.4.5用例之間的共有屬性的因子化 155
7.4.6用例包 157
7.5類圖 158
7.6互動圖 162
7.7活動圖 164
7.8狀態圖 165
7.9小結 166
7.10練習 167
第8章面向對象的軟體開發 169
8.1設計模式 170
8.2一個泛化的面向對象的分析和設計過程 172
8.2.1總覽 172
8.2.2用例模型開發 173
8.2.3域建模 174
8.2.4實體對象的識別 175
8.2.5Booch的對象識別方法 176
8.2.6互動建模 177
8.2.7CRC卡片 177
8.3例子 178
8.4OOD好壞的標準 183
8.5小結 184
8.6練習 185
第9章用戶界面設計 187
9.1一個良好用戶界面的特徵 187
9.2基本概念 189
9.2.1用戶指南和線上幫助 189
9.2.2基於模式的界面與無模式的界面 190
9.2.3圖形用戶界面(GUI)與基於文本的用戶界面 190
9.3用戶界面的種類 191
9.3.1基於命令語言的界面 191
9.3.2基於選單的界面 192
9.3.3直接操作界面 194
9.4基於組件的GUI開發 194
9.4.1視窗系統 194
9.4.2控制項類型 197
9.4.3X-Window/Motif概述 198
9.4.4X架構 198
9.4.5可視化編程 199
9.4.6基於組件的GUI的規模度量 200
9.5用戶界面設計方法 200
9.5.1用戶界面設計中的人類認知能力的暗示 200
9.5.2GUI設計方法 201
9.5.3任務和對象建模 201
9.5.4選擇一個比喻 203
9.5.5互動設計和粗略布局 203
9.5.6用戶界面檢查 203
9.6小結 204
9.7練習 204
第10章編碼和測試 207
10.1編碼 207
10.2代碼複審 209
10.2.1代碼走查 209
10.2.2代碼檢查 210
10.2.3潔淨室測試 210
10.2.4軟體文檔 211
10.3測試 212
10.3.1什麼是測試 212
10.3.2驗證與確認 212
10.3.3測試用例的設計 212
10.4大型測試與小型測試 213
10.5單元測試 213
10.6黑盒測試 214
10.6.1等價類劃分 214
10.6.2邊界值分析 215
10.6.3黑盒測試集設計小結 215
10.7白盒測試 216
10.7.1語句覆蓋 216
10.7.2分支覆蓋 217
10.7.3條件覆蓋 217
10.7.4路徑覆蓋 217
10.7.5McCabe的圈複雜性度量 219
10.7.6基於數據流的測試 220
10.7.7變異測試 221
10.8調試 221
10.8.1調試方法 221
10.8.2調試指南 222
10.9程式分析工具 222
10.9.1靜態分析工具 222
10.9.2動態分析工具 223
10.10集成測試 223
10.11系統測試 225
10.11.1性能測試 225
10.11.2錯誤撒播 227
10.12和測試相關的一些一般問題 227
10.13小結 228
10.14練習 228
第11章軟體可靠性和質量管理 235
11.1軟體可靠性 235
11.1.1硬體與軟體可靠性 236
11.1.2可靠性度量 237
11.1.3可靠性增長建模 238
11.2統計測試 239
11.3軟體質量 240
11.4軟體質量管理體系 241
11.5ISO9000 242
11.5.1什麼是ISO9000認證 242
11.5.2軟體行業的ISO9000 242
11.5.3為什麼要得到ISO9000認證 243
11.5.4如何獲得ISO9000認證 243
11.5.5ISO9001需求概述 244
11.5.6ISO9001需求的顯著特徵 246
11.5.7ISO9000認證的缺點 246
11.6SEI能力成熟度模型 246
11.6.1ISO9000和SEI/CMM的比較 248
11.6.2SEICMM是否適用於小型組織 248
11.7個體軟體過程(PSP) 249
11.8六西格瑪 250
11.9小結 251
11.10練習 251
第12章計算機輔助軟體工程 255
12.1CASE及其範圍 255
12.2CASE環境 255
12.3軟體生命周期中的CASE支持 257
12.3.1原型支持 257
12.3.2結構分析和設計 258
12.3.3代碼生成 258
12.3.4測試CASE生成器 258
12.4CASE工具的其他特徵 258
12.4.1硬體和環境需求 259
12.4.2文檔支持 259
12.4.3項目管理 259
12.4.4外部界面 259
12.4.5逆向工程支持 259
12.4.6數據詞典界面 260
12.4.7教程和幫助 260
12.5朝著第二代CASE工具前進 260
12.6一個CASE環境的架構 260
12.7小結 261
12.8練習 261
第13章軟體維護 263
13.1軟體維護的特徵 263
13.1.1軟體維護的類型 263
13.1.2軟體發展的特徵 264
13.1.3與軟體維護相關的特殊問題 264
13.2軟體逆向工程 265
13.3軟體維護過程模型 266
13.4維護成本的估測 268
13.5小結 269
13.6練習 269
第14章軟體復用 271
14.1什麼能夠復用 271
14.2為什麼這么久以來幾乎沒有復用 272
14.3復用程式中的基本問題 272
14.4一個復用方法 273
14.4.1域分析 273
14.4.2組件分類 274
14.4.3搜尋 274
14.4.4數據倉庫維護 275
14.4.5無修改的復用 275
14.5組織級別的復用 276
14.6小結 277
14.7練習 278
參考文獻 279