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