本書從軟件工程的基本原理出發(fā),以適應(yīng)本科專業(yè)的教學(xué)和實踐為宗旨,在充分吸收國內(nèi)外軟件工程研究成果精華的基礎(chǔ)上,依據(jù)作者多年軟件工程領(lǐng)域的教學(xué)和科研經(jīng)驗,結(jié)合國內(nèi)軟件開發(fā)的特點編寫而成。本書正文共9章,第1章是理解軟件工程,第2-5章講述了軟件開發(fā)的各個方面,包括軟件過程、需求工程、軟件質(zhì)量管理和成本評估等,第6章介紹了軟件工程對社會的影響,第7-8章介紹了軟件管理和維護等相關(guān)內(nèi)容,第9章列出了軟件相關(guān)的國際和國家標準。
前 言
軟件是新一代信息技術(shù)產(chǎn)業(yè)的靈魂,軟件定義是信息革命的新標志和新特征。軟件和信息服務(wù)業(yè)是引領(lǐng)科技創(chuàng)新、驅(qū)動經(jīng)濟社會轉(zhuǎn)型發(fā)展的核心力量,是建設(shè)制造強國和網(wǎng)絡(luò)強國的核心支撐。如今,世界產(chǎn)業(yè)格局正在發(fā)生深刻變化,發(fā)達國家在工業(yè)互聯(lián)網(wǎng)、智能制造、人工智能、大數(shù)據(jù)等領(lǐng)域加速戰(zhàn)略布局,搶占未來發(fā)展主導(dǎo)權(quán),給我國軟件和信息技術(shù)服務(wù)業(yè)的跨越發(fā)展帶來了深刻影響。黨的二十大報告構(gòu)建新一代信息技術(shù)、人工智能等一批新的增長引擎的需求、《中國制造2025》的發(fā)布,一帶一路的提出,互聯(lián)網(wǎng) 行動計劃、數(shù)字中國、軍民融合發(fā)展戰(zhàn)略的推進實施,國家網(wǎng)絡(luò)安全保障的戰(zhàn)略需求,乃至第二個百年奮斗目標的要求,賦予了我國軟件和信息技術(shù)服務(wù)業(yè)新的使命和任務(wù)。
以互聯(lián)網(wǎng)、大數(shù)據(jù)為代表的數(shù)字革命正在深刻改變著經(jīng)濟形態(tài)和人們的生活方式。計算、網(wǎng)絡(luò)和數(shù)據(jù)無所不在,軟件是支撐計算、網(wǎng)絡(luò)和數(shù)據(jù)的基礎(chǔ),是承載數(shù)字要素信息的有效載體。但由于軟件固有的復(fù)雜性、抽象性、不可見性等特性,軟件開發(fā)周期長、代價高和質(zhì)量低的問題依然存在,軟件危機還無法從根本上消除。軟件工程的誕生和發(fā)展大大提高了軟件開發(fā)的效率和軟件質(zhì)量,越來越顯示出重要的作用。軟件工程已成為信息社會高技術(shù)競爭的關(guān)鍵領(lǐng)域之一。
軟件工程課程是一門綜合性和實踐性比較強的課程,在高等學(xué)校計算機相關(guān)專業(yè)的教學(xué)中有著重要的作用,其學(xué)習(xí)效果直接影響到學(xué)生畢業(yè)后在軟件開發(fā)和項目管理相關(guān)工作中的競爭力。軟件工程是軟件工程專業(yè)、計算機科學(xué)與技術(shù)專業(yè)的必修課程,也是軟件分析和設(shè)計人員、軟件開發(fā)人員、軟件測試人員、軟件管理人員、軟件售前和售后工程師、軟件高層決策者必須學(xué)習(xí)的專業(yè)課程。
一本好的軟件工程教材應(yīng)具備科學(xué)性、先進性、工程性和實用性,更貼近高校師生的實際需求,更能體現(xiàn)軟件企業(yè)目前的真實應(yīng)用,從而幫助學(xué)生快速掌握軟件的理論、技術(shù)和方法。出于這樣的認識,在編寫本書的過程中我們認真總結(jié)了多年的教學(xué)經(jīng)驗,并融入了部分軟件工程領(lǐng)域的新發(fā)展,希望本書能給讀者帶來一些收獲。
在編寫過程中,我們力求反映三大特色:一是內(nèi)容全面,本書不僅覆蓋軟件工程領(lǐng)域的基本概念和思想,同時突出軟件工程研究和實踐的新進展,希望能夠使讀者對軟件工程有較為全面的理解;二是注重實踐,本書從實用角度介紹軟件工程技術(shù)方法,并配以豐富且貼切的實例,每章設(shè)置若干有啟發(fā)性的練習(xí)和討論題目,希望能夠?qū)ψx者開展實際的軟件工程活動有所幫助;三是價值引領(lǐng),本書全面落實黨的二十大報告關(guān)于實施科教興國戰(zhàn)略,強化現(xiàn)代化建設(shè)人才支撐,著力培養(yǎng)擔(dān)當(dāng)民族復(fù)興大任的時代新人,在介紹知識的同時注重融入職業(yè)道德、科技創(chuàng)新、家國情懷等思政元素,希望能夠促進師生達成課程思政的教育目標。
由于精力和水平有限,且計算機軟件技術(shù)的發(fā)展日新月異,因此書中難免存在不足之處,誠懇歡迎各位讀者提出寶貴的意見和建議,以便我們及時修正。
教學(xué)建議
本書可作為各類理工科大學(xué)計算機相關(guān)專業(yè)軟件工程課程的教材,也可作為IT企業(yè)軟件工程師的參考書。作為大學(xué)教材時,教學(xué)內(nèi)容應(yīng)涵蓋全部章節(jié),建議開設(shè)3學(xué)分、48學(xué)時的課程。
建議先修課程:數(shù)據(jù)結(jié)構(gòu)、面向?qū)ο蟪绦蛟O(shè)計、數(shù)據(jù)庫原理與應(yīng)用等。
第1章 理解軟件工程(2~4學(xué)時)
本章介紹軟件工程的基礎(chǔ)知識,包括軟件的發(fā)展、軟件的特性、軟件的分類、軟件工程的起源、軟件質(zhì)量、軟件團隊、軟件工程的知識領(lǐng)域和軟件工程師的職業(yè)道德。本章旨在使讀者建立對軟件工程的整體認識,教師應(yīng)注重引導(dǎo)學(xué)生完成學(xué)習(xí)目標并激發(fā)學(xué)生的學(xué)習(xí)興趣。
第2章 軟件工程發(fā)展(2~4學(xué)時)
本章介紹軟件工程的發(fā)展歷程、軟件工程中新技術(shù)的影響、軟件工程中人的因素以及軟件工程的未來發(fā)展。軟件工程的發(fā)展歷程包括傳統(tǒng)的、面向?qū)ο蟮摹⒒跇?gòu)件的、面向服務(wù)的軟件工程等,目前為流行的是面向?qū)ο蟮姆椒。本章還分析了云計算、大數(shù)據(jù)、移動應(yīng)用等新技術(shù)對軟件工程的影響。本章旨在使讀者認識到軟件工程的理論和方法在不斷發(fā)展,也意識到人的因素對軟件開發(fā)的重要作用,教師可啟發(fā)學(xué)生開展自主探究式學(xué)習(xí),引導(dǎo)學(xué)生發(fā)現(xiàn)現(xiàn)象并總結(jié)規(guī)律。
第3章 軟件過程(4~6學(xué)時)
本章介紹軟件生命周期模型,包括瀑布模型、快速原型模型、增量模型、螺旋模型、噴泉模型,F(xiàn)代的軟件過程模型包括統(tǒng)一過程、敏捷開發(fā)、開源軟件的過程模型等。本章后介紹了CMM、IDEAL、PSP等軟件過程改進模型。本章側(cè)重使讀者掌握Scrum等方法,體會軟件過程改進的重要性,教師應(yīng)注重各種模型之間的聯(lián)系與區(qū)別。
第4章 理解需求(2~4學(xué)時)
本章介紹需求工程的基本知識和方法,并以智慧教室系統(tǒng)開發(fā)為例,詳細分析了需求獲取、通過用例和場景進行需求建模以及利用用戶故事地圖建立項目需求的方法。本章旨在使讀者掌握需求工程的基本方法,高度重視需求工程對軟件開發(fā)的重要意義,教師可運用案例進行分析討論。
第5章 需求分析(6~8學(xué)時)
本章介紹結(jié)構(gòu)化分析、面向?qū)ο蠓治龊托?/p>
江頡,博士,浙江工業(yè)大學(xué)教務(wù)處副處長,浙江工業(yè)大學(xué)計算機科學(xué)與技術(shù)學(xué)院原副院長、副教授。2018年獲得高等教育教學(xué)成果獎二等獎1項,2021年獲得浙江省高等教育教學(xué)成果獎特等獎1項;2018年浙江工業(yè)大學(xué)計算機科學(xué)與技術(shù)專業(yè)、軟件工程專業(yè)通過國家工程教育專業(yè)認證,擔(dān)任組織工作者。
前言
教學(xué)建議
第1章 理解軟件工程1
1.1 軟件的發(fā)展2
1.2 軟件的特性和分類3
1.2.1 軟件的特性3
1.2.2 軟件的分類5
1.3 軟件工程的起源6
1.3.1 軟件危機6
1.3.2 軟件工程的定義7
1.3.3 軟件過程8
1.4 軟件質(zhì)量 9
1.5 軟件團隊11
1.6 軟件工程的知識領(lǐng)域14
1.7 軟件工程師的職業(yè)道德16
練習(xí)和討論16
第2章 軟件工程發(fā)展18
2.1 軟件工程發(fā)展歷程19
2.1.1 傳統(tǒng)軟件工程19
2.1.2 面向?qū)ο蟮能浖こ?0
2.1.3 基于構(gòu)件的軟件工程21
2.1.4 面向服務(wù)的軟件工程21
2.2 軟件工程中新技術(shù)的影響22
2.2.1 云計算與軟件工程22
2.2.2 大數(shù)據(jù)與軟件工程24
2.2.3 移動應(yīng)用與軟件工程26
2.3 軟件工程中人的因素27
2.4 軟件工程的未來發(fā)展29
練習(xí)和討論30
第3章 軟件過程31
3.1 軟件生命周期模型31
3.1.1 瀑布模型32
3.1.2 快速原型模型34
3.1.3 增量模型35
3.1.4 螺旋模型35
3.1.5 噴泉模型36
3.2 統(tǒng)一過程37
3.2.1 RUP的產(chǎn)生37
3.2.2 RUP的過程模型38
3.2.3 RUP的特點40
3.3 敏捷開發(fā)41
3.3.1 敏捷原則41
3.3.2 敏捷過程43
3.3.3 極限編程43
3.3.4 Scrum44
3.4 開源軟件48
3.4.1 開源軟件的發(fā)展48
3.4.2 開源軟件開發(fā)過程49
3.5 軟件過程的改進50
3.5.1 軟件過程特性50
3.5.2 能力成熟度模型51
3.5.3 IDEAL模型52
3.5.4 個人軟件過程52
練習(xí)和討論53
第4章 理解需求55
4.1 需求工程55
4.2 需求獲取57
4.2.1 需求獲取方式57
4.2.2 應(yīng)用領(lǐng)域理解58
4.2.3 應(yīng)用實例需求獲取59
4.3 用例和場景61
4.3.1 UML用例和場景61
4.3.2 業(yè)務(wù)模型應(yīng)用實例63
4.4 用戶故事地圖71
4.4.1 用戶故事71
4.4.2 用戶故事估算和計劃73
4.4.3 用戶故事地圖73
練習(xí)和討論75
第5章 需求分析77
5.1 面向數(shù)據(jù)流的結(jié)構(gòu)化分析78
5.1.1 半形式化分析技術(shù)78
5.1.2 Gane和Sarsen結(jié)構(gòu)化系統(tǒng)
分析方法82
5.2 結(jié)構(gòu)化分析實例83
5.2.1 逐步求精數(shù)據(jù)流圖83
5.2.2 定義數(shù)據(jù)字典84
5.2.3 建造實體關(guān)系模型86
5.3 面向?qū)ο蠓治?8
5.3.1 面向?qū)ο蠓椒ê徒Y(jié)構(gòu)化
方法88
5.3.2 面向?qū)ο蠓治鲋械闹饕?br /> 技術(shù)88
5.3.3 面向?qū)ο蠓治龇椒ǖ闹饕?br /> 步驟90
5.4 面向?qū)ο蠓治鰧嵗?3
5.4.1 功能建模93
5.4.2 類建模96
5.4.3 動態(tài)建模97
5.5 形式化分析技術(shù)101
練習(xí)和討論104
第6章 軟件設(shè)計106
6.1 軟件工程中的設(shè)計107
6.1.1 設(shè)計原理107
6.1.2 設(shè)計過程109
6.2 結(jié)構(gòu)化設(shè)計111
6.2.1 結(jié)構(gòu)化設(shè)計的主要步驟111
6.2.2 結(jié)構(gòu)化設(shè)計實例115
6.3 面向?qū)ο蟮脑O(shè)計119
6.3.1 面向?qū)ο筌浖O(shè)計的步驟119
6.3.2 面向?qū)ο筌浖O(shè)計實例121
6.4 用戶界面設(shè)計126
6.4.1 黃金規(guī)則126
6.4.2 用戶界面設(shè)計過程128
6.4.3 GUI設(shè)計規(guī)則129
6.5 面向?qū)ο筌浖O(shè)計優(yōu)化131
6.5.1 面向?qū)ο筌浖O(shè)計原則131
6.5.2 面向?qū)ο筌浖O(shè)計模式133
練習(xí)和討論135
第7章 軟件實現(xiàn)與測試137
7.1 高質(zhì)量軟件開發(fā)的基本方法138
7.2 代碼規(guī)范139
7.2.1 代碼規(guī)范的重要性139
7.2.2 常見的代碼規(guī)范140
7.2.3 代碼重構(gòu)142
7.3 軟件測試145
7.3.1 軟件測試簡介145
7.3.2 軟件測試的分類145
7.3.3 自動化測試147
7.3.4 軟件測試模型148
7.3.5 黑盒測試和玻璃盒測試150
7.4 測試驅(qū)動開發(fā)155
7.4.1 TDD的基本概念155
7.4.2 TDD的實施步驟156
7.4.3 基于單元測試的TDD實例(Java)157
7.5 集成160
7.5.1 軟件集成160
7.5.2 持續(xù)集成161
練習(xí)和討論163
第8章 軟件維護與演化164
8.1 軟件維護與更新164
8.1.1 軟件的可維護性165
8.1.2 軟件維護類型165
8.1.3 軟件維護流程167
8.1.4 軟件維護的困難及對應(yīng)
策略168
8.2 軟件部署169
8.2.1 軟件部署的概念169
8.2.2 軟件部署工具Docker169
8.3 軟件配置管理172
8.3.1 軟件配置管理的作用172
8.3.2 軟件配置管理過程172
8.3.3 常用的軟件配置管理工具173
練習(xí)和討論 178
第9章 軟件項目組織與管理180
9.1 軟件工程項目管理180
9.1.1 項目啟動管理181
9.1.2 項目計劃管理181
9.1.3 人員組織與管理183
9.1.4 變更管理184
9.1.5 風(fēng)險管理186
9.2 計劃與估算189
9.2.1 計劃189
9.2.2 軟件規(guī)模估算191
9.2.3 工作量估算193
9.2.4 軟件項目管理計劃的組成196
9.2.5 IEEE軟件項目管理計劃197
9.3 軟件項目團隊管理199
9.3.1 軟件項目團隊管理概述199
9.3.2 項目組織的規(guī)劃200
9.3.3 團隊建設(shè)和日常管理200
練習(xí)和討論201
第10章 軟件創(chuàng)新202
10.1 新技術(shù)對軟件創(chuàng)新開發(fā)的影響202
10.1.1 深度學(xué)習(xí)202
10.1.2 5G通信技術(shù)203
10.1.3 大數(shù)據(jù)203
10.1.4 云計算203
10.2 軟件產(chǎn)品的更新與迭代203
10.3 軟件開發(fā)創(chuàng)新204
10.3.1 商業(yè)模式創(chuàng)新原則204
10.3.2 業(yè)務(wù)驅(qū)動原則205
10.3.3 開發(fā)模式匹配原則205
10.3.4 UI/UE先行原則 206
10.3.5 樣式家族化原則206
10.3.6 組件化開發(fā)原則206
10.3.7 核心競爭力培養(yǎng)原則207
10.4 案例分析1:智慧城市軟件
系統(tǒng)207
10.5 案例分析2:云課堂系統(tǒng)209
10.6 案例分析3:虛實融合的舞臺
演藝系統(tǒng)211
練習(xí)和討論213
第11章 軟件工程與社會214
11.1 計算機安全215
11.1.1 計算機安全問題與措施215
11.1.2 計算機安全事件實例216
11.2 軟件工程與法律218
11.2.1 信息時代下的《民法典》218
11.2.2 軟件開發(fā)合同218
11.2.3 知識產(chǎn)權(quán)219
11.3 軟件工程與道德 221
11.3.1 用戶的道德問題221
11.3.2 軟件開發(fā)者的道德問題222
11.4 軟件工程與經(jīng)濟223
11.4.1 軟件產(chǎn)業(yè)對經(jīng)濟發(fā)展的
影響224
11.4.2 軟件對人類經(jīng)濟生活的
影響224
練習(xí)和討論226
第12章 軟件相關(guān)的國家標準
和國際標準227
12.1 軟件工程國家標準227
12.2 軟件工程國際標準228
12.3 軟件工程文檔撰寫國家標準230
12.3.1 可行性研究報告230
12.3.2 開發(fā)計劃234
12.3.3 需求規(guī)格說明書235
12.3.4 概要設(shè)計說明書237
12.3.5 詳細設(shè)計說明書239
12.3.6 測試計劃240
12.3.7 用戶操作手冊242
練習(xí)和討論244
參考文獻245