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