本書按照典型的軟件開發(fā)過程來組織內(nèi)容,旨在培養(yǎng)讀者的軟件工程思想及實際軟件開發(fā)的能力。全書共分6部分,分別是軟件工程概述、可行性研究與項目開發(fā)計劃、結構化分析與設計、面向對象分析與設計、軟件實現(xiàn)與測試、軟件維護與軟件工程管理。本書共分為13章,內(nèi)容涉及軟件與軟件工程、軟件過程、敏捷軟件開發(fā)、可行性研究與項目開發(fā)計劃、結構化分析、結構化設計、面向對象方法與UML、面向對象分析、軟件體系結構與設計模式、面向對象設計、軟件實現(xiàn)、軟件測試、軟件維護與軟件工程管理。本書理論與實踐相結合,內(nèi)容翔實,可操作性強。 本書是高等院校計算機科學與技術、軟件工程及相關專業(yè)軟件工程課程的推薦教材。
本書按照典型的軟件開發(fā)過程來組織內(nèi)容,以小型網(wǎng)上書店系統(tǒng)為綜合案例貫穿全書,幫助讀者更好地理解知識體系并提高動手實踐能力,旨在培養(yǎng)讀者具備軟件工程思想及實際軟件開發(fā)的能力。
配套豐富的教學資源,附錄中的汽車服務管理系統(tǒng)和軟件學院學習生活交流論壇兩個綜合案例供讀者課外練習和拓展。
軟件工程是應用計算機科學技術、數(shù)學、管理學的原理,運用工程科學的理論、方法和技術,研究和指導軟件開發(fā)和演化的一門交叉學科。隨著科技的發(fā)展,軟件工程已成為計算機科學、軟件工程及其相關專業(yè)的一門重要的必修課。其教學目的在于使學生掌握軟件工程的基本概念和原則,培養(yǎng)學生使用工程化的方法高效地開發(fā)高質量軟件的能力,以及進行項目管理的能力。
本書分6部分:軟件工程概述、可行性研究與項目開發(fā)計劃、結構化分析與設計、面向對象分析與設計、軟件實現(xiàn)與測試、軟件維護與軟件工程管理。
本書共13章,內(nèi)容涉及軟件與軟件工程、軟件過程、敏捷軟件開發(fā)、可行性研究與項目開發(fā)計劃、結構化分析、結構化設計、面向對象方法與UML、面向對象分析、軟件體系結構與設計模式、面向對象設計、軟件實現(xiàn)、軟件測試和軟件維護與軟件工程管理。
掃碼查看
本書的內(nèi)容結構和知識體系已整理為思維導圖,讀者可掃描上方二維碼查看。
本書的理論知識的教學安排建議如表01所示。
表01教學安排
章節(jié)內(nèi)容學時數(shù)
第1章軟件與軟件工程1~2
第2章軟件過程2
第3章敏捷軟件開發(fā)2~4
第4章項目立項、可行性研究與項目開發(fā)計劃2
第5章結構化分析2~4
第6章結構化設計2~4
第7章面向對象方法與UML4~6
第8章面向對象分析4~6
第9章軟件體系結構與設計模式1~2
第10章面向對象設計4~6
第11章軟件實現(xiàn)2
第12章軟件測試4~6
第13章軟件維護與軟件工程管理2
建議先修課程: 計算機導論、面向對象程序設計、數(shù)據(jù)結構和數(shù)據(jù)庫原理等。
建議理論教學時數(shù): 32~48學時。
建議實驗(實踐)教學時數(shù): 16~32學時。
教師可以按照自己對軟件工程的理解適當?shù)貏h除一些章節(jié),也可以根據(jù)教學目標,靈活地調(diào)整章節(jié)的順序,增減各章的學時數(shù)。
本書的作者為呂云翔、曾洪立。感謝蔣博文團隊、石遠翔團隊、張中基等對本書的大力支持,感謝所有為此書做出貢獻的同仁們。
本書配套的視頻二維碼位置如表02所示。
表02視頻二維碼位置
序號視頻內(nèi)容標題視頻二維碼位置所在頁碼
1模塊設計啟發(fā)規(guī)則6.1.2軟件設計的原則101
2模塊分割方法6.1.2軟件設計的原則101
3結構化軟件設計的任務6.4結構化設計概述110
4用C 理解類與對象7.1.1面向對象的基本概念139
5用C 理解繼承與組合7.1.1面向對象的基本概念139
6用C 理解虛函數(shù)與多態(tài)7.1.1面向對象的基本概念139
7使用UML的準則7.2.2UML的特點143
8在統(tǒng)一軟件開發(fā)過程中使用UML7.2.3UML的應用范圍144
9用例的特征7.3.1用例圖146
10繪制機票預訂系統(tǒng)的用例圖7.3.1用例圖146
11繪制機票預訂系統(tǒng)的類圖7.3.2類圖與對象圖148
12繪制機票預訂系統(tǒng)的順序圖7.4.1順序圖153
13繪制機票預訂系統(tǒng)的協(xié)作圖7.4.2協(xié)作圖155
14繪制機票預訂系統(tǒng)的狀態(tài)圖7.4.3狀態(tài)圖156
15繪制機票預訂系統(tǒng)的活動圖7.4.4活動圖157
16繪制機票預訂系統(tǒng)的構件圖7.5.1構件圖159
17繪制機票預訂系統(tǒng)的部署圖7.5.2部署圖159
18面向對象實現(xiàn)之提高可重用性11.3面向對象實現(xiàn)253
19面向對象實現(xiàn)之提高可擴充性11.3面向對象實現(xiàn)253
20面向對象實現(xiàn)之提高健壯性11.3面向對象實現(xiàn)253
21手工測試與自動化測試12.2軟件測試的分類273
22黑盒測試的優(yōu)缺點12.5.7黑盒測試方法的選擇285
23白盒測試的優(yōu)缺點12.6.6白盒測試方法的選擇291
24導致維護困難的一些因素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構建Postman Newman Jenkins接口測試框架(有文檔)附錄B363
47使用unittest框架對線性查找函數(shù)進行單元測試(有文檔)附錄B363
48使用Pytest框架對冒泡排序函數(shù)進行單元測試(有文檔)附錄B363
49使用Postman對getWeather接口進行關聯(lián)測試(有文檔)附錄B363
50使用Python Selenium unittest完成對登錄頁面的自動化測試(有文檔)附錄B363
51使用Jmeter錄制一個網(wǎng)頁的操作腳本(有文檔)附錄B363
52SoapUI接口測試工具的使用(有文檔)附錄B363
由于軟件工程還在發(fā)展之中,軟件工程的教學方法本身還在探索之中,加之編者水平和能力有限,本書難免有疏漏之處。懇請各位同仁和廣大讀者給予批評指正,也希望各位能將實踐過程中積累的經(jīng)驗和心得與我們交流。
編者2022年4月
呂云翔 北京航空航天大學軟件學院副教授,博士研究生,已出版二十幾本教材,其中計算機導論實踐教程一書獲北航2010年教學成果三等獎;大學計算機英語教程獲北航2012年教學成果二等獎。
第一部分軟件工程概述
第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)案例介紹
習題
第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幾種模型之間的關系
2.3.9選擇軟件過程模型
2.4軟件過程實例
習題
第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結對編程
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ā)實例
習題
第二部分可行性研究與項目開發(fā)計劃
第4章項目立項、可行性研究與項目開發(fā)計劃
4.1項目立項概述
4.2可行性研究的任務
4.2.1技術可行性
4.2.2操作可行性
4.2.3經(jīng)濟可行性
4.3可行性研究的步驟
4.4可行性研究實例
4.5制訂項目開發(fā)計劃
4.6案例: 小型網(wǎng)上書店系統(tǒng)的軟件開發(fā)計劃書
習題
第三部分結構化分析與設計
第5章結構化分析
5.1需求分析
5.1.1需求分析的任務和原則
5.1.2需求分析的步驟
5.1.3需求管理
5.1.4需求分析的常用方法
5.1.5軟件原型
5.2結構化分析概述
5.3結構化分析方法
5.3.1功能建模
5.3.2數(shù)據(jù)建模
5.3.3行為建模
5.3.4數(shù)據(jù)字典
5.3.5加工規(guī)格說明
5.4結構化分析的圖形工具
5.4.1層次方框圖
5.4.2Warnier圖
5.4.3IPO圖
5.5結構化分析實例
習題
第6章結構化設計
6.1軟件設計的基本概念
6.1.1軟件設計的意義和目標
6.1.2軟件設計的原則
6.1.3軟件設計的分類
6.2數(shù)據(jù)庫結構設計
6.3用戶界面設計
6.3.1設計驅動開發(fā)
6.3.2目標用戶群體
6.3.3簡潔與清晰
6.3.4實現(xiàn)模型與心智模型
6.3.5設計的規(guī)范性
6.3.6設計的可用性和易用性
6.3.7設計的一致性
6.3.8設計的容錯性
6.4結構化設計概述
6.5結構化設計與結構化分析的關系
6.6體系結構設計
6.6.1表示軟件結構的圖形工具
6.6.2面向數(shù)據(jù)流的設計方法
6.6.3面向數(shù)據(jù)結構的設計方法
6.7接口設計
6.7.1接口設計概述
6.7.2界面設計
6.7.3UX設計與UI設計的區(qū)別
6.8數(shù)據(jù)設計
6.9過程設計
6.9.1程序流程圖
6.9.2NS圖
6.9.3PAD
6.9.4過程設計語言
6.10軟件設計評審
6.11結構化設計實例
習題
第四部分面向對象分析與設計
第7章面向對象方法與UML
7.1面向對象的軟件工程方法
7.1.1面向對象的基本概念
7.1.2面向對象的軟件工程方法的特征與優(yōu)勢
7.1.3面向對象的實施步驟
7.2統(tǒng)一建模語言UML
7.2.1UML簡述
7.2.2UML的特點
7.2.3UML的應用范圍
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描述物理架構的機制
7.5.1構件圖
7.5.2部署圖
7.6面向對象方法與UML實例
習題
第8章面向對象分析
8.1面向對象分析方法
8.1.1面向對象分析過程
8.1.2面向對象分析原則
8.2面向對象建模
8.2.1建立對象模型
8.2.2建立動態(tài)模型
8.2.3建立功能模型
8.2.43種模型之間的關系
8.3面向對象分析實例
8.4案例: 小型網(wǎng)上書店系統(tǒng)的需求規(guī)格說明書
習題
第9章軟件體系結構與設計模式
9.1軟件體系結構的概念
9.1.1什么是軟件體系結構
9.1.2軟件體系結構建模
9.1.3軟件體系結構的分層模型
9.1.4軟件體系結構的作用
9.2典型的軟件體系結構風格
9.2.1數(shù)據(jù)流風格
9.2.2調(diào)用/返回風格
9.2.3獨立構件風格
9.2.4虛擬機風格
9.2.5倉庫風格
9.3軟件質量屬性
9.4分布式系統(tǒng)結構
9.4.1多處理器體系結構
9.4.2客戶機/服務器體系結構
9.4.3分布式對象體系結構
9.4.4對等端體系結構
9.4.5代理
9.5體系結構框架
9.5.1模型視圖控制器
9.5.2模型視圖表示器
9.5.3J2EE體系結構框架
9.5.4PCMEF框架
9.5.5PCBMER框架
9.6軟件系統(tǒng)的設計模式
9.6.1工廠模式
9.6.2橋接模式
9.6.3策略模式
9.6.4其他模式
9.7軟件體系結構與設計模式實例
習題
第10章面向對象設計
10.1面向對象設計與結構化設計
10.2面向對象設計與面向對象分析的關系
10.3面向對象設計的過程與原則
10.3.1面向對象設計的過程
10.3.2面向對象設計的原則
10.4面向對象設計的啟發(fā)規(guī)則
10.5系統(tǒng)設計
10.5.1系統(tǒng)分解
10.5.2問題域子系統(tǒng)的設計
10.5.3人機交互子系統(tǒng)的設計
10.5.4任務管理子系統(tǒng)的設計
10.5.5數(shù)據(jù)管理子系統(tǒng)的設計
10.6對象設計
10.6.1設計類中的服務
10.6.2設計類的關聯(lián)
10.6.3對象設計優(yōu)化
10.7面向對象設計實例
10.8案例: 小型網(wǎng)上書店系統(tǒng)的軟件設計說明書
習題
第五部分軟件實現(xiàn)與測試
第11章軟件實現(xiàn)
11.1編程語言
11.1.1編程語言的發(fā)展與分類
11.1.2選擇編程語言需考慮的因素
11.2編碼風格與規(guī)范
11.3面向對象實現(xiàn)
11.4代碼重用
11.5分析和評價代碼的質量
11.6軟件實現(xiàn)實例
11.7實驗: 使用Visual Studio Code 實現(xiàn)小型網(wǎng)上書店系統(tǒng)的
用戶登錄模塊
11.8案例: 小型網(wǎng)上書店系統(tǒng)的源代碼
習題
第12章軟件測試
12.1軟件測試的基本概念
12.1.1軟件測試的原則
12.1.2軟件測試模型
12.2軟件測試的分類
12.3測試用例
12.3.1測試用例編寫
12.3.2測試用例設計
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)結構分析法
12.6.3程序插樁技術
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面向對象測試
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)的測試分析報告
習題
第六部分軟件維護與軟件工程管理
第13章軟件維護與軟件工程管理
13.1軟件維護
13.1.1軟件部署與軟件交付
13.1.2軟件維護的過程
13.1.3軟件維護的分類
13.1.4軟件的可維護性
13.1.5軟件維護的副作用
13.1.6自動化運維
13.1.7軟件再工程重構、正向工程、逆向工程
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軟件質量保證
13.6.1軟件質量的基本概念
13.6.2軟件質量保證的措施
13.7軟件配置管理
13.7.1軟件配置管理術語
13.7.2軟件配置管理過程
13.7.3軟件配置管理的角色劃分
13.8軟件工程標準與軟件文檔
13.8.1軟件工程標準
13.8.2軟件文檔
13.9軟件過程能力成熟度模型
13.10軟件項目管理
13.10.1軟件項目管理概述
13.10.2軟件項目管理與軟件工程的關系
13.11實驗: 使用Project管理小型網(wǎng)上書店系統(tǒng)的開發(fā)過程
13.12案例: 小型網(wǎng)上書店系統(tǒng)的部署文檔和用戶手冊
習題
附錄A課程設計指導
附錄B軟件工程工具及其應用的視頻和文檔
附錄C綜合案例
參考文獻