本書的各個版本一直都是軟件專業(yè)人士熟悉的讀物,在國際軟件工程界享有無可質(zhì)疑的權(quán)威地位。它在全面而系統(tǒng)、概括而清晰地介紹軟件工程的有關(guān)概念、原則、方法和工具方面獲得了廣大讀者的好評。此外,本書在給出傳統(tǒng)的、對學(xué)科發(fā)展具有深刻影響的方法時,又適當(dāng)?shù)亟榻B了當(dāng)前正在發(fā)展的、具有生命力的新技術(shù)。
本書是軟件工程領(lǐng)域的經(jīng)典著作,自第1版出版至今,近40年來在軟件工程界產(chǎn)生了巨大而深遠(yuǎn)的影響。第9版在繼承之前版本風(fēng)格與優(yōu)勢的基礎(chǔ)上,不僅更新了全書內(nèi)容,而且優(yōu)化了篇章結(jié)構(gòu)。本書共五個部分,涵蓋軟件過程、建模、質(zhì)量與安全、軟件項目管理等主題,對概念、原則、方法和工具的介紹細(xì)致、清晰且實用。此外,書中還提供了豐富的擴(kuò)展閱讀資源和網(wǎng)絡(luò)資源。
第9版重要更新
刪繁就簡,將之前英文版近千頁的內(nèi)容縮減到讀者易于通讀的篇幅,使重點更加突出。
與時俱進(jìn),添加了軟件過程改進(jìn)、人工智能軟件、軟件工程中的數(shù)據(jù)科學(xué)等新問題。
面向教學(xué),針對教學(xué)需求做了細(xì)致的修訂,便于教師甄選教學(xué)內(nèi)容。
如果有這樣一款計算機(jī)軟件它能滿足用戶的需求,能在相當(dāng)長的時間內(nèi)無故障地運行,修改起來輕松便捷,使用起來更是得心應(yīng)手,那么,這款軟件必定是成功的,它切實改善了我們的生活。但是,如果有這樣一款軟件它令用戶失望,錯誤頻出,修改起來困難重重,使用起來更是舉步維艱,那么,這必定是一款失敗的軟件,它使我們的生活一團(tuán)糟。誰都希望開發(fā)出優(yōu)秀的軟件,為我們的生活帶來便利,而不是讓自己陷入失敗的深淵。要想使軟件獲得成功,在設(shè)計和構(gòu)建軟件時就需要有規(guī)范,需要采用工程化的方法。
本書第1版問世以來的近40年中,軟件工程已經(jīng)從少數(shù)倡導(dǎo)者提出的一些朦朧概念發(fā)展成為一門正規(guī)的工程學(xué)科,已被公認(rèn)是一個值得深入研究、認(rèn)真學(xué)習(xí)和熱烈討論的課題。在整個行業(yè)中,軟件工程師已經(jīng)成為人們優(yōu)先選擇的工作崗位,軟件過程模型、軟件工程方法和軟件工具都已在全行業(yè)的所有環(huán)節(jié)被成功采用。
盡管管理人員和一線專業(yè)人員都承認(rèn)需要有更規(guī)范的軟件方法,但他們卻始終在爭論應(yīng)該采用什么樣的規(guī)范。有許多個人和公司至今仍在雜亂無章地開發(fā)著自己的軟件,即使他們正在開發(fā)的系統(tǒng)要服務(wù)于當(dāng)今的技術(shù),狀況也是如此。許多專業(yè)人員和學(xué)生并不了解現(xiàn)代方法,這導(dǎo)致他們所開發(fā)的軟件質(zhì)量很差,因而造成了嚴(yán)重的后果。此外,有關(guān)軟件工程方法真實本質(zhì)的爭論一直在持續(xù)進(jìn)行著。軟件工程的地位問題已成為一門對比研究課題。人們對軟件工程的態(tài)度已經(jīng)有所改善,研究工作已取得了進(jìn)展,不過要使軟件工程成為一門完全成熟的學(xué)科,我們還有大量工作要做。
第9版的新變化
我們希望本書能夠成為引導(dǎo)讀者進(jìn)入正在走向成熟的軟件工程學(xué)科的入門讀物。和以前的8個版本一樣,第9版對學(xué)生和專業(yè)人員同樣具有很強(qiáng)的吸引力。它既是軟件專業(yè)人員的工作指南,也是高年級本科生和一年級研究生的綜合性參考書。
第9版中包含了許多新的內(nèi)容,它絕不只是前一版的簡單更新。這一版不僅對內(nèi)容做了適當(dāng)?shù)男薷模艺{(diào)整了全書的結(jié)構(gòu),以改進(jìn)教學(xué)順序。同時,更加強(qiáng)調(diào)一些新的、重要的軟件工程過程和軟件工程實踐知識。此外,本書進(jìn)一步加強(qiáng)了支持系統(tǒng),為學(xué)生、教師和專業(yè)人員提供了更為豐富的知識資源。
過去幾版的讀者會注意到,第9版的篇幅有所減少。我們的目標(biāo)是簡明扼要,使這本書從教學(xué)的角度來看更有利,并使希望閱讀整本書的讀者不那么畏懼。關(guān)于著名數(shù)學(xué)家和物理學(xué)家布萊斯·帕斯卡(Blaise Pascal)的一個趣聞中提到,帕斯卡在寫給朋友的一封很長的信中以這句話結(jié)尾:我想給你寫一封簡短的信,但我沒有時間。當(dāng)對第9版進(jìn)行精簡時,我們開始體會到帕斯卡所說這句話的意義。
篇章結(jié)構(gòu)
本書共30章,分為五個部分。這種劃分有利于那些無法在一個學(xué)期內(nèi)講完全書內(nèi)容的教師靈活安排教學(xué)工作。
部分軟件過程給出了有關(guān)軟件過程的各種不同觀點,討論了幾種重要的過程模型和框架,還涉及慣用過程和敏捷過程在指導(dǎo)思想上的分歧。第二部分建模給出了分析方法和設(shè)計方法,重點講解面向?qū)ο蠓椒ê蚒ML建模,介紹基于模式的設(shè)計以及用于移動應(yīng)用程序的設(shè)計。此外,用戶體驗設(shè)計也在本部分展開。第三部分質(zhì)量與安全介紹了有關(guān)質(zhì)量管理的概念、規(guī)程、技術(shù)和方法,使得軟件團(tuán)隊能夠很好地評估軟件質(zhì)量,評審軟件工程工作產(chǎn)品,實施軟件質(zhì)量保證規(guī)程,并正確地運用有效的測試策略和技術(shù)。此外,我們還介紹了如何在增量軟件開發(fā)模型中插入軟件安全性實踐。第四部分軟件項目管理介紹了與計劃、管理和控制軟件開發(fā)項目的人員有關(guān)的問題。第五部分高級課題討論了軟件過程改進(jìn)和軟件工程的發(fā)展趨勢。在本書中,還通過模塊的方式,介紹了一個軟件團(tuán)隊(虛構(gòu)的)所經(jīng)歷的考驗和困難,并提供了與章節(jié)主題相關(guān)的方法和工具的補(bǔ)充材料。
這五個部分的劃分有利于教師根據(jù)學(xué)時和教學(xué)要求安排課堂內(nèi)容。在一個學(xué)期內(nèi)可以安排一個部分的內(nèi)容,也可以安排多個部分的內(nèi)容。軟件工程概論課程可以從五個部分中選擇若干章作為教材。側(cè)重分析和設(shè)計的軟件工程課程可以從部分和第二部分中選取素材。面向測試的軟件工程課程則可以從部分和第三部分中選取素材,還應(yīng)加上第二部分中的一些內(nèi)容。側(cè)重管理的課程應(yīng)突出部分和第四部分的內(nèi)容。我們用上述方式組織第9版的內(nèi)容,旨在為教師提供多種教學(xué)安排的選擇。但無論如何選擇這些內(nèi)容,都可以從支持系統(tǒng)中獲得補(bǔ)充資源。
相關(guān)資源
可以通過教師網(wǎng)站訪問各種資源,包括一個資源豐富的在線學(xué)習(xí)中心(其中包括習(xí)題解決方案)、各種基于Web的資源(軟件工程檢查單)、一套不斷演化的小工具以及綜合案例研究。專業(yè)資源提供了數(shù)百種分類的Web參考資料,使學(xué)生可以更深入地探索軟件工程,同時,參考資料庫還有指向數(shù)百個可下載參考資料的鏈接,這些參考資料提供了獲取高級軟件工程信息的深入來源。此外,還提供了完整的在線教師指南,包括輔助教學(xué)材料以及可用于授課的PPT。
在本書的教師指南中,我們?yōu)楦鞣N類型的軟件工程課程提出了建議,提供了與課程配合開展的軟件項目、部分習(xí)題的題解和許多有用的教學(xué)輔助工具。
由于有了在線支持系統(tǒng)的配合,本書既有內(nèi)容上的深度,又有一定的靈活性,這些優(yōu)勢是傳統(tǒng)的教科書所無法比擬的。
布魯斯·馬克西姆(Bruce Maxim)編寫了第9版的新內(nèi)容,而羅杰·普萊斯曼(Roger Pressman)則擔(dān)任主編,并對相關(guān)內(nèi)容做出了貢獻(xiàn)。
掃描二維碼可獲得的中文材料
本書采用一書一碼的方式,即一本書對應(yīng)一個專有的二維碼(見本書前面的襯紙)。掃描二維碼獲取閱讀權(quán)限后,可瀏覽以下電子數(shù)據(jù)資源。
附錄1 UML簡介
附錄2 面向軟件工程師的數(shù)據(jù)科學(xué)
參考文獻(xiàn)
未來我們還可能通過該二維碼提供更多的增值服務(wù),例如習(xí)題答案、教師的授課視頻等。
致謝
卡內(nèi)基·梅隆大學(xué)軟件工程研究所的Nancy Mead撰寫了有關(guān)軟件安全工程的章節(jié);渥太華大學(xué)的Tim Lethbridge協(xié)助我們編寫了UML和OCL示例,以及本書配套的案例研究;Colby學(xué)院的Dale Skrien編寫了附錄1的UML教程;密歇根大學(xué)迪爾伯恩分校的William Grosky與他的學(xué)生Terry Ruas合作編寫了附錄2的數(shù)據(jù)科學(xué)概述;我們的澳大利亞同事Margaret Kellow更新了本書配套的Web教學(xué)資料。此外,我們還要感謝Austin Krauss,他從高級軟件工程師的角度,對電子游戲產(chǎn)業(yè)的軟件開發(fā)提供了寶貴意見。
特別感謝
十分高興有機(jī)會與羅杰合作,參與本書第9版的撰寫工作。在此期間我的兒子Benjamin成為軟件工程經(jīng)理,而我的女兒Katherine則利用她的藝術(shù)背景創(chuàng)建了本書各章中的插圖。我十分高興地看到他們已經(jīng)長大成人,并和他們的孩子(Isla、Emma和 Thelma)一起享受快樂時光。同時非常感謝妻子Norma,她的支持使我能夠?qū)⑺锌臻e時間都投入到本書的寫作之中。
布魯斯·R. 馬克西姆(Bruce R. Maxim)
隨著本書各版本的不斷推出,我的兩個兒子Mathew和Michael也逐漸從小男孩成長為男子漢。他們在生活中的成熟、品格和成功鼓舞著我。經(jīng)過多年的職業(yè)發(fā)展,我們?nèi)齻人現(xiàn)在一起在我們于2012年創(chuàng)立的公司中工作,沒有什么比這更讓我自豪了。我的兩個兒子現(xiàn)在也已經(jīng)有了自己的孩子Maya和Lily。后要感謝我的妻子Barbara,她對我花費如此多的時間在辦公室工作表示理解與支持,并且鼓勵我繼續(xù)寫作本書的下一個版本。
羅杰·S.普萊斯曼(Roger S. Pressman)
出版者的話
譯者序
前言
作者簡介
第1章 軟件與軟件工程 1
1.1 軟件的本質(zhì) 3
1.1.1 定義軟件 4
1.1.2 軟件應(yīng)用領(lǐng)域 5
1.1.3 遺留軟件 6
1.2 定義軟件工程學(xué)科 6
1.3 軟件過程 7
1.3.1 過程框架 7
1.3.2 普適性活動 8
1.3.3 過程的適應(yīng)性調(diào)整 9
1.4 軟件工程實踐 9
1.4.1 實踐的精髓 9
1.4.2 通用原則 10
1.5 這一切是如何開始的 12
1.6 小結(jié) 13
習(xí)題與思考題 13
部分 軟件過程
第2章 過程模型 16
2.1 通用過程模型 16
2.2 定義框架活動 18
2.3 明確任務(wù)集 19
2.4 過程評估與改進(jìn) 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 小結(jié) 27
習(xí)題與思考題 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團(tuán)隊和制品 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 小結(jié) 39
習(xí)題與思考題 40
第4章 推薦的過程模型 41
4.1 需求定義 44
4.2 初步體系結(jié)構(gòu)設(shè)計 44
4.3 資源估算 45
4.4 首次原型構(gòu)建 46
4.5 原型評價 48
4.6 繼續(xù)與否的決策 49
4.7 原型演化 50
4.7.1 新原型范圍 51
4.7.2 構(gòu)建新原型 51
4.7.3 測試新原型 51
4.8 原型發(fā)布 52
4.9 維護(hù)發(fā)布軟件 52
4.10 小結(jié) 54
習(xí)題與思考題 55
第5章 軟件工程的人員方面 56
5.1 軟件工程師的特質(zhì) 56
5.2 軟件工程心理學(xué) 57
5.3 軟件團(tuán)隊 58
5.4 團(tuán)隊結(jié)構(gòu) 59
5.5 社交媒體的影響 60
5.6 全球化團(tuán)隊 60
5.7 小結(jié) 61
習(xí)題與思考題 61
第二部分 建模
第6章 指導(dǎo)實踐的原則 64
6.1 核心原則 65
6.1.1 指導(dǎo)過程的原則 65
6.1.2 指導(dǎo)實踐的原則 66
6.2 指導(dǎo)每個框架活動的原則 67
6.2.1 溝通原則 67
6.2.2 策劃原則 69
6.2.3 建模原則 71
6.2.4 構(gòu)建原則 72
6.2.5 部署原則 75
6.3 小結(jié) 76
習(xí)題與思考題 77
第7章 理解需求 78
7.1 需求工程 79
7.1.1 起始 79
7.1.2 獲取 79
7.1.3 細(xì)化 80
7.1.4 協(xié)商 80
7.1.5 規(guī)格說明 80
7.1.6 確認(rèn) 81
7.1.7 需求管理 81
7.2 建立根基 82
7.2.1 確認(rèn)利益相關(guān)者 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 構(gòu)建分析模型 91
7.5.1 分析模型的元素 92
7.5.2 分析模式 93
7.6 協(xié)商需求 94
7.7 需求監(jiān)控 95
7.8 確認(rèn)需求 95
7.9 小結(jié) 95
習(xí)題與思考題 96
第8章 需求建模一種推薦的方法 97
8.1 需求分析 98
8.1.1 總體目標(biāo)和原理 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 類職責(zé)協(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 小結(jié) 118
習(xí)題與思考題 119
第9章 設(shè)計概念 120
9.1 軟件工程中的設(shè)計 121
9.2 設(shè)計過程 123
9.2.1 軟件質(zhì)量指導(dǎo)原則和屬性 123
9.2.2 軟件設(shè)計的演化 124
9.3 設(shè)計概念 125
9.3.1 抽象 125
9.3.2 體系結(jié)構(gòu) 126
9.3.3 模式 126
9.3.4 關(guān)注點分離 127
9.3.5 模塊化 127
9.3.6 信息隱蔽 128
9.3.7