本書自第1版出版至今,30多年來在軟件工程界產(chǎn)生了巨大而深遠(yuǎn)的影響。第8版不僅加入了移動應(yīng)用軟件項目等與時俱進(jìn)的內(nèi)容,而且調(diào)整了篇章結(jié)構(gòu),更利于教師針對不同課程進(jìn)行選擇。同時,第8版全面繼承了之前版本的風(fēng)格與優(yōu)勢,全面且系統(tǒng)地講解軟件過程、建模、質(zhì)量管理、項目管理等基礎(chǔ)知識,涵蓋相關(guān)概念、原則、方法和工具,并且提供豐富的輔助閱讀資源和網(wǎng)絡(luò)資源,指導(dǎo)有興趣的讀者進(jìn)行更深入的學(xué)習(xí)和研究。本書適合作為軟件工程相關(guān)專業(yè)高年級本科生和研究生教材,也可供軟件專業(yè)技術(shù)人員和管理人員閱讀參考。
Software Engineering: A Practitioner’s Approach, Eighth Edition如果有這樣一款計算機(jī)軟件,它能滿足用戶的需求,能在相當(dāng)長的時間內(nèi)無故障地運行,修改起來輕松便捷,使用起來更是得心應(yīng)手,那么,這款軟件必定是成功的,它切實改善了我們的生活。但是,如果有這樣一款軟件,它令用戶失望,錯誤頻出,修改起來困難重重,使用起來更是舉步維艱,那么,這必定是一款失敗的軟件,它使我們的生活一團(tuán)糟。誰都希望開發(fā)出優(yōu)秀的軟件,為我們的生活帶來便利,而不是把自己陷入失敗的深淵。要想使軟件獲得成功,在設(shè)計和構(gòu)建軟件時就需要有規(guī)范,需要采用工程化的方法。
自本書第1版問世以來的近35年中,軟件工程已經(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)今最為先進(jìn)的技術(shù),狀況也仍是如此。許多專業(yè)人員和學(xué)生并不了解現(xiàn)代方法,這導(dǎo)致他們所開發(fā)的軟件質(zhì)量很差,因而造成了嚴(yán)重的后果。此外,有關(guān)軟件工程方法真實本質(zhì)的爭論一直持續(xù)進(jìn)行著。軟件工程的地位問題已成為一門對比研究課題。人們對軟件工程的態(tài)度已經(jīng)有所改善,研究工作已取得了進(jìn)展,不過要成為一門完全成熟的學(xué)科,我們還有大量的工作要做。
我們希望本書能夠成為引導(dǎo)讀者進(jìn)入正在走向成熟的軟件工程學(xué)科的入門讀物,和以前的7個版本一樣,第8版對學(xué)生和專業(yè)人員同樣具有很強的吸引力。它既是軟件專業(yè)人員的工作指南,也是高年級本科生和一年級研究生的綜合性參考書。
第8版中包含了許多新的內(nèi)容,它絕不只是前一版的簡單更新。這一版不僅對內(nèi)容做了適當(dāng)?shù)男薷,而且調(diào)整了全書的結(jié)構(gòu),以改進(jìn)教學(xué)順序;同時更加強調(diào)一些新的和重要的軟件工程過程和軟件工程實踐知識。此外,本書進(jìn)一步加強了“支持系統(tǒng)”,為學(xué)生、教師和專業(yè)人員提供了更為豐富的知識資源。讀者可訪問專門為本書建立的網(wǎng)站(www.mhhe.com/pressman)查閱這些信息。
篇章結(jié)構(gòu)本書共39章,分為五個部分。這種劃分有利于那些無法在一個學(xué)期內(nèi)講完全書內(nèi)容的教師靈活安排教學(xué)。
第一部分“軟件過程”給出了有關(guān)軟件過程的各種不同觀點,討論了所有重要的過程模型,還涉及慣用過程和敏捷過程在指導(dǎo)思想上的分歧。第二部分“建!苯o出了分析方法和設(shè)計方法,重點講解面向?qū)ο蠓椒ê蚒ML建模,同時也介紹了基于模式的設(shè)計以及基于WebApp和移動App的設(shè)計。第三部分“質(zhì)量管理”介紹了有關(guān)質(zhì)量管理的概念、規(guī)程、技術(shù)和方法,使得軟件團(tuán)隊能夠很好地評估軟件質(zhì)量,評審軟件工程工作產(chǎn)品,實施軟件質(zhì)量保證規(guī)程,并正確地運用有效的測試策略和戰(zhàn)術(shù)。此外,這一部分還討論了形式化建模和驗證方法。第四部分“管理軟件項目”介紹了與計劃、管理和控制軟件開發(fā)項目的人員有關(guān)的問題。第五部分“軟件工程高級課題”討論了軟件過程改進(jìn)和軟件工程的發(fā)展趨勢。
第8版沿用了前面幾個版本的做法,在各章中都提供了大量的輔助閱讀信息,包括一個虛擬軟件團(tuán)隊在工作中遇到困難時展開的對話,還包括對各章相關(guān)知識給出的補充方法和工具。
第8版中五個部分的劃分有利于教師根據(jù)學(xué)時和教學(xué)要求安排課堂內(nèi)容。在一個學(xué)期內(nèi)可以安排一個部分的內(nèi)容,也可以安排多個部分的內(nèi)容。軟件工程概論課程可以從五個部分中選擇若干章作為教材。側(cè)重分析和設(shè)計的軟件工程課程可以從第一部分和第二部分中選取素材。面向測試的軟件工程課程則可以從第一部分和第三部分中選取素材,還應(yīng)加上第二部分中的一些內(nèi)容。側(cè)重管理的課程應(yīng)突出第一部分和第四部分的內(nèi)容。我們用上述方式組織第8版的內(nèi)容,意在給教師提供多種教學(xué)安排的選擇。但無論如何選擇這些內(nèi)容,都可以從“支持系統(tǒng)”中獲得補充資源。
相關(guān)資源學(xué)生資源本書為學(xué)生提供的各種學(xué)習(xí)資料包括:在線學(xué)習(xí)中心提供的各章學(xué)習(xí)指南,實踐測驗,題解以及多種在線資源(軟件工程檢查單、一套正在演化的微型工具、綜合案例研究和工作產(chǎn)品模板等)。此外,1000多種網(wǎng)絡(luò)參考文獻(xiàn)可供學(xué)生更深入地探究軟件工程問題,還有500多篇可下載的參考文獻(xiàn),這些都為讀者提供了關(guān)于高級軟件工程課題的更為詳盡的信息。
教師資源本書為教師提供的各種教學(xué)資料包括:在線(也可下載)教師指南,由700多個PPT組成的教輔資源和試題庫。當(dāng)然,學(xué)生資源(如微型工具、網(wǎng)絡(luò)參考文獻(xiàn)及可下載參考文獻(xiàn))和專業(yè)人員資源也可供教師使用。
在本書的教師指南中,我們?yōu)楦鞣N類型的軟件工程課程提出了建議,介紹了與課程配合開展的軟件項目、部分問題的題解和許多有用的教學(xué)輔助工具。
專業(yè)人員資源本書為產(chǎn)業(yè)界專業(yè)人員(也包括在校學(xué)生)提供的各種資料包括:軟件工程文檔和其他工作產(chǎn)品的
羅杰 S. 普萊斯曼(Roger S. Pressman),普萊斯曼是軟件工程領(lǐng)域國際知名的顧問和作家。40多年來,他作為工程師、經(jīng)理人、教授、作家、咨詢師和企業(yè)家始終奮戰(zhàn)在這一領(lǐng)域。
普萊斯曼博士現(xiàn)任一家咨詢公司(R. S. Pressman & Associates, Inc.)的總裁,該公司致力于協(xié)助企業(yè)建立有效的軟件工程實踐。這些年來,他已經(jīng)開發(fā)了一套用于改進(jìn)軟件工程實踐的技術(shù)和工具。他還是一家創(chuàng)業(yè)公司(Teslaccessories,LLC)的創(chuàng)始人,這家制造公司專門為特斯拉Model S系列電動車生產(chǎn)定制產(chǎn)品。
普萊斯曼博士是9本書的作者,其中包括兩本小說。他還寫了許多技術(shù)和管理方面的文章。他曾任《IEEE Software》和《The Cutter IT Journal》等行業(yè)雜志的編委,以及《IEEE Software》雜志“Manager”專欄的編輯。
普萊斯曼博士還是演講家,曾在許多重要的行業(yè)會議上做主題演講,在國際軟件工程會議和一些行業(yè)會議上做輔導(dǎo)講座,并且一直是ACM(美國計算機(jī)協(xié)會)、IEEE(美國電氣與電子工程師協(xié)會)以及Tau Beta Pi、Phi Kappa Phi、Eta Kappa Nu和Pi Tau Sigma等組織的成員。
布魯斯 R. 馬克西姆(Bruce R. Maxim)馬克西姆博士30多年來曾任軟件工程師、項目經(jīng)理、教授、作家和咨詢師。他的研究興趣涉及軟件工程、人機(jī)交互、游戲設(shè)計、社交媒體、人工智能以及計算機(jī)科學(xué)教育等領(lǐng)域。
馬克西姆博士現(xiàn)任密歇根大學(xué)迪爾伯恩分校計算機(jī)與信息科學(xué)系副教授,他曾為該校工程與計算機(jī)科學(xué)學(xué)院建立游戲?qū)嶒炇。他曾?jīng)發(fā)表多篇有關(guān)計算機(jī)算法動畫、游戲開發(fā)以及工程教育方面的論文。他還是暢銷的計算機(jī)科學(xué)導(dǎo)論課本的作者之一。在密歇根大學(xué)工作期間,馬克西姆博士曾監(jiān)管了幾百個產(chǎn)業(yè)界軟件開發(fā)項目。
馬克西姆博士的專業(yè)經(jīng)驗包括在醫(yī)學(xué)院管理研究信息系統(tǒng),為某醫(yī)學(xué)校區(qū)指導(dǎo)計算教學(xué),并承擔(dān)統(tǒng)計程序員的工作。他還曾擔(dān)任某游戲開發(fā)公司的首席技術(shù)官。
馬克西姆博士是若干教學(xué)獎以及某社團(tuán)組織服務(wù)獎的獲得者。他還是Sigma Xi、Upsilon Pi Epsilon、Pi Mu Epsilon、ACM、IEEE、美國工程教育協(xié)會、女工程師協(xié)會以及國際游戲開發(fā)者聯(lián)盟等社會組織的成員。
Software Engineering: A Practitioner’s Approach, Eighth Edition
出版者的話
譯者序
前言
作者簡介
第1章 軟件的本質(zhì) 1
1.1 軟件的本質(zhì) 3
1.1.1 定義軟件 3
1.1.2 軟件應(yīng)用領(lǐng)域 4
1.1.3 遺留軟件 5
1.2 軟件的變更本質(zhì) 6
1.2.1 WebApp 6
1.2.2 移動 App 7
1.2.3 云計算 7
1.2.4 產(chǎn)品線軟件 8
1.3 小結(jié) 8
習(xí)題與思考題 8
擴(kuò)展閱讀與信息資源 9
第2章 軟件工程 10
2.1 定義軟件工程學(xué)科 11
2.2 軟件過程 11
2.2.1 過程框架 12
2.2.2 普適性活動 12
2.2.3 過程的適應(yīng)性調(diào)整 13
2.3 軟件工程實踐 13
2.3.1 實踐的精髓 14
2.3.2 通用原則 14
2.4 軟件開發(fā)神話 16
2.5 這一切是如何開始的 18
2.6 小結(jié) 19
習(xí)題與思考題 19
擴(kuò)展閱讀與信息資源 19
第一部分 軟件過程
第3章 軟件過程結(jié)構(gòu) 22
3.1 通用過程模型 23
3.2 定義框架活動 24
3.3 明確任務(wù)集 24
3.4 過程模式 25
3.5 過程評估與改進(jìn) 27
3.6 小結(jié) 28
習(xí)題與思考題 28
擴(kuò)展閱讀與信息資源 28
第4章 過程模型 29
4.1 慣用過程模型 30
4.1.1 瀑布模型 30
4.1.2 增量過程模型 32
4.1.3 演化過程模型 32
4.1.4 并發(fā)模型 36
4.1.5 演化過程的最終評述 37
4.2 專用過程模型 38
4.2.1 基于構(gòu)件的開發(fā) 38
4.2.2 形式化方法模型 39
4.2.3 面向方面的軟件開發(fā) 39
4.3 統(tǒng)一過程 40
4.3.1 統(tǒng)一過程的簡史 41
4.3.2 統(tǒng)一過程的階段 41
4.4 個人過程模型和團(tuán)隊過程模型 42
4.4.1 個人軟件過程 42
4.4.2 團(tuán)隊軟件過程 43
4.5 過程技術(shù) 44
4.6 產(chǎn)品和過程 45
4.7 小結(jié) 46
習(xí)題與思考題 46
擴(kuò)展閱讀與信息資源 47
第5章 敏捷開發(fā) 48
5.1 什么是敏捷 49
5.2 敏捷及變更成本 50
5.3 什么是敏捷過程 50
5.3.1 敏捷原則 51
5.3.2 敏捷開發(fā)戰(zhàn)略 52
5.4 極限編程 52
5.4.1 極限編程過程 52
5.4.2 工業(yè)極限編程 54
5.5 其他敏捷過程模型 56
5.5.1 Scrum 56
5.5.2 動態(tài)系統(tǒng)開發(fā)方法 57
5.5.3 敏捷建模 58
5.5.4 敏捷統(tǒng)一過程 59
5.6 敏捷過程工具集 60
5.7 小結(jié) 61
習(xí)題與思考題 61
擴(kuò)展閱讀與信息資源 62
第6章 軟件工程的人員方面 64
6.1 軟件工程師的特質(zhì) 64
6.2 軟件工程心理學(xué) 65
6.3 軟件團(tuán)隊 66
6.4 團(tuán)隊結(jié)構(gòu) 67
6.5 敏捷團(tuán)隊 68
6.5.1 通用敏捷團(tuán)隊 68
6.5.2 XP團(tuán)隊 69
6.6 社交媒體的影響 70
6.7 軟件工程中云的應(yīng)用 71
6.8 協(xié)作工具 71
6.9 全球化團(tuán)隊 72
6.10 小結(jié) 73
習(xí)題與思考題 73
擴(kuò)展閱讀與信息資源 74
第二部分 建模
第7章 指導(dǎo)實踐的原則 76
7.1 軟件工程知識 77
7.2 核心原則 77
7.2.1 指導(dǎo)過程的原則 78
7.2.2 指導(dǎo)實踐的原則 78
7.3 指導(dǎo)每個框架活動的原則 80
7.3.1 溝通原則 80
7.3.2 策劃原則 81
7.3.3 建模原則 83
7.3.4 構(gòu)建原則 87
7.3.5 部署原則 89
7.4 工作實踐 90
7.5 小結(jié) 91
習(xí)題與思考題 92
擴(kuò)展閱讀與信息資源 92
第8章 理解需求 94
8.1 需求工程 95
8.2 建立根基 100
8.2.1 確認(rèn)利益相關(guān)者 100
8.2.2 識別多重觀點 100
8.2.3 協(xié)同合作 101
8.2.4 首次提問 101
8.2.5 非功能需求 102
8.2.6 可追溯性 102
8.3 獲取需求 103
8.3.1 協(xié)作收集需求 103
8.3.2 質(zhì)量功能部署 105
8.3.3 使用場景 106
8.3.4 獲取工作產(chǎn)品 106
8.3.5 敏捷需求獲取 107
8.3.6 面向服務(wù)的方法 107
8.4 開發(fā)用例 107
8.5 構(gòu)建分析模型 111
8.5.1 分析模型的元素 112
8.5.2 分析模式 114
8.5.3 敏捷需求工程 114
8.5.4 自適應(yīng)系統(tǒng)的需求 114
8.6 協(xié)商需求 115
8.7 需求監(jiān)控 116
8.8 確認(rèn)需求 117
8.9 避免常見錯誤 117
8.10 小結(jié) 118
習(xí)題與思考題 118
擴(kuò)展閱讀與信息資源 119
第9章 需求建模:基于場景的
方法 121
9.1 需求分析 122
9.1.1 總體目標(biāo)和原理 122
9.1.2 分析的經(jīng)驗原則 123
9.1.3 域分析 123
9.1.4 需求建模的方法 125
9.2 基于場景建模 126
9.2.1 創(chuàng)建初始用例 126
9.2.2 細(xì)化初始用例 128
9.2.3 編寫正式用例 129
9.3 補充用例的UML模型 131
9.3.1 開發(fā)活動圖 131
9.3.2 泳道圖 132
9.4 小結(jié) 133
習(xí)題與思考題 133
擴(kuò)展閱讀與信息資源 133
第10章 需求建模:基于類的方法 135
10.1 識別分析類 135
10.2 描述屬性 138
10.3 定義操作 138
10.4 類–職責(zé)–協(xié)作者建模 140
10.5 關(guān)聯(lián)和依賴 145
10.6 分析包 14