軟件工程是應(yīng)用計算機科學(xué)技術(shù)、數(shù)學(xué)、管理學(xué)的原理,運用工程科學(xué)的理論、方法和技術(shù),研究和指導(dǎo)軟件開發(fā)和演化的一門交叉學(xué)科。隨著科技的發(fā)展,軟件工程已成為計算機科學(xué)、軟件工程及其相關(guān)專業(yè)的一門重要的必修課。其教學(xué)目的在于使學(xué)生掌握軟件工程的基本概念和原則,培養(yǎng)學(xué)生使用工程化的方法高效地開發(fā)高質(zhì)量軟件的能力,以及進行項目管理的能力。
本書分6部分:軟件工程概述、可行性研究與項目開發(fā)計劃、結(jié)構(gòu)化分析與設(shè)計、面向?qū)ο蠓治雠c設(shè)計、軟件實現(xiàn)與測試、軟件維護與軟件工程管理。
本書共13章,內(nèi)容涉及軟件與軟件工程、軟件過程、敏捷軟件開發(fā)、可行性研究與項目開發(fā)計劃、結(jié)構(gòu)化分析、結(jié)構(gòu)化設(shè)計、面向?qū)ο蠓椒ㄅcUML、面向?qū)ο蠓治、軟件體系結(jié)構(gòu)與設(shè)計模式、面向?qū)ο笤O(shè)計、軟件實現(xiàn)、軟件測試和軟件維護與軟件工程管理。
掃碼查看
本書的內(nèi)容結(jié)構(gòu)和知識體系已整理為思維導(dǎo)圖,讀者可掃描上方二維碼查看。
本書的理論知識的教學(xué)安排建議如表01所示。
表01教學(xué)安排
章節(jié)內(nèi)容學(xué)時數(shù)
第1章軟件與軟件工程1~2
第2章軟件過程2
第3章敏捷軟件開發(fā)2~4
第4章項目立項、可行性研究與項目開發(fā)計劃2
第5章結(jié)構(gòu)化分析2~4
第6章結(jié)構(gòu)化設(shè)計2~4
第7章面向?qū)ο蠓椒ㄅcUML4~6
第8章面向?qū)ο蠓治?~6
第9章軟件體系結(jié)構(gòu)與設(shè)計模式1~2
第10章面向?qū)ο笤O(shè)計4~6
第11章軟件實現(xiàn)2
第12章軟件測試4~6
第13章軟件維護與軟件工程管理2
建議先修課程: 計算機導(dǎo)論、面向?qū)ο蟪绦蛟O(shè)計、數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫原理等。
建議理論教學(xué)時數(shù): 32~48學(xué)時。
建議實驗(實踐)教學(xué)時數(shù): 16~32學(xué)時。
教師可以按照自己對軟件工程的理解適當?shù)貏h除一些章節(jié),也可以根據(jù)教學(xué)目標,靈活地調(diào)整章節(jié)的順序,增減各章的學(xué)時數(shù)。
本書的作者為呂云翔、曾洪立。感謝蔣博文團隊、石遠翔團隊、張中基等對本書的大力支持,感謝所有為此書做出貢獻的同仁們。
本書配套的視頻二維碼位置如表02所示。
表02視頻二維碼位置
序號視頻內(nèi)容標題視頻二維碼位置所在頁碼
1模塊設(shè)計啟發(fā)規(guī)則6.1.2軟件設(shè)計的原則101
2模塊分割方法6.1.2軟件設(shè)計的原則101
3結(jié)構(gòu)化軟件設(shè)計的任務(wù)6.4結(jié)構(gòu)化設(shè)計概述110
4用C 理解類與對象7.1.1面向?qū)ο蟮幕靖拍?39
5用C 理解繼承與組合7.1.1面向?qū)ο蟮幕靖拍?39
6用C 理解虛函數(shù)與多態(tài)7.1.1面向?qū)ο蟮幕靖拍?39
7使用UML的準則7.2.2UML的特點143
8在統(tǒng)一軟件開發(fā)過程中使用UML7.2.3UML的應(yīng)用范圍144
9用例的特征7.3.1用例圖146
10繪制機票預(yù)訂系統(tǒng)的用例圖7.3.1用例圖146
11繪制機票預(yù)訂系統(tǒng)的類圖7.3.2類圖與對象圖148
12繪制機票預(yù)訂系統(tǒng)的順序圖7.4.1順序圖153
13繪制機票預(yù)訂系統(tǒng)的協(xié)作圖7.4.2協(xié)作圖155
14繪制機票預(yù)訂系統(tǒng)的狀態(tài)圖7.4.3狀態(tài)圖156
15繪制機票預(yù)訂系統(tǒng)的活動圖7.4.4活動圖157
16繪制機票預(yù)訂系統(tǒng)的構(gòu)件圖7.5.1構(gòu)件圖159
17繪制機票預(yù)訂系統(tǒng)的部署圖7.5.2部署圖159
18面向?qū)ο髮崿F(xiàn)之提高可重用性11.3面向?qū)ο髮崿F(xiàn)253
19面向?qū)ο髮崿F(xiàn)之提高可擴充性11.3面向?qū)ο髮崿F(xiàn)253
20面向?qū)ο髮崿F(xiàn)之提高健壯性11.3面向?qū)ο髮崿F(xiàn)253
21手工測試與自動化測試12.2軟件測試的分類273
22黑盒測試的優(yōu)缺點12.5.7黑盒測試方法的選擇285
23白盒測試的優(yōu)缺點12.6.6白盒測試方法的選擇291
24導(dǎo)致維護困難的一些因素13.1軟件維護325
25維護工作流程13.1.2軟件維護的過程326
26維護的代價及其主要因素13.1.4軟件的可維護性329
27Project的安裝與使用附錄B363
28Visio的使用附錄B363
29GitHub的安裝和使用附錄B363
30Enterprise Architect的安裝與使用附錄B363
31Rational Rose的安裝與使用附錄B363
32Visual Studio Code的安裝與使用附錄B363
續(xù)表
序號視頻內(nèi)容標題視頻二維碼位置所在頁碼
33Webstorm的安裝與使用附錄B363
34PyCharm的安裝與使用附錄B363
35Junit的安裝與使用附錄B363
36unittest的安裝與使用附錄B363
37Pytest的安裝與使用附錄B363
38使用Python對求兩個整數(shù)的最大公約數(shù)進行編程,并用unittest進行單元測試(有文檔)附錄B363
39使用Java對求兩個整數(shù)的最大公約數(shù)進行編程,并用Junit進行單元測試(有文檔)附錄B363
40使用Junit對HelloWorld進行單元測試(有文檔)附錄B363
41使用unittest對俄羅斯方塊游戲排行榜進行單元測試(有文檔)附錄B363
42使用Java對象HttpURLConnection發(fā)送GET請求獲取頁面源文件(有文檔)附錄B363
43移動App的非功能性測試(有文檔)附錄B363
44使用unittest框架對sort函數(shù)進行單元測試(有文檔)附錄B363
45使用Pytest框架對Calculator函數(shù)進行單元測試(有文檔)附錄B363
46構(gòu)建Postman Newman Jenkins接口測試框架(有文檔)附錄B363
47使用unittest框架對線性查找函數(shù)進行單元測試(有文檔)附錄B363
48使用Pytest框架對冒泡排序函數(shù)進行單元測試(有文檔)附錄B363
49使用Postman對getWeather接口進行關(guān)聯(lián)測試(有文檔)附錄B363
50使用Python Selenium unittest完成對登錄頁面的自動化測試(有文檔)附錄B363
51使用Jmeter錄制一個網(wǎng)頁的操作腳本(有文檔)附錄B363
52SoapUI接口測試工具的使用(有文檔)附錄B363
由于軟件工程還在發(fā)展之中,軟件工程的教學(xué)方法本身還在探索之中,加之編者水平和能力有限,本書難免有疏漏之處。懇請各位同仁和廣大讀者給予批評指正,也希望各位能將實踐過程中積累的經(jīng)驗和心得與我們交流。
編者2022年4月
第一部分軟件工程概述
第1章軟件與軟件工程
1.1軟件
1.1.1軟件的概念及特點
1.1.2軟件的分類
1.2軟件危機
1.2.1軟件危機的表現(xiàn)及其產(chǎn)生原因
1.2.2軟件危機的啟示
1.3軟件工程
1.3.1軟件工程的概念
1.3.2軟件工程研究的內(nèi)容
1.3.3軟件工程目標和原則
1.3.4軟件工程知識體系
1.3.5軟件工程的發(fā)展
1.4軟件開發(fā)方法
1.4.1基本的軟件開發(fā)方法
1.4.2開源軟件開發(fā)方法
1.4.3群體化軟件開發(fā)方法
1.5軟件工程工具
1.6軟件工程人員的職業(yè)道德
1.7小型網(wǎng)上書店系統(tǒng)案例介紹
習(xí)題
第2章軟件過程
2.1軟件過程概述
2.2軟件生命周期
2.2.1軟件生命周期的概念
2.2.2傳統(tǒng)軟件生命周期的各個階段
2.3軟件過程模型
2.3.1瀑布模型
2.3.2快速原型模型
2.3.3增量模型
2.3.4螺旋模型
2.3.5噴泉模型
2.3.6基于組件的開發(fā)模型
2.3.7統(tǒng)一軟件開發(fā)過程模型
2.3.8幾種模型之間的關(guān)系
2.3.9選擇軟件過程模型
2.4軟件過程實例
習(xí)題
第3章敏捷軟件開發(fā)
3.1敏捷軟件開發(fā)方法
3.2Scrum
3.2.1概述
3.2.2Sprint
3.2.3每日站會
3.2.4用戶故事
3.2.5Backlog
3.2.6結(jié)對編程
3.3看板
3.3.1概述
3.3.2看板與Scrum的區(qū)別
3.4極限編程
3.4.1XP的4個價值觀
3.4.2XP的12個核心實踐
3.5CI/CD
3.5.1CI/CD概述
3.5.2CI/CD管道
3.5.3CI/CD的優(yōu)勢
3.6DevOps
3.6.1DevOps生命周期
3.6.2DevOps文化
3.6.3DevOps工具
3.7敏捷軟件開發(fā)、CI/CD和DevOps
3.8敏捷軟件開發(fā)實例
習(xí)題
第二部分可行性研究與項目開發(fā)計劃
第4章項目立項、可行性研究與項目開發(fā)計劃
4.1項目立項概述
4.2可行性研究的任務(wù)
4.2.1技術(shù)可行性
4.2.2操作可行性
4.2.3經(jīng)濟可行性
4.3可行性研究的步驟
4.4可行性研究實例
4.5制訂項目開發(fā)計劃
4.6案例: 小型網(wǎng)上書店系統(tǒng)的軟件開發(fā)計劃書
習(xí)題
第三部分結(jié)構(gòu)化分析與設(shè)計
第5章結(jié)構(gòu)化分析
5.1需求分析
5.1.1需求分析的任務(wù)和原則
5.1.2需求分析的步驟
5.1.3需求管理
5.1.4需求分析的常用方法
5.1.5軟件原型
5.2結(jié)構(gòu)化分析概述
5.3結(jié)構(gòu)化分析方法
5.3.1功能建模
5.3.2數(shù)據(jù)建模
5.3.3行為建模
5.3.4數(shù)據(jù)字典
5.3.5加工規(guī)格說明
5.4結(jié)構(gòu)化分析的圖形工具
5.4.1層次方框圖
5.4.2Warnier圖
5.4.3IPO圖
5.5結(jié)構(gòu)化分析實例
習(xí)題
第6章結(jié)構(gòu)化設(shè)計
6.1軟件設(shè)計的基本概念
6.1.1軟件設(shè)計的意義和目標
6.1.2軟件設(shè)計的原則
6.1.3軟件設(shè)計的分類
6.2數(shù)據(jù)庫結(jié)構(gòu)設(shè)計
6.3用戶界面設(shè)計
6.3.1設(shè)計驅(qū)動開發(fā)
6.3.2目標用戶群體
6.3.3簡潔與清晰
6.3.4實現(xiàn)模型與心智模型
6.3.5設(shè)計的規(guī)范性
6.3.6設(shè)計的可用性和易用性
6.3.7設(shè)計的一致性
6.3.8設(shè)計的容錯性
6.4結(jié)構(gòu)化設(shè)計概述
6.5結(jié)構(gòu)化設(shè)計與結(jié)構(gòu)化分析的關(guān)系
6.6體系結(jié)構(gòu)設(shè)計
6.6.1表示軟件結(jié)構(gòu)的圖形工具
6.6.2面向數(shù)據(jù)流的設(shè)計方法
6.6.3面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計方法
6.7接口設(shè)計
6.7.1接口設(shè)計概述
6.7.2界面設(shè)計
6.7.3UX設(shè)計與UI設(shè)計的區(qū)別
6.8數(shù)據(jù)設(shè)計
6.9過程設(shè)計
6.9.1程序流程圖
6.9.2NS圖
6.9.3PAD
6.9.4過程設(shè)計語言
6.10軟件設(shè)計評審
6.11結(jié)構(gòu)化設(shè)計實例
習(xí)題
第四部分面向?qū)ο蠓治雠c設(shè)計
第7章面向?qū)ο蠓椒ㄅcUML
7.1面向?qū)ο蟮能浖こ谭椒?/p>
7.1.1面向?qū)ο蟮幕靖拍?/p>
7.1.2面向?qū)ο蟮能浖こ谭椒ǖ奶卣髋c優(yōu)勢
7.1.3面向?qū)ο蟮膶嵤┎襟E
7.2統(tǒng)一建模語言UML
7.2.1UML簡述
7.2.2UML的特點
7.2.3UML的應(yīng)用范圍
7.2.4UML的圖
7.2.5UML4 1視圖
7.3靜態(tài)建模機制
7.3.1用例圖
7.3.2類圖和對象圖
7.3.3包圖
7.4動態(tài)建模機制
7.4.1順序圖
7.4.2協(xié)作圖
7.4.3狀態(tài)圖
7.4.4活動圖
7.5描述物理架構(gòu)的機制
7.5.1構(gòu)件圖
7.5.2部署圖
7.6面向?qū)ο蠓椒ㄅcUML實例
習(xí)題
第8章面向?qū)ο蠓治?/p>
8.1面向?qū)ο蠓治龇椒?/p>
8.1.1面向?qū)ο蠓治鲞^程
8.1.2面向?qū)ο蠓治鲈瓌t
8.2面向?qū)ο蠼?/p>
8.2.1建立對象模型
8.2.2建立動態(tài)模型
8.2.3建立功能模型
8.2.43種模型之間的關(guān)系
8.3面向?qū)ο蠓治鰧嵗?/p>
8.4案例: 小型網(wǎng)上書店系統(tǒng)的需求規(guī)格說明書
習(xí)題
第9章軟件體系結(jié)構(gòu)與設(shè)計模式
9.1軟件體系結(jié)構(gòu)的概念
9.1.1什么是軟件體系結(jié)構(gòu)
9.1.2軟件體系結(jié)構(gòu)建模
9.1.3軟件體系結(jié)構(gòu)的分層模型
9.1.4軟件體系結(jié)構(gòu)的作用
9.2典型的軟件體系結(jié)構(gòu)風格
9.2.1數(shù)據(jù)流風格
9.2.2調(diào)用/返回風格
9.2.3獨立構(gòu)件風格
9.2.4虛擬機風格
9.2.5倉庫風格
9.3軟件質(zhì)量屬性
9.4分布式系統(tǒng)結(jié)構(gòu)
9.4.1多處理器體系結(jié)構(gòu)
9.4.2客戶機/服務(wù)器體系結(jié)構(gòu)
9.4.3分布式對象體系結(jié)構(gòu)
9.4.4對等端體系結(jié)構(gòu)
9.4.5代理
9.5體系結(jié)構(gòu)框架
9.5.1模型視圖控制器
9.5.2模型視圖表示器
9.5.3J2EE體系結(jié)構(gòu)框架
9.5.4PCMEF框架
9.5.5PCBMER框架
9.6軟件系統(tǒng)的設(shè)計模式
9.6.1工廠模式
9.6.2橋接模式
9.6.3策略模式
9.6.4其他模式
9.7軟件體系結(jié)構(gòu)與設(shè)計模式實例
習(xí)題
第10章面向?qū)ο笤O(shè)計
10.1面向?qū)ο笤O(shè)計與結(jié)構(gòu)化設(shè)計
10.2面向?qū)ο笤O(shè)計與面向?qū)ο蠓治龅年P(guān)系
10.3面向?qū)ο笤O(shè)計的過程與原則
10.3.1面向?qū)ο笤O(shè)計的過程
10.3.2面向?qū)ο笤O(shè)計的原則
10.4面向?qū)ο笤O(shè)計的啟發(fā)規(guī)則
10.5系統(tǒng)設(shè)計
10.5.1系統(tǒng)分解
10.5.2問題域子系統(tǒng)的設(shè)計
10.5.3人機交互子系統(tǒng)的設(shè)計
10.5.4任務(wù)管理子系統(tǒng)的設(shè)計
10.5.5數(shù)據(jù)管理子系統(tǒng)的設(shè)計
10.6對象設(shè)計
10.6.1設(shè)計類中的服務(wù)
10.6.2設(shè)計類的關(guān)聯(lián)
10.6.3對象設(shè)計優(yōu)化
10.7面向?qū)ο笤O(shè)計實例
10.8案例: 小型網(wǎng)上書店系統(tǒng)的軟件設(shè)計說明書
習(xí)題
第五部分軟件實現(xiàn)與測試
第11章軟件實現(xiàn)
11.1編程語言
11.1.1編程語言的發(fā)展與分類
11.1.2選擇編程語言需考慮的因素
11.2編碼風格與規(guī)范
11.3面向?qū)ο髮崿F(xiàn)
11.4代碼重用
11.5分析和評價代碼的質(zhì)量
11.6軟件實現(xiàn)實例
11.7實驗: 使用Visual Studio Code 實現(xiàn)小型網(wǎng)上書店系統(tǒng)的
用戶登錄模塊
11.8案例: 小型網(wǎng)上書店系統(tǒng)的源代碼
習(xí)題
第12章軟件測試
12.1軟件測試的基本概念
12.1.1軟件測試的原則
12.1.2軟件測試模型
12.2軟件測試的分類
12.3測試用例
12.3.1測試用例編寫
12.3.2測試用例設(shè)計
12.3.3測試用例場景
12.4軟件測試方法
12.5黑盒測試
12.5.1等價類劃分法
12.5.2邊界值分析法
12.5.3錯誤推測法
12.5.4因果圖法
12.5.5決策表法
12.5.6場景法
12.5.7黑盒測試方法的選擇
12.6白盒測試
12.6.1代碼檢查法
12.6.2靜態(tài)結(jié)構(gòu)分析法
12.6.3程序插樁技術(shù)
12.6.4邏輯覆蓋法
12.6.5基本路徑法
12.6.6白盒測試方法的選擇
12.6.7白盒測試與黑盒測試比較
12.7軟件測試的一般步驟
12.8單元測試
12.8.1單元測試概述
12.8.2單元測試內(nèi)容
12.8.3單元測試方法
12.9集成測試
12.9.1集成測試概述
12.9.2集成測試分析
12.9.3集成測試策略
12.10系統(tǒng)測試
12.10.1系統(tǒng)測試概述
12.10.2系統(tǒng)測試類型
12.11驗收測試
12.11.1驗收測試概述
12.11.2驗收測試內(nèi)容
12.11.3測試和測試
12.12回歸測試
12.13面向?qū)ο鬁y試
12.14自動化測試
12.14.1手工測試與自動化測試
12.14.2自動化測試的優(yōu)缺點
12.14.3自動化測試工具
12.15軟件調(diào)試
12.15.1調(diào)試過程
12.15.2調(diào)試途徑
12.16軟件測試實例
12.17實驗: 使用Visual Studio Code 對小型網(wǎng)上書店系統(tǒng)的
用戶登錄模塊進行單元測試
12.18案例: 小型網(wǎng)上書店系統(tǒng)的測試分析報告
習(xí)題
第六部分軟件維護與軟件工程管理
第13章軟件維護與軟件工程管理
13.1軟件維護
13.1.1軟件部署與軟件交付
13.1.2軟件維護的過程
13.1.3軟件維護的分類
13.1.4軟件的可維護性
13.1.5軟件維護的副作用
13.1.6自動化運維
13.1.7軟件再工程重構(gòu)、正向工程、逆向工程
13.2軟件估算
13.2.1軟件估算的概念
13.2.2軟件估算的方法
13.2.3軟件估算的原則與技巧
13.3軟件開發(fā)進度計劃
13.3.1Gantt圖
13.3.2PERT圖
13.4軟件開發(fā)人員組織
13.4.1民主制程序員組
13.4.2主程序員組
13.4.3現(xiàn)代程序員組
13.5軟件開發(fā)風險管理
13.5.1軟件開發(fā)風險
13.5.2軟件開發(fā)風險管理
13.6軟件質(zhì)量保證
13.6.1軟件質(zhì)量的基本概念
13.6.2軟件質(zhì)量保證的措施
13.7軟件配置管理
13.7.1軟件配置管理術(shù)語
13.7.2軟件配置管理過程
13.7.3軟件配置管理的角色劃分
13.8軟件工程標準與軟件文檔
13.8.1軟件工程標準
13.8.2軟件文檔
13.9軟件過程能力成熟度模型
13.10軟件項目管理
13.10.1軟件項目管理概述
13.10.2軟件項目管理與軟件工程的關(guān)系
13.11實驗: 使用Project管理小型網(wǎng)上書店系統(tǒng)的開發(fā)過程
13.12案例: 小型網(wǎng)上書店系統(tǒng)的部署文檔和用戶手冊
習(xí)題
附錄A課程設(shè)計指導(dǎo)
附錄B軟件工程工具及其應(yīng)用的視頻和文檔
附錄C綜合案例
參考文獻