本書的各個版本一直都是軟件專業(yè)人士熟悉的讀物,在國際軟件工程界享有無可質疑的權威地位。它在全面而系統(tǒng)、概括而清晰地介紹軟件工程的有關概念、原則、方法和工具方面獲得了廣大讀者的好評。此外,本書在給出傳統(tǒng)的、對學科發(fā)展具有深刻影響的方法時,又適當?shù)亟榻B了當前正在發(fā)展的、具有生命力的新技術。
本書是軟件工程領域的經(jīng)典著作,自第1版出版至今,近40年來在軟件工程界產(chǎn)生了巨大而深遠的影響。第9版在繼承之前版本風格與優(yōu)勢的基礎上,不僅更新了全書內容,而且優(yōu)化了篇章結構。本書共五個部分,涵蓋軟件過程、建模、質量與安全、軟件項目管理等主題,對概念、原則、方法和工具的介紹細致、清晰且實用。此外,書中還提供了豐富的擴展閱讀資源和網(wǎng)絡資源。
第9版重要更新
刪繁就簡,將之前英文版近千頁的內容縮減到讀者易于通讀的篇幅,使重點更加突出。
與時俱進,添加了軟件過程改進、人工智能軟件、軟件工程中的數(shù)據(jù)科學等新問題。
面向教學,針對教學需求做了細致的修訂,便于教師甄選教學內容。
如果有這樣一款計算機軟件它能滿足用戶的需求,能在相當長的時間內無故障地運行,修改起來輕松便捷,使用起來更是得心應手,那么,這款軟件必定是成功的,它切實改善了我們的生活。但是,如果有這樣一款軟件它令用戶失望,錯誤頻出,修改起來困難重重,使用起來更是舉步維艱,那么,這必定是一款失敗的軟件,它使我們的生活一團糟。誰都希望開發(fā)出優(yōu)秀的軟件,為我們的生活帶來便利,而不是讓自己陷入失敗的深淵。要想使軟件獲得成功,在設計和構建軟件時就需要有規(guī)范,需要采用工程化的方法。
本書第1版問世以來的近40年中,軟件工程已經(jīng)從少數(shù)倡導者提出的一些朦朧概念發(fā)展成為一門正規(guī)的工程學科,已被公認是一個值得深入研究、認真學習和熱烈討論的課題。在整個行業(yè)中,軟件工程師已經(jīng)成為人們優(yōu)先選擇的工作崗位,軟件過程模型、軟件工程方法和軟件工具都已在全行業(yè)的所有環(huán)節(jié)被成功采用。
盡管管理人員和一線專業(yè)人員都承認需要有更規(guī)范的軟件方法,但他們卻始終在爭論應該采用什么樣的規(guī)范。有許多個人和公司至今仍在雜亂無章地開發(fā)著自己的軟件,即使他們正在開發(fā)的系統(tǒng)要服務于當今的技術,狀況也是如此。許多專業(yè)人員和學生并不了解現(xiàn)代方法,這導致他們所開發(fā)的軟件質量很差,因而造成了嚴重的后果。此外,有關軟件工程方法真實本質的爭論一直在持續(xù)進行著。軟件工程的地位問題已成為一門對比研究課題。人們對軟件工程的態(tài)度已經(jīng)有所改善,研究工作已取得了進展,不過要使軟件工程成為一門完全成熟的學科,我們還有大量工作要做。
第9版的新變化
我們希望本書能夠成為引導讀者進入正在走向成熟的軟件工程學科的入門讀物。和以前的8個版本一樣,第9版對學生和專業(yè)人員同樣具有很強的吸引力。它既是軟件專業(yè)人員的工作指南,也是高年級本科生和一年級研究生的綜合性參考書。
第9版中包含了許多新的內容,它絕不只是前一版的簡單更新。這一版不僅對內容做了適當?shù)男薷模艺{整了全書的結構,以改進教學順序。同時,更加強調一些新的、重要的軟件工程過程和軟件工程實踐知識。此外,本書進一步加強了支持系統(tǒng),為學生、教師和專業(yè)人員提供了更為豐富的知識資源。
過去幾版的讀者會注意到,第9版的篇幅有所減少。我們的目標是簡明扼要,使這本書從教學的角度來看更有利,并使希望閱讀整本書的讀者不那么畏懼。關于著名數(shù)學家和物理學家布萊斯·帕斯卡(Blaise Pascal)的一個趣聞中提到,帕斯卡在寫給朋友的一封很長的信中以這句話結尾:我想給你寫一封簡短的信,但我沒有時間。當對第9版進行精簡時,我們開始體會到帕斯卡所說這句話的意義。
篇章結構
本書共30章,分為五個部分。這種劃分有利于那些無法在一個學期內講完全書內容的教師靈活安排教學工作。
部分軟件過程給出了有關軟件過程的各種不同觀點,討論了幾種重要的過程模型和框架,還涉及慣用過程和敏捷過程在指導思想上的分歧。第二部分建模給出了分析方法和設計方法,重點講解面向對象方法和UML建模,介紹基于模式的設計以及用于移動應用程序的設計。此外,用戶體驗設計也在本部分展開。第三部分質量與安全介紹了有關質量管理的概念、規(guī)程、技術和方法,使得軟件團隊能夠很好地評估軟件質量,評審軟件工程工作產(chǎn)品,實施軟件質量保證規(guī)程,并正確地運用有效的測試策略和技術。此外,我們還介紹了如何在增量軟件開發(fā)模型中插入軟件安全性實踐。第四部分軟件項目管理介紹了與計劃、管理和控制軟件開發(fā)項目的人員有關的問題。第五部分高級課題討論了軟件過程改進和軟件工程的發(fā)展趨勢。在本書中,還通過模塊的方式,介紹了一個軟件團隊(虛構的)所經(jīng)歷的考驗和困難,并提供了與章節(jié)主題相關的方法和工具的補充材料。
這五個部分的劃分有利于教師根據(jù)學時和教學要求安排課堂內容。在一個學期內可以安排一個部分的內容,也可以安排多個部分的內容。軟件工程概論課程可以從五個部分中選擇若干章作為教材。側重分析和設計的軟件工程課程可以從部分和第二部分中選取素材。面向測試的軟件工程課程則可以從部分和第三部分中選取素材,還應加上第二部分中的一些內容。側重管理的課程應突出部分和第四部分的內容。我們用上述方式組織第9版的內容,旨在為教師提供多種教學安排的選擇。但無論如何選擇這些內容,都可以從支持系統(tǒng)中獲得補充資源。
相關資源
可以通過教師網(wǎng)站訪問各種資源,包括一個資源豐富的在線學習中心(其中包括習題解決方案)、各種基于Web的資源(軟件工程檢查單)、一套不斷演化的小工具以及綜合案例研究。專業(yè)資源提供了數(shù)百種分類的Web參考資料,使學生可以更深入地探索軟件工程,同時,參考資料庫還有指向數(shù)百個可下載參考資料的鏈接,這些參考資料提供了獲取高級軟件工程信息的深入來源。此外,還提供了完整的在線教師指南,包括輔助教學材料以及可用于授課的PPT。
在本書的教師指南中,我們?yōu)楦鞣N類型的軟件工程課程提出了建議,提供了與課程配合開展的軟件項目、部分習題的題解和許多有用的教學輔助工具。
由于有了在線支持系統(tǒng)的配合,本書既有內容上的深度,又有一定的靈活性,這些優(yōu)勢是傳統(tǒng)的教科書所無法比擬的。
布魯斯·馬克西姆(Bruce Maxim)編寫了第9版的新內容,而羅杰·普萊斯曼(Roger Pressman)則擔任主編,并對相關內容做出了貢獻。
掃描二維碼可獲得的中文材料
本書采用一書一碼的方式,即一本書對應一個專有的二維碼(見本書前面的襯紙)。掃描二維碼獲取閱讀權限后,可瀏覽以下電子數(shù)據(jù)資源。
附錄1 UML簡介
附錄2 面向軟件工程師的數(shù)據(jù)科學
參考文獻
未來我們還可能通過該二維碼提供更多的增值服務,例如習題答案、教師的授課視頻等。
致謝
卡內基·梅隆大學軟件工程研究所的Nancy Mead撰寫了有關軟件安全工程的章節(jié);渥太華大學的Tim Lethbridge協(xié)助我們編寫了UML和OCL示例,以及本書配套的案例研究;Colby學院的Dale Skrien編寫了附錄1的UML教程;密歇根大學迪爾伯恩分校的William Grosky與他的學生Terry Ruas合作編寫了附錄2的數(shù)據(jù)科學概述;我們的澳大利亞同事Margaret Kellow更新了本書配套的Web教學資料。此外,我們還要感謝Austin Krauss,他從高級軟件工程師的角度,對電子游戲產(chǎn)業(yè)的軟件開發(fā)提供了寶貴意見。
特別感謝
十分高興有機會與羅杰合作,參與本書第9版的撰寫工作。在此期間我的兒子Benjamin成為軟件工程經(jīng)理,而我的女兒Katherine則利用她的藝術背景創(chuàng)建了本書各章中的插圖。我十分高興地看到他們已經(jīng)長大成人,并和他們的孩子(Isla、Emma和 Thelma)一起享受快樂時光。同時非常感謝妻子Norma,她的支持使我能夠將所有空閑時間都投入到本書的寫作之中。
布魯斯·R. 馬克西姆(Bruce R. Maxim)
隨著本書各版本的不斷推出,我的兩個兒子Mathew和Michael也逐漸從小男孩成長為男子漢。他們在生活中的成熟、品格和成功鼓舞著我。經(jīng)過多年的職業(yè)發(fā)展,我們三個人現(xiàn)在一起在我們于2012年創(chuàng)立的公司中工作,沒有什么比這更讓我自豪了。我的兩個兒子現(xiàn)在也已經(jīng)有了自己的孩子Maya和Lily。后要感謝我的妻子Barbara,她對我花費如此多的時間在辦公室工作表示理解與支持,并且鼓勵我繼續(xù)寫作本書的下一個版本。
羅杰·S.普萊斯曼(Roger S. Pressman)
出版者的話
譯者序
前言
作者簡介
第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 原型開發(fā)過程模型 21
2.5.3 演化過程模型 23
2.5.4 統(tǒng)一過程模型 25
2.6 產(chǎn)品和過程 26
2.7 小結 27
習題與思考題 28
第3章 敏捷和敏捷過程 29
3.1 什么是敏捷 30
3.2 敏捷及變更成本 30
3.3 什么是敏捷過程 31
3.3.1 敏捷原則 31
3.3.2 敏捷開發(fā)戰(zhàn)略 32
3.4 Scrum 32
3.4.1 Scrum團隊和制品 34
3.4.2 沖刺規(guī)劃會議 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 繼續(xù)與否的決策 49
4.7 原型演化 50
4.7.1 新原型范圍 51
4.7.2 構建新原型 51
4.7.3 測試新原型 51
4.8 原型發(fā)布 52
4.9 維護發(fā)布軟件 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 協(xié)商 80
7.1.5 規(guī)格說明 80
7.1.6 確認 81
7.1.7 需求管理 81
7.2 建立根基 82
7.2.1 確認利益相關者 82
7.2.2 識別多重觀點 82
7.2.3 協(xié)作 82
7.2.4 首次提問 83
7.2.5 非功能需求 84
7.2.6 可追溯性 84
7.3 獲取需求 84
7.3.1 協(xié)作收集需求 84
7.3.2 使用場景 87
7.3.3 獲取工作產(chǎn)品 88
7.4 開發(fā)用例 88
7.5 構建分析模型 91
7.5.1 分析模型的元素 92
7.5.2 分析模式 93
7.6 協(xié)商需求 94
7.7 需求監(jiān)控 95
7.8 確認需求 95
7.9 小結 95
習題與思考題 96
第8章 需求建模一種推薦的方法 97
8.1 需求分析 98
8.1.1 總體目標和原理 98
8.1.2 分析的經(jīng)驗原則 99
8.1.3 需求建模原則 99
8.2 基于場景建模 100
8.2.1 參與者和用戶概要文件 100
8.2.2 創(chuàng)建用例 100
8.2.3 編寫用例 103
8.3 基于類建模 105
8.3.1 識別分析類 105
8.3.2 定義屬性和操作 107
8.3.3 UML類模型 108
8.3.4 類職責協(xié)作者建模 110
8.4 功能建模 112
8.4.1 過程視圖 112
8.4.2 UML順序圖 113
8.5 行為建模 114
8.5.1 識別用例事件 114
8.5.2 UML狀態(tài)圖 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