軟件工程:實踐者的研究方法 (原書第9版) Loose Leaf for Software Engineering: A Practitioner's Approach

(美)羅傑·S. 普萊斯曼(Roger S. Pressman),(美)布魯斯·R. 馬克西姆(Bruce R. Maxim)著

買這商品的人也買了...

商品描述

《軟件工程:實踐者的研究方法》自出版四十年來,在蘊含、積累、沉澱軟件工程基本原理和核心思想的同時,不斷融入軟件工程理論、方法與技術的新進展,已修訂再版9次,堪稱是軟件工程教科書中的經典。當今人類社會正在進入軟件定義一切的時代,軟件的需求空間被進一步拓展,軟件工程專業人才需求持續增長,教育已經成為軟件工程真正的“銀彈”。該書是軟件工程專業本科生和研究生、軟件企業技術人員的一本重要教材和參考書,其中文版的出版將在我國軟件工程專業教育領域發揮重要作用。
—— 李宣東,南京大學教授,南京大學軟件學院院長
國務院學位委員會軟件工程學科評議組成員,中國電腦學會軟件工程專業委員會主任
本書是軟件工程領域的經典著作,自第1版出版至今,近40年來在軟件工程界產生了巨大而深遠的影響。第9版在繼承之前版本風格與優勢的基礎上,不僅更新了全書內容,而且優化了篇章結構。本書共五個部分,涵蓋軟件過程、建模、質量與安全、軟件項目管理等主題,對概念、原則、方法和工具的介紹細致、清晰且實用。此外,書中還提供了豐富的擴展閱讀資源和網絡資源。


刪繁就簡,將之前英文版近千頁的內容縮減到讀者易於通讀的篇幅,使重點更加突出。
與時俱進,添加了軟件過程改進、人工智能軟件、軟件工程中的數據科學等新問題。
面向教學,針對教學需求做了細致的修訂,便於教師甄選教學內容。

作者簡介

羅傑·S. 普萊斯曼
(Roger S. Pressman)
軟件工程界國際知名的顧問和作家,作為工程師、經理人、教授、演講家和企業家奮戰在這一領域近50年。
他現任一家諮詢公司的總裁,致力於協助企業建立有效的軟件工程實踐;還是一家汽車零部件公司的創始人,專注於為特斯拉汽車設計和生產配件產品。


布魯斯·R. 馬克西姆
(Bruce R. Maxim)
作為軟件工程師、項目經理、教授、作家和諮詢師,擁有超過30年的從業經驗,研究興趣涉及軟件工程、用戶體驗設計、遊戲開發和工程教育等領域。
他曾任某遊戲開發公司的首席技術官,現任密歇根大學迪爾伯恩分校教授,為該校工程與計算機科學學院建立了遊戲實驗室。

目錄大綱

出版者的話
譯者序
前言
作者簡介
第1章  軟件與軟件工程 1
1.1 軟件的本質 3
1.1.1 定義軟件 4
1.1.2 軟件應用領域 5
1.1.3 遺留軟件 6
1.2 定義軟件工程學科 6
1.3 軟件過程 7
1.3.1 過程框架 7
1.3.2 普適性活動 8
1.3.3 過程的適應性調整 9
1.4 軟件工程實踐 9
1.4.1 實踐的精髓 9
1.4.2 通用原則 10
1.5 這一切是如何開始的 12
1.6 小結 13
習題與思考題 13
第一部分 軟件過程
第2章 過程模型 16
2.1 通用過程模型 16
2.2 定義框架活動 18
2.3 明確任務集 19
2.4 過程評估與改進 19
2.5 慣用過程模型 20
2.5.1 瀑布模型 20
2.5.2 原型開發過程模型 21
2.5.3 演化過程模型 23
2.5.4 統一過程模型 25
2.6 產品和過程 26
2.7 小結 27
習題與思考題 28
第3章 敏捷和敏捷過程 29
3.1 什麽是敏捷 30
3.2 敏捷及變更成本 30
3.3 什麽是敏捷過程 31
3.3.1 敏捷原則 31
3.3.2 敏捷開發戰略 32
3.4 Scrum 32
3.4.1 Scrum團隊和製品 34
3.4.2 沖刺規劃會議 34
3.4.3 每日Scrum會議 34
3.4.4 沖刺評審會議 35
3.4.5 沖刺回顧 35
3.5 其他敏捷框架 35
3.5.1 XP框架 36
3.5.2 看板法 37
3.5.3 DevOps 38
3.6 小結 39
習題與思考題 40
第4章 推薦的過程模型 41
4.1 需求定義 44
4.2 初步體系結構設計 44
4.3 資源估算 45
4.4 首次原型構建 46
4.5 原型評價 48
4.6 繼續與否的決策 49
4.7 原型演化 50
4.7.1 新原型範圍 51
4.7.2 構建新原型 51
4.7.3 測試新原型 51
4.8 原型發布 52
4.9 維護發布軟件 52
4.10 小結 54
習題與思考題 55
第5章 軟件工程的人員方面 56
5.1 軟件工程師的特質 56
5.2 軟件工程心理學 57
5.3 軟件團隊 58
5.4 團隊結構 59
5.5 社交媒體的影響 60
5.6 全球化團隊 60
5.7 小結 61
習題與思考題 61
第二部分 建模
第6章 指導實踐的原則 64
6.1 核心原則 65
6.1.1 指導過程的原則 65
6.1.2 指導實踐的原則 66
6.2 指導每個框架活動的原則 67
6.2.1 溝通原則 67
6.2.2 策劃原則 69
6.2.3 建模原則 71
6.2.4 構建原則 72
6.2.5 部署原則 75
6.3 小結 76
習題與思考題 77
第7章 理解需求 78
7.1 需求工程 79
7.1.1 起始 79
7.1.2 獲取 79
7.1.3 細化 80
7.1.4 協商 80
7.1.5 規格說明 80
7.1.6 確認 81
7.1.7 需求管理 81
7.2 建立根基 82
7.2.1 確認利益相關者 82
7.2.2 識別多重觀點 82
7.2.3 協作 82
7.2.4 首次提問 83
7.2.5 非功能需求 84
7.2.6 可追溯性 84
7.3 獲取需求 84
7.3.1 協作收集需求 84
7.3.2 使用場景 87
7.3.3 獲取工作產品 88
7.4 開發用例 88
7.5 構建分析模型 91
7.5.1 分析模型的元素 92
7.5.2 分析模式 93
7.6 協商需求 94
7.7 需求監控 95
7.8 確認需求 95
7.9 小結 95
習題與思考題 96
第8章 需求建模——一種推薦的方法 97
8.1 需求分析 98
8.1.1 總體目標和原理 98
8.1.2 分析的經驗原則 99
8.1.3 需求建模原則 99
8.2 基於場景建模 100
8.2.1 參與者和用戶概要文件 100
8.2.2 創建用例 100
8.2.3 編寫用例 103
8.3 基於類建模 105
8.3.1 識別分析類 105
8.3.2 定義屬性和操作 107
8.3.3 UML類模型 108
8.3.4 類–職責–協作者建模 110
8.4 功能建模 112
8.4.1 過程視圖 112
8.4.2 UML順序圖 113
8.5 行為建模 114
8.5.1 識別用例事件 114
8.5.2 UML狀態圖 115
8.5.3 UML活動圖 116
8.6 小結 118
習題與思考題 119
第9章 設計概念 120
9.1 軟件工程中的設計 121
9.2 設計過程 123
9.2.1 軟件質量指導原則和屬性 123
9.2.2 軟件設計的演化 124
9.3 設計概念 125
9.3.1 抽象 125
9.3.2 體系結構 126
9.3.3 模式 126
9.3.4 關註點分離 127
9.3.5 模塊化 127
9.3.6 信息隱蔽 128
9.3.7 功能獨立 128
9.3.8 逐步求精 129
9.3.9 重構 129
9.3.10 設計類 130
9.4 設計模型 132
9.4.1 設計建模原則 133
9.4.2 數據設計元素 134
9.4.3 體系結構設計元素 134
9.4.4 接口設計元素 134
9.4.5 構件級設計元素 136
9.4.6 部署級設計元素 136
9.5 小結 137
習題與思考題 138
第10章 體系結構設計——一種推薦的方法 139
10.1 軟件體系結構 140
10.1.1 什麽是體系結構 140
10.1.2 體系結構的重要性 140
10.1.3 體系結構描述 141
10.1.4 體系結構決策 141
10.2 敏捷性和體系結構 142
10.3 體系結構風格 143
10.3.1 體系結構風格的簡單分類 144
10.3.2 體系結構模式 147
10.3.3 組織和求精 148
10.4 體系結構考慮要素 148
10.5 體系結構決策 149
10.6 體系結構設計 150
10.6.1 系統在上下文中的表示 150
10.6.2 定義體系結構原型 151
10.6.3 將體系結構細化為構件 152
10.6.4 描述系統實例 153
10.7 評估候選的體系結構設計 153
10.7.1 體系結構評審 155
10.7.2 基於模式的體系結構評審 155
10.7.3 體系結構的一致性檢查 156
10.8 小結 156
習題與思考題 157
第11章 構件級設計 158
11.1 什麽是構件 158
11.1.1 面向對象的觀點 159
11.1.2 傳統的觀點 159
11.1.3 過程相關的觀點 161
11.2 設計基於類的構件 162
11.2.1 基本設計原則 162
11.2.2 構件級設計指導方針 165
11.2.3 內聚性 165
11.2.4 耦合 167
11.3 實施構件級設計 168
11.4 專用的構件級設計 173
11.4.1 WebApp的構件級設計 173
11.4.2 移動App的構件級設計 173
11.4.3 設計傳統構件 174
11.4.4 基於構件的開發 174
11.5 構件重構 176
11.6 小結 176
習題與思考題 177
第12章 用戶體驗設計 178
12.1 用戶體驗設計元素 179
12.1.1 信息體系結構 179
12.1.2 用戶交互設計 180
12.1.3 可用性工程 180
12.1.4 可視化設計 181
12.2 黃金規則 181
12.2.1 把控制權交給用戶 182
12.2.2 減輕用戶的記憶負擔 182
12.2.3 保持界面一致 183
12.3 用戶界面的分析和設計 184
12.3.1 用戶界面分析和設計模型 184
12.3.2 過程 185
12.4 用戶體驗分析 186
12.4.1 用戶研究 186
12.4.2 用戶建模 187
12.4.3 任務分析 189
12.4.4 工作環境分析 190
12.5 用戶體驗設計 190
12.6 用戶界面設計 191
12.6.1 應用界面設計步驟 191
12.6.2 用戶界面設計模式 193
12.7 設計評估 193
12.7.1 原型審查 194
12.7.2 用戶測試 195
12.8 可用性和可訪問性 195
12.8.1 可用性準則 196
12.8.2 可訪問性準則 198
12.9 傳統軟件UX和移動性 199
12.10 小結 199
習題與思考題 200
第13章 移動設計 201
13.1 挑戰 202
13.1.1 開發因素 202
13.1.2 技術因素 202
13.2 移動開發生命周期 204
13.2.1 用戶界面設計 205
13.2.2 經驗教訓 206
13.3 移動體系結構 208
13.4 環境感知App 208
13.5 Web設計金字塔 209
13.5.1 WebApp界面設計 209
13.5.2 美學設計 210
13.5.3 內容設計 211
13.5.4 體系結構設計 211
13.5.5 導航設計 212
13.6 構件級設計 214
13.7 移動性與設計質量 214
13.8 移動設計的最佳實踐 216
13.9 小結 217
習題與思考題 218
第14章 基於模式的設計 219
14.1 設計模式 220
14.1.1 模式的種類 220
14.1.2 框架 222
14.1.3 描述模式 222
14.1.4 機器學習和模式發現 223
14.2 基於模式的軟件設計 223
14.2.1 不同環境下基於模式的設計 223
14.2.2 用模式思考 224
14.2.3 設計任務 225
14.2.4 建立模式組織表 226
14.2.5 常見設計錯誤 226
14.3 體系結構模式 227
14.4 構件級設計模式 227
14.5 反模式 229
14.6 用戶界面設計模式 230
14.7 移動設計模式 231
14.8 小結 232
習題與思考題 232
第三部分 質量與安全
第15章 質量概念 234
15.1 什麽是質量 234
15.2 軟件質量 235
15.2.1 質量因素 236
15.2.2 定性質量評估 237
15.2.3 定量質量評估 237
15.3 軟件質量困境 238
15.3.1 “足夠好”的軟件 238
15.3.2 質量的成本 239
15.3.3 風險 241
15.3.4 疏忽和責任 242
15.3.5 質量和安全 242
15.3.6 管理活動的影響 242
15.4 實現軟件質量 243
15.4.1 軟件工程方法 243
15.4.2 項目管理技術 243
15.4.3 機器學習和缺陷預測 243
15.4.4 質量控制 244
15.4.5 質量保證 244
15.5 小結 244
習題與思考題 244
第16章 評審—一種推薦的方法 246
16.1 軟件缺陷對成本的影響 247
16.2 缺陷的放大和消除 247
16.3 評審度量及其應用 248
16.4 不同形式評審的標準 250
16.5 非正式評審 250
16.6 正式技術評審 251
16.6.1 評審會議 252
16.6.2 評審報告和記錄保存 252
16.6.3 評審指導原則 253
16.7 產品完成後評估 254
16.8 敏捷評審 254
16.9 小結 255
習題與思考題 255
第17章 軟件質量保證 257
17.1 背景問題 258
17.2 軟件質量保證的要素 258
17.3 軟件質量保證的過程和產品特徵 259
17.4 軟件質量保證的任務、目標和度量 260
17.4.1 軟件質量保證的任務 260
17.4.2 目標、屬性和度量 261
17.5 軟件質量保證的形式化方法 262
17.6 統計軟件質量保證 263
17.6.1 一個普通的例子 263
17.6.2 軟件工程的六西格瑪 264
17.7 軟件可靠性 265
17.7.1 可靠性和可用性的測量 265
17.7.2 使用人工智能對可靠性進行建模 266
17.7.3 軟件安全 267
17.8 ISO 9000質量標準 267
17.9 軟件質量保證計劃 268
17.10 小結 269
習題與思考題 269
第18章 軟件安全性工程 270
18.1 軟件安全性工程的重要性 270
18.2 安全生命周期模型 271
18.3 安全開發生命周期活動 272
18.4 安全需求工程 273
18.4.1 SQUARE 273
18.4.2 SQUARE過程 273
18.5 誤用例、濫用例及攻擊方式 275
18.6 安全性風險分析 276
18.7 威脅建模、優先級排序和緩解 277
18.8 攻擊面 278
18.9 安全編碼 278
18.10 測量 279
18.11 安全過程改進和成熟度模型 280
18.12 小結 281
習題與思考題 281
第19章 軟件測試—構件級 282
19.1 軟件測試的策略性方法 282
19.1.1 驗證與確認 283
19.1.2 軟件測試組織 283
19.1.3 宏觀 284
19.1.4 測試完成的標準 286
19.2 規劃和記錄保存 286
19.2.1 “腳手架”的作用 287
19.2.2 高效測試 288
19.3 測試用例設計 288
19.3.1 需求和用例 290
19.3.2 可追溯性 290
19.4 白盒測試 290
19.4.1 基本路徑測試 290
19.4.2 控制結構測試 293
19.5 黑盒測試 293
19.5.1 接口測試 294
19.5.2 等價類劃分 294
19.5.3 邊界值分析 295
19.6 面向對象測試 295
19.6.1 類測試 295
19.6.2 行為測試 297
19.7 小結 298
習題與思考題 298
第20章 軟件測試—集成級 299
20.1 軟件測試基礎 300
20.1.1 黑盒測試 300
20.1.2 白盒測試 300
20.2 集成測試 301
20.2.1 自頂向下集成 301
20.2.2 自底向上集成 302
20.2.3 持續集成 303
20.2.4 集成測試工作產品 304
20.3 人工智能與回歸測試 304
20.4 面向對象環境中的集成測試 305
20.4.1 基於故障的測試用例設計 306
20.4.2 基於場景的測試用例設計 307
20.5 確認測試 308
20.6 測試模式 309
20.7 小結 309
習題與思考題 310
第21章 軟件測試—專門的移動性測試 311
21.1 移動測試準則 311
21.2 測試策略 312
21.3 用戶體驗測試相關問題 313
21.3.1 手勢測試 313
21.3.2 虛擬鍵盤輸入 314
21.3.3 語音輸入和識別 314
21.3.4 警報和異常條件 315
21.4 Web應用測試 315
21.5 Web測試策略 316
21.5.1 內容測試 317
21.5.2 界面測試 318
21.5.3 導航測試 318
21.6 國際化 319
21.7 安全性測試 319
21.8 性能測試 320
21.9 實時測試 322
21.10 測試AI系統 323
21.10.1 靜態測試和動態測試 323
21.10.2 基於模型的測試 324
21.11 測試虛擬環境 324
21.11.1 可用性測試 325
21.11.2 可訪問性測試 326
21.11.3 可玩性測試 327
21.12 測試文檔和幫助設施 327
21.13 小結 328
習題與思考題 329
第22章 軟件配置管理 330
22.1 軟件配置管理概述 331
22.1.1 SCM場景 331
22.1.2 配置管理系統的元素 332
22.1.3 基線 333
22.1.4 軟件配置項 334
22.1.5 依賴性和變更管理 334
22.2 SCM中心存儲庫 335
22.2.1 一般特徵和內容 335
22.2.2 SCM特徵 336
22.3 版本控制系統 336
22.4 持續集成 337
22.5 變更管理過程 337
22.5.1 變更控制 338
22.5.2 影響管理 340
22.5.3 配置審核 341
22.5.4 狀態報告 341
22.6 移動性和敏捷變更管理 341
22.6.1 變更控制 342
22.6.2 內容管理 343
22.6.3 集成和發布 344
22.6.4 版本控制 345
22.6.5 審核和報告 345
22.7 小結 346
習題與思考題 346
第23章 軟件度量和分析 347
23.1 軟件測量 348
23.1.1 測度、度量和指標 348
23.1.2 有效軟件度量的屬性 348
23.2 軟件分析 348
23.3 產品指標 349
23.3.1 需求模型的度量 350
23.3.2 常規軟件的設計度量 352
23.3.3 面向對象軟件的設計度量 353
23.3.4 用戶界面的設計度量 355
23.3.5 源代碼的度量 357
23.4  測試的度量 357
23.5 維護的度量 358
23.6 過程和項目度量 359
23.7 軟件測量 361
23.8 軟件質量的度量 363
23.9 制定軟件度量大綱 365
23.10 小結 367
習題與思考題 368
第四部分 軟件項目管理
第24章 項目管理概念 370
24.1 管理涉及的範圍 371
24.1.1 人員 371
24.1.2 產品 371
24.1.3 過程 371
24.1.4 項目 372
24.2 人員 372
24.2.1 利益相關者 372
24.2.2 團隊負責人 372
24.2.3 軟件團隊 373
24.2.4 協調和溝通問題 374
24.3 產品 375
24.3.1 軟件範圍  375
24.3.2 問題分解 376
24.4 過程 376
24.4.1 合並產品和過程 376
24.4.2 過程分解 377
24.5 項目 378
24.6 W5HH原則 379
24.7 關鍵實踐 379
24.8 小結 379
習題與思考題 380
第25章 制定可行的軟件計劃 381
25.1 對估算的看法 382
25.2 項目計劃過程 383
25.3 軟件範圍和可行性 383
25.4 資源 384
25.4.1 人力資源 384
25.4.2 可復用軟件資源 384
25.4.3 環境資源 385
25.5 數據分析和軟件項目估算 385
25.6 分解和估算技術 386
25.6.1 軟件規模估算 386
25.6.2 基於問題的估算 387
25.6.3 基於LOC估算的實例 387
25.6.4 基於FP估算的實例 388
25.6.5 基於過程估算的實例 389
25.6.6 基於用例點估算的實例 390
25.6.7 調和不同的估算方法 392
25.6.8 敏捷開發的估算 392
25.7 項目進度安排 393
25.7.1 基本原則 394
25.7.2 人員與工作量之間的關系 394
25.8 定義項目任務集 396
25.8.1 任務集舉例 396
25.8.2 主要任務的細化 397
25.9 定義任務網絡 397
25.10 進度安排 398
25.10.1 時序圖 398
25.10.2 跟蹤進度 399
25.11 小結 401
習題與思考題 401
第26章 風險管理 403
26.1 被動風險策略和主動風險策略 404
26.2 軟件風險 404
26.3 風險識別 405
26.3.1 評估整體項目風險 406
26.3.2 風險因素和驅動因子 407
26.4 風險預測 407
26.4.1 建立風險表 407
26.4.2 評估風險影響 409
26.5 風險細化 410
26.6 風險緩解、監測和管理 411
26.7 RMMM計劃 413
26.8 小結 414
習題與思考題 414
第27章 軟件支持策略 416
27.1 軟件支持 417
27.2 軟件維護 418
27.2.1 維護類型 419
27.2.2 維護任務 419
27.2.3 逆向工程 420
27.3 主動軟件支持 422
27.3.1 軟件分析的使用 422
27.3.2 社交媒體的作用 423
27.3.3 支持成本 423
27.4 重構 424
27.4.1 數據重構 424
27.4.2 代碼重構 425
27.4.3 體系結構重構 425
27.5 軟件演化 425
27.5.1 庫存目錄分析 426
27.5.2 文檔重構 427
27.5.3 逆向工程 427
27.5.4 代碼重構 427
27.5.5 數據重構 427
27.5.6 正向工程 427
27.6 小結 428
習題與思考題 428
第五部分 高級課題
第28章 軟件過程改進 430
28.1 什麽是SPI 431
28.1.1 SPI的方法 431
28.1.2 成熟度模型 432
28.1.3 SPI適合每個人嗎 432
28.2 SPI過程 432
28.2.1 評估和差異分析 433
28.2.2 教育和培訓 434
28.2.3 選擇和合理性判定 434
28.2.4 設置/遷移 434
28.2.5 評價 435
28.2.6 SPI的風險管理 435
28.3 CMMI 436
28.4 其他SPI框架 438
28.4.1 SPICE 438
28.4.2 TickIT Plus 439
28.5 SPI的投資回報率 439
28.6 SPI趨勢 439
28.7 小結 440
習題與思考題 440
第29章 軟件工程新趨勢 442
29.1 技術演變 443
29.2 作為一門學科的軟件工程 444
29.3 觀察軟件工程的發展趨勢 444
29.4 識別“軟趨勢” 445
29.4.1 管理復雜性 446
29.4.2 開放世界軟件 447
29.4.3 意外需求 447
29.4.4 人才技能結合 448
29.4.5 軟件構造塊 448
29.4.6 對“價值”認識的轉變 449
29.4.7 開源 449
29.5 技術方向 449
29.5.1 過程趨勢 449
29.5.2 巨大的挑戰 450
29.5.3 協同開發 451
29.5.4 需求工程 451
29.5.5 模型驅動的軟件開發 452
29.5.6 基於搜索的軟件工程 452
29.5.7 測試驅動的開發 453
29.6 相關工具的趨勢 454
29.7 小結 455
習題與思考題 455
第30章 結束語 456
30.1 再論軟件的重要性 457
30.2 人員及其構造系統的方式 457
30.3 知識發現 458
30.4 願景 459
30.5 軟件工程師的責任 460
30.6 寫在最後 461
索引 462
在線資源
附錄1 UML 簡介
附錄2 面向軟件工程師的數據科學
參考文獻