《軟件工程實用案例教程》結合軟件工程的發(fā)展與教學需要,系統(tǒng)地闡述了軟件工程這一領域的基本概念、原理與方法!盾浖こ虒嵱冒咐坛獭饭舶11章,主要內容有:軟件工程綜述,軟件過程,可行性研究,結構化需求分析,結構化軟件設計,面向對象的需求分析,面向對象的設計,基于構件的開發(fā),軟件項目的測試,軟件實施、維護與進化,軟件工程標準與文檔等。 全書內容豐富、組織嚴謹,原理和方法結合密切,結構化方法和面向對象的方法均有一個實例貫穿始終,豐富的圖表和應用實例有助于培養(yǎng)讀者的實際分析設計能力和文檔寫作能力,書中含有豐富的例題與習題便于教學及讀者自學。 《軟件工程實用案例教程》可以作為高等院校軟件工程專業(yè)、計算機科學與技術專業(yè)、計算機應用專業(yè),以及其他相關專業(yè)高年級本科生的教材,同時可作為從事軟件分析、設計與開發(fā)人員的參考書。
通過完整、系統(tǒng)的軟件工程案例,改變目前軟件工程教學中抽象、空泛的現(xiàn)狀,并在一定程度上激發(fā)學生的學習興趣,能夠提高軟件工程課程的教學質量,讓學生真正學有所用。教材的內容組織科學、合理、系統(tǒng),理論與實踐并重,同時課后都配有練習題供讀者思考與鞏固所學知識。
前 言
軟件工程學是一門綜合型應用科學,它將計算機科學理論與現(xiàn)代工程方法論相結合,著重研究軟件過程模型、設計方法及工程開發(fā)技術和工具,以指導軟件的生產(chǎn)和管理。隨著計算機科學和軟件產(chǎn)業(yè)的迅猛發(fā)展,軟件工程學已經(jīng)成為一個重要的計算機分支學科,也是一個異常活躍的研究領域,新方法、新技術不斷涌現(xiàn)。
軟件工程是計算機專業(yè)學生必修的一門專業(yè)課程,也是工科各專業(yè)學生在計算機應用方面的一門重要選修課程。在多年的軟件工程教學過程中,我們的教研團隊參考或使用過許多軟件工程教材,但很多教材大都側重理論的講解,教材中的案例較少,尤其沒有一個完整、系統(tǒng)的軟件工程案例貫穿其中,由于本科生普遍缺乏軟件工程項目開發(fā)的實踐經(jīng)驗,因此學習軟件工程課程感覺非常抽象、空泛與枯燥。為改變目前軟件工程教學中這種抽象、空泛的學習現(xiàn)狀,我們決定編寫《軟件工程實用案例教程》。
《軟件工程實用案例教程》的特色可以歸納為以下五點。
(1) 從軟件危機、軟件過程模型,再到軟件可行性分析、需求分析、系統(tǒng)設計,都引入大量實際案例,解決軟件工程理論教學過程中過于抽象和晦澀的問題;在第4章結構化的分析方法中引入了電梯控制系統(tǒng)案例的完整分析,主要是考慮到結構化分析與設計的優(yōu)勢在嵌入式系統(tǒng)中會更加凸顯,而在第6、7章面向對象的需求分析與設計方法中引入了網(wǎng)上計算機銷售系統(tǒng)案例,在電子商務如此發(fā)達的今天,讓學生對自己熟悉的網(wǎng)上銷售系統(tǒng)進行分析設計,有利于收集需求,同時能激發(fā)學生的學習興趣。
(2) 第4章結構化需求分析詳細介紹了業(yè)務需求、用戶需求和系統(tǒng)需求3個層次需求各自的特點。系統(tǒng)講解了需求工程活動,包括需求獲取、需求分析、需求規(guī)格說明、需求驗證和需求管理。其中需求分析包括過程建模和數(shù)據(jù)建模。過程建模引入食品訂貨系統(tǒng)案例。數(shù)據(jù)建模引入學生研討班案例和EMS表單項目案例。最后引入了電梯控制系統(tǒng)完整案例,按照創(chuàng)建上下文、建立0層圖、產(chǎn)生N層圖、定義邏輯說明、定義數(shù)據(jù)存儲和數(shù)據(jù)流的步驟進行了系統(tǒng)完整的需求分析。
(3) 第7章面向對象的設計,遵循分析類 設計模式=設計類原則,邏輯體系架構的介紹從分層結構到三層架構再到熟知MVC模式演化,并對軟件的MVC設計模式進行了詳細的介紹,這種軟件分層模式的理解與掌握對于從事軟件開發(fā)的讀者尤為重要。目前市面上的絕大多數(shù)的軟件都是采用多層框架結構來實現(xiàn)的,依據(jù)構件的劃分,對構件內部分析階段得到的實體類,結合三層的設計模式,補充邊界類、控制類、模型類得到可以用來指導開發(fā)的詳細設計類圖。
(4) 第8章基于構件的開發(fā),該章節(jié)的主要內容是基于一個構件詳細設計類圖進行編碼開發(fā)的,構件詳細設計類圖是第7章設計階段的工作成果,將分析設計的模型直接指導編碼,幫助讀者領會軟件工程的真正意義所在。很多從事軟件開發(fā)的程序員容易重編程輕設計,往往問題還沒想清楚就開始編碼,這章的內容告訴讀者只要分析設計做得詳盡,編碼就會水到渠成。
(5) 《軟件工程實用案例教程》提供第8章的構件開發(fā)代碼,以及全套軟件工程文檔,供讀者閱讀及下載使用。
《軟件工程實用案例教程》由梁潔、金蘭主編,張碩、宋亞嵐、孔德華任副主編。其中,梁潔編寫第1章、第2章、第6~8章、第11章,金蘭編寫第4章和第5章,張碩編寫第9章和第10章,宋亞嵐編寫第3章。全書由宋亞嵐、孔德華統(tǒng)稿。
《軟件工程實用案例教程》的宗旨是為了提高軟件工程課程的教學質量,讓學生真正學有所用。《軟件工程實用案例教程》具有內容組織科學、合理、系統(tǒng),注重理論與實踐并重的特點,同時課后都配有和教學內容完全一致的練習題供讀者思考與鞏固知識。
《軟件工程實用案例教程》可以作為高等院校軟件工程專業(yè)、計算機科學與技術專業(yè)、計算機應用專業(yè),以及其他相關專業(yè)高年級本科生的教材,同時可供從事軟件工程、計算機應用、計算機軟件專業(yè),以及其他相關專業(yè)的科研人員、軟件開發(fā)人員及有關大專院校的師生參考。
在《軟件工程實用案例教程》的編寫過程中得到了武昌首義學院的領導和同事們的支持與幫助,在此一并表示感謝。
由于編者水平有限,書中難免存在不妥與疏漏之處,敬請廣大讀者批評指正。
《軟件工程實用案例教程》PPT課件等相關教學資源可通過http://www.tupwk.com.cn/downpage下載。
服務郵箱:wkservice@163.com。
編者
2019年3月
目 錄
第1章 軟件工程綜述 1
1.1 軟件工程的背景 1
1.1.1 軟件及其特性 1
1.1.2 軟件危機 4
1.2 軟件工程概述 5
1.2.1 軟件工程的基本概念 5
1.2.2 軟件工程的目標 6
1.2.3 軟件工程三要素 7
1.2.4 軟件工程的多樣性 9
1.2.5 軟件工程與Web 10
1.2.6 軟件工程的通用原則 13
1.2.7 軟件工程人員的職業(yè)道德 14
本章小結 15
本章練習題 16
第2章 軟件過程 18
2.1 軟件過程概述 18
2.1.1 軟件描述 18
2.1.2 軟件設計與實現(xiàn) 19
2.1.3 軟件有效性驗證 21
2.1.4 軟件進化 22
2.1.5 軟件開發(fā)團隊組成 23
2.2 軟件過程模型概述 24
2.2.1 軟件過程模型 24
2.2.2 應對變更 28
2.2.3 Rational統(tǒng)一過程 31
2.3 敏捷軟件開發(fā) 33
本章小結 36
本章練習題 36
第3章 可行性研究 38
3.1 可行性研究的任務 38
3.2 可行性研究的重要性 39
3.3 可行性研究過程 40
3.4 系統(tǒng)流程圖與工作流程 41
3.4.1 流程圖規(guī)范 42
3.4.2 流程圖分析案例 42
3.4.3 分層 43
3.5 數(shù)據(jù)流圖與系統(tǒng)功能 43
3.5.1 數(shù)據(jù)流圖規(guī)范 44
3.5.2 數(shù)據(jù)流圖分析案例 44
3.5.3 命名 46
3.5.4 用途 46
3.6 成本/效益分析 47
3.6.1 成本估計 47
3.6.2 成本/效益分析的方法 48
本章小結 49
本章練習題 50
第4章 結構化需求分析 51
4.1 需求 51
4.1.1 需求的定義 51
4.1.2 需求的層次 52
4.1.3 需求的分類 54
4.2 需求工程 55
4.2.1 需求工程的任務 55
4.2.2 需求工程的活動 55
4.3 需求獲取 56
4.3.1 需求獲取中的常見困難 57
4.3.2 定義項目前景和范圍 59
4.3.3 選擇信息的來源 61
4.3.4 需求獲取的方法 62
4.4 需求分析 63
4.4.1 過程建模 63
4.4.2 數(shù)據(jù)建模 75
4.4.3 過程模型與數(shù)據(jù)模型的聯(lián)系 82
4.4.4 結構化分析的局限性 82
4.5 需求規(guī)格說明 82
4.5.1 需求規(guī)格說明文檔的類型 83
4.5.2 軟件需求規(guī)格說明文檔的讀者 83
4.5.3 軟件需求規(guī)格說明文檔模板 84
4.6 需求驗證 84
4.6.1 需求驗證的概念 84
4.6.2 需求驗證的方法 85
4.7 需求管理 86
4.7.1 建立和維護需求基線 86
4.7.2 建立需求跟蹤信息 87
4.7.3 進行變更控制 87
4.8 結構化需求分析方法案例 88
本章小結 93
本章練習題 93
第5章 結構化軟件設計 97
5.1 軟件設計的相關概念 97
5.1.1 軟件設計的任務 97
5.1.2 軟件設計的原則 98
5.1.3 結構化設計圖形工具 103
5.1.4 軟件設計的啟發(fā)規(guī)則 105
5.2 體系結構設計 108
5.2.1 數(shù)據(jù)流類型 109
5.2.2 變換流的映射方法 109
5.2.3 事務流的映射方法 114
5.3 數(shù)據(jù)設計 117
5.3.1 文件設計 117
5.3.2 數(shù)據(jù)庫設計 117
5.4 接口設計 120
5.4.1 接口設計概述 120
5.4.2 人機界面的交互設計 121
5.5 過程設計 122
5.5.1 結構化程序設計 122
5.5.2 過程設計工具 122
5.6 軟件設計規(guī)格說明書文檔 124
本章小結 125
本章練習題 125
第6章 面向對象的需求分析 129
6.1 面向對象的基本概念 129
6.1.1 對象與類 129
6.1.2 封裝、繼承和多態(tài)性 131
6.1.3 面向對象分析概述 135
6.2 案例說明 136
6.3 上下文模型 137
6.4 活動圖與業(yè)務流程 137
6.4.1 活動圖規(guī)范 138
6.4.2 活動圖建模 139
6.5 用例圖與系統(tǒng)需求 141
6.5.1 用例規(guī)范 141
6.5.2 從業(yè)務流程到用例圖建模 143
6.6 靜態(tài)結構與類圖 147
6.6.1 靜態(tài)結構與類圖的分類 147
6.6.2 類圖規(guī)范 148
6.6.3 類圖建模 150
6.7 時序圖與交互模型 155
6.7.1 時序圖規(guī)范 156
6.7.2 時序圖驗證 157
6.8 狀態(tài)圖與事件驅動模型 159
6.8.1 狀態(tài)圖規(guī)范 159
6.8.2 識別狀態(tài)空間 161
6.8.3 狀態(tài)圖建模 162
本章小結 162
本章練習題 163
第7章 面向對象的設計 165
7.1 面向對象軟件設計概述 165
7.1.1 面向對象設計的過程 165
7.1.2 面向對象設計準則 167
7.2 體系結構設計 168
7.2.1 分層體系結構 169
7.2.2 三層架構 169
7.2.3 采用MVC模式的Web體系結構 171
7.2.4 系統(tǒng)邏輯結構與類包圖 173
7.2.5 系統(tǒng)物理體系結構與構件圖 175
7.2.6 系統(tǒng)物理體系結構與部署圖 177
7.3 構件級設計 179
7.3.1 從分析類到設計類 179
7.3.2 從用例場景到設計類 181
7.3.3 構件詳細類圖建模 184
7.4 用戶界面設計 185
7.4.1 把控制權交給用戶 186
7.4.2 減輕用戶的記憶負擔 186
7.4.3 保持界面一致 187
本章小結 187
本章練習題 188
第8章 基于構件的開發(fā) 190
8.1 實施階段的準備工作 190
8.2 基于構件的編碼 191
8.2.1 開發(fā)環(huán)境 191
8.2.2 從雇員管理構件設計類圖到編碼 192
8.2.3 雇員管理構件編碼 193
8.3 實現(xiàn)問題 205
8.3.1 復用 206
8.3.2 配置管理 207
8.3.3 宿主機-目標機開發(fā) 207
本章小結 208
本章練習題 208
第9章 軟件項目的測試 210
9.1 軟件測試概述 210
9.2 軟件測試技術 213
9.2.1 黑盒測試 213
9.2.2 白盒測試 218
9.2.3 灰盒測試 221
9.3 軟件測試過程 222
9.3.1 單元測試 222
9.3.2 集成測試 223
9.3.3 確認測試 224
9.3.4 系統(tǒng)測試 225
9.3.5 驗收測試 226
9.3.6 回歸測試 226
本章小結 227
本章練習題 227
第10章 軟件實施、維護與進化 230
10.1 軟件實施概述 230
10.2 軟件維護概述 232
10.2.1 軟件維護的類型 232
10.2.2 軟件維護存在的問題 233
10.2.3 軟件維護的風險 234
10.2.4 軟件維護的過程 235
10.2.5 軟件的可維護性 236
10.3 軟件進化概述 237
10.3.1 進化過程 238
10.3.2 遺留系統(tǒng) 238
10.3.3 軟件再工程 240
本章小結 242
本章練習題 243
第11章 軟件工程標準與文檔 244
11.1 軟件工程標準 244
11.2 軟件工程國家標準 245
11.3 軟件工程文檔標準(GB/T 8567-2006國家標準) 247
11.3.1 軟件生存周期與各種文檔的編制 247
11.3.2 文檔編制中的考慮因素 249
11.3.3 可行性研究報告 251
11.3.4 軟件開發(fā)計劃 253
11.3.5 系統(tǒng)/子系統(tǒng)需求規(guī)格說明 258
11.3.6 系統(tǒng)/子系統(tǒng)設計(結構設計)說明 266
11.3.7 數(shù)據(jù)需求說明 272
11.3.8 軟件測試說明 274
11.3.9 軟件測試報告 278
11.3.10 項目開發(fā)總結報告 280
11.3.11 軟件用戶手冊 282
11.3.12 面向對象軟件的文檔編制 285
本章小結 294
本章練習題 294