本書是國家級線上線下混合式一流本科課程軟件工程的指定教材,主要介紹軟件過程、面向?qū)ο筌浖治雠c設計、軟件質(zhì)量與項目管理三大部分內(nèi)容。全書共14章,內(nèi)容包括軟件工程概述、軟件過程、敏捷軟件過程、軟件過程改進、面向?qū)ο筌浖_發(fā)方法、UML建模技術(shù)、面向?qū)ο蠓治觥⒚嫦驅(qū)ο笤O計、軟件復用、軟件模式、軟件質(zhì)量、軟件測試策略、面向?qū)ο蟮能浖䴗y試、軟件項目管理。
本書可作為高等院校計算機類和信息類相關(guān)專業(yè)軟件工程課程的教材,也可供相關(guān)專業(yè)師生、科技工作者及軟件研發(fā)人員學習與參考。
國家級線上線下混合式一流本科課程軟件工程指定教材?梢宰鳛楦叩仍盒S嬎銠C類和信息類相關(guān)專業(yè)軟件工程的教材,也可供相關(guān)專業(yè)師生、科技工作者及軟件研發(fā)人員學習與參考。
成功的計算機軟件系統(tǒng)必定是一方面滿足用戶需求且使用起來得心應手,另一方面能在相當長的時間內(nèi)無故障運行且容易維護。這樣的計算機軟件系統(tǒng)必須依照規(guī)范、采用工程化方法進行開發(fā)與運維。軟件工程(Software Engineering)是一門指導計算機軟件系統(tǒng)開發(fā)和維護的工程學科,主要研究如何應用軟件開發(fā)的科學理論和工程技術(shù)來指導大型軟件系統(tǒng)的開發(fā),是涉及計算機科學、工程科學、管理科學、數(shù)學等領域的一門綜合性的交叉學科。
軟件系統(tǒng)開發(fā)覆蓋軟件的問題定義、需求分析、總體設計、詳細設計、編碼實現(xiàn)、測試等軟件開發(fā)的各方面。通過軟件工程課程學習,可以提高軟件開發(fā)、測試、維護的效率,降低軟件開發(fā)成本,保證軟件可靠性和安全性。為了國家級一流課程建設與教學的需要,完善軟件工程國家級線上線下混合式一流課程教材內(nèi)容,出版本書。
本書期望達到如下目的。
(1) 為學生提供系統(tǒng)化的軟件工程知識框架,幫助其理解軟件工程的基本概念、原理,為學生提供實用軟件開發(fā)技能,培養(yǎng)其高效率開發(fā)高質(zhì)量軟件的能力,提高其在就業(yè)市場上的競爭力。
(2) 以軟件系統(tǒng)開發(fā)過程這一復雜工程問題為例,明確該過程中采用的技術(shù)方法,包括軟件工程在內(nèi)的專業(yè)知識,體現(xiàn)計算機專業(yè)課程系統(tǒng)化的同時,培養(yǎng)學生運用專業(yè)技術(shù)方法分析與解決復雜軟件工程問題的能力。
(3) 提升軟件開發(fā)人員的系統(tǒng)分析設計能力和工程實踐能力,培養(yǎng)學生的技術(shù)創(chuàng)新能力,使其能夠在軟件開發(fā)過程中提出新的思路和解決方案,創(chuàng)新計算機類人才培養(yǎng)體系改革,培育關(guān)鍵基礎軟件的后備人才。
(4) 在軟件系統(tǒng)開發(fā)過程中,促進軟件開發(fā)團隊成員間的交流和合作,使其能夠更好地協(xié)作和溝通,培養(yǎng)團隊精神和團體創(chuàng)新能力。
縱覽軟件工程已出版教材,編寫本書還為了體現(xiàn)如下3方面的特色。
(1) 本書以軟件開發(fā)過程中的各個活動為主線,不僅強調(diào)軟件工程內(nèi)容的整體性,并且通過先行課和后續(xù)課凸顯軟件工程專業(yè)知識的系統(tǒng)性。
(2) 本書以面向?qū)ο筌浖こ虨橹骶,介紹面向?qū)ο筮^程模型、面向?qū)ο笮枨蠓治觥⒚嫦驅(qū)ο筌浖O計、面向?qū)ο鬁y試等;同時,在技術(shù)與工具方面,則以面向?qū)ο蟮腢ML建模為主。
(3) 在研討軟件工程理論、技術(shù)方法與工具的基礎上,以實際開發(fā)的軟件系統(tǒng)智能居家養(yǎng)老平臺為案例,串聯(lián)并闡述本書的各部分內(nèi)容。本書第1、2和14章由張曉龍編著,第3、4和11章由高峰編著,第5~8章由劉茂福編著,第9和10章由王磊與劉茂福共同編著,第12和13章由王磊與高峰共同編著,全書由劉茂福和張曉龍統(tǒng)稿。
在本書的成稿過程中得到了清華大學出版社和龍啟銘編輯的鼎力協(xié)助。此外,本書引用了一些專家學者的研究成果,在此一并表示感謝。
編者
2024年1月
第1章軟件工程概述/1
1.1軟件的概念、特點與分類1
1.1.1軟件的概念1
1.1.2軟件的特點2
1.1.3軟件的分類3
1.2軟件危機4
1.2.1軟件危機的出現(xiàn)4
1.2.2產(chǎn)生軟件危機的原因5
1.2.3消除軟件危機的途徑5
1.3軟件工程6
1.3.1軟件工程的定義6
1.3.2軟件工程的基本原理7
1.3.3軟件工程的框架7
1.3.4軟件工程方法學7
1.4軟件的生命周期10
1.4.1軟件生命周期及其各個階段10
1.4.2軟件生命周期模型11
1.5軟件工程的目標和原則12
1.5.1軟件工程的基本目標12
1.5.2軟件工程的原則12
1.6本章小結(jié)13
習題113
第2章軟件過程/14
2.1軟件過程概述14
2.2通用過程模型15
2.2.1過程框架15
2.2.2普適性活動15
2.2.3過程的適應性調(diào)整16
2.2.4過程流16
2.3慣用過程模型17〖1〗軟 件 工 程目錄〖3〗〖3〗2.3.1瀑布模型17
2.3.2增量過程模型20
2.3.3演化過程模型21
2.3.4并發(fā)模型23
2.4專用過程模型23
2.4.1基于構(gòu)件的開發(fā)24
2.4.2形式化方法模型25
2.4.3面向方面的軟件開發(fā)26
2.5統(tǒng)一過程模型26
2.5.1統(tǒng)一過程簡介26
2.5.2統(tǒng)一過程開發(fā)階段27
2.5.3統(tǒng)一過程成分28
2.6本章小結(jié)29
習題229
第3章敏捷軟件過程/30
3.1敏捷聯(lián)盟30
3.2敏捷原則32
3.3極限編程實踐34
3.3.1客戶作為團隊成員34
3.3.2用戶故事35
3.3.3短交付周期35
3.3.4結(jié)對編程36
3.3.5持續(xù)集成與可持續(xù)開發(fā)36
3.3.6開放的工作空間37
3.3.7簡單的設計37
3.3.8重構(gòu)38
3.3.9隱喻38
3.4敏捷過程模型39
3.4.1XP過程39
3.4.2Scrum40
3.5敏捷統(tǒng)一過程42
3.5.1宏觀上連續(xù)42
3.5.2微觀上迭代43
3.5.3持續(xù)增量發(fā)布43
3.5.4AUP的原則43
3.5.5何時采用AUP44
3.6本章小結(jié)44
習題345
第4章軟件過程改進/46
4.1能力成熟度模型46
4.1.1CMM的5層體系結(jié)構(gòu)48
4.1.2成熟度級別的行為特征49
4.1.3CMM的評估和評價方法51
4.2能力成熟度模型集成52
4.2.1從CMM到CMMI52
4.2.2CMMI體系52
4.2.3CMMI過程域57
4.2.4CMMI評估方式SCAMPI58
4.3個人軟件過程59
4.3.1個人軟件過程簡介59
4.3.2PSP的結(jié)構(gòu)59
4.3.3PSP過程59
4.4團隊軟件過程60
4.4.1團隊軟件過程簡介60
4.4.2TSP的團隊管理組合61
4.4.3TSP的6條原則61
4.5能力成熟度模型與軟件過程之間的關(guān)系61
4.5.1能力成熟度模型與軟件過程的有機結(jié)合61
4.5.2CMM/TSP/PSP的一些建議62
4.6本章小結(jié)62
習題463
第5章面向?qū)ο筌浖_發(fā)方法/64
5.1面向?qū)ο蠡咎卣?4
5.2面向?qū)ο蠡靖拍?7
5.3面向?qū)ο蠓椒?8
5.3.1面向?qū)ο蠓治?8
5.3.2OOA主要原則68
5.3.3面向?qū)ο笤O計模型69
5.3.4面向?qū)ο蠼_^程70
5.4本章小結(jié)73
習題573
第6章UML建模技術(shù)/74
6.1面向?qū)ο蠼<癠ML簡介74
6.1.1面向?qū)ο蠼?4
6.1.2UML簡介74
6.2用例視圖75
6.2.1活動者75
6.2.2用例76
6.2.3用例圖內(nèi)元素的關(guān)系76
6.3靜態(tài)模型圖78
6.3.1類圖78
6.3.2構(gòu)件圖81
6.3.3部署圖82
6.4動態(tài)模型圖83
6.4.1序列圖83
6.4.2協(xié)作圖84
6.4.3狀態(tài)圖86
6.4.4活動圖87
6.5本章小結(jié)91
習題691
第7章面向?qū)ο蠓治?92
7.1需求工程92
7.1.1需求工程92
7.1.2起始95
7.1.3需求獲取97
7.2需求分析: 用例模型98
7.2.1開發(fā)用例99
7.2.2創(chuàng)建初始用例100
7.2.3細化初始用例102
7.2.4編寫正式用例102
7.3需求分析: 類模型103
7.3.1識別分析類104
7.3.2描述屬性105
7.3.3定義操作105
7.3.4類職責協(xié)作者建模107
7.4需求分析: 行為模型108
7.4.1識別用例事件108
7.4.2狀態(tài)表達110
7.5本章小結(jié)110
習題7111
第8章面向?qū)ο笤O計/112
8.1設計過程112
8.1.1軟件質(zhì)量指導原則和屬性112
8.1.2軟件設計的演化113
8.2設計概念114
8.2.1抽象114
8.2.2體系結(jié)構(gòu)115
8.2.3模式116
8.2.4關(guān)注點分離116
8.2.5模塊化116
8.2.6信息隱蔽117
8.2.7功能獨立118
8.3設計模型118
8.3.1數(shù)據(jù)設計元素118
8.3.2體系結(jié)構(gòu)設計元素119
8.3.3接口設計元素119
8.3.4構(gòu)件級設計元素120
8.4體系結(jié)構(gòu)設計120
8.4.1體系結(jié)構(gòu)類型121
8.4.2體系結(jié)構(gòu)風格121
8.4.3體系結(jié)構(gòu)的簡單分類122
8.4.4體系結(jié)構(gòu)考慮要素123
8.4.5體系結(jié)構(gòu)設計124
8.5構(gòu)件設計126
8.5.1構(gòu)件概念126
8.5.2基于類的構(gòu)件設計129
8.5.3實施構(gòu)件級設計131
8.5.4構(gòu)件的分類與檢索133
8.6用戶界面設計134
8.6.1用戶界面設計黃金原則134
8.6.2用戶界面分析與設計135
8.6.3界面分析136
8.6.4界面設計步驟137
8.6.5設計評估137
8.7本章小結(jié)138
習題8138
第9章軟件復用/139
9.1結(jié)構(gòu)化軟件復用139
9.2面向?qū)ο筌浖䦶陀?44
9.3基于軟件復用的軟件工程148
9.4本章小結(jié)151
習題9151
第10章軟件模式/152
10.1分析模式152
10.2設計模式153
10.2.1創(chuàng)建型設計模式153
10.2.2結(jié)構(gòu)型設計模式158
10.2.3行為型設計模式162
10.3本章小結(jié)166
習題10166
第11章軟件質(zhì)量/167
11.1軟件質(zhì)量概念167
11.1.1符合性質(zhì)量的概念167
11.1.2適用性質(zhì)量的概念167
11.1.3廣義質(zhì)量的概念168
11.1.4質(zhì)量因客戶而存在170
11.1.5不同的質(zhì)量觀點172
11.1.6質(zhì)量屬性174
11.1.7軟件過程和軟件質(zhì)量175
11.2軟件質(zhì)量實現(xiàn)178
11.2.1軟件質(zhì)量控制179
11.2.2軟件質(zhì)量保證179
11.2.3缺陷預防181
11.2.4質(zhì)量成本181
11.2.5軟件評審182
11.2.6軟件可靠性與安全187
11.3軟件質(zhì)量標準188
11.3.1國際標準188
11.3.2國家標準189
11.3.3行業(yè)標準189
11.3.4企業(yè)標準190
11.3.5項目規(guī)范190
11.4本章小結(jié)190
習題11190
第12章軟件測試策略/191
12.1軟件測試的策略性方法191
12.1.1驗證與確認191
12.1.2軟件測試組織191
12.1.3軟件測試策略宏觀192
12.1.4測試完成的標準193
12.2策略問題194
12.3傳統(tǒng)軟件的測試策略194
12.3.1單元測試194
12.3.2集成測試196
12.4面向?qū)ο筌浖臏y試策略198
12.4.1面向?qū)ο蟓h(huán)境中的單元測試198
12.4.2面向?qū)ο蟓h(huán)境中的集成測試199
12.5確認測試199
12.5.1確認測試準則199
12.5.2配置評審200
12.5.3測試和測試200
12.6系統(tǒng)測試200
12.6.1恢復測試200
12.6.2安全測試201
12.6.3性能測試201
12.6.4部署測試201
12.7調(diào)試技巧201
12.7.1調(diào)試過程202
12.7.2調(diào)試策略202
12.8本章小結(jié)203
習題12204
第13章面向?qū)ο蟮能浖䴗y試/205
13.1擴展測試的視野206
13.2測試OOA和OOD模型207
13.2.1OOA和OOD模型的正確性208
13.2.2面向?qū)ο竽P偷囊恢滦?08
13.3面向?qū)ο鬁y試策略209
13.3.1面向?qū)ο鬁y試的層次209
13.3.2面向?qū)ο蟓h(huán)境中的單元測試210
13.3.3面向?qū)ο蟓h(huán)境中的集成測試210
13.3.4面向?qū)ο蟓h(huán)境中的確認測試210
13.4面向?qū)ο鬁y試方法211
13.4.1面向?qū)ο蟾拍畹臏y試用例設計含義211
13.4.2傳統(tǒng)測試用例設計方法的可應用性211
13.4.3基于故障的測試211
13.4.4基于場景的測試設計212
13.5類級可應用的測試方法212
13.5.1面向?qū)ο箢惖碾S機測試212
13.5.2類級的劃分測試 213
13.6類間測試用例設計213
13.6.1多類測試214
13.6.2從行為模型導出的測試215
13.7本章小結(jié)216
習題13216
第14章軟件項目管理/217
14.1軟件項目管理定義及特點217
14.2軟件項目計劃218
14.2.1軟件規(guī)模估算219
14.2.2軟件成本估算222
14.2.3軟件進度計劃225
14.3軟件項目風險管理230
14.3.1風險的屬性和分類230
14.3.2軟件項目風險管理過程231
14.4軟件質(zhì)量管理236
14.4.1軟件質(zhì)量管理的重要性及其目標236
14.4.2軟件質(zhì)量管理活動237
14.4.3軟件質(zhì)量缺陷管理238
14.5軟件配置管理239
14.5.1軟件配置管理的意義239
14.5.2軟件配置管理活動240
14.5.3軟件配置管理工具243
14.6人員的組織與管理243
14.6.1人員組織過程244
14.6.2項目組織形式244
14.7本章小結(jié)246
習題14247
參考文獻/248