內 容 簡 介本書第3版在繼承第2版特點的基礎上做了較大修改,內容涵蓋了IEEE新發(fā)布的軟件工程知識體系指南SWEBOK V3.0版的知識域,刪除了較陳舊的內容,新增了如云計算模型、敏捷開發(fā)測試等國內外軟件工程發(fā)展的新技術。在系統(tǒng)介紹軟件工程基礎知識的基礎上,重點介紹了軟件需求和軟件設計兩個重要開發(fā)階段,并將面向對象的方法及UML統(tǒng)一建模技術貫穿于各章,對面向對象的分析、設計、測試的方法做了詳細介紹。同時還對CMM軟件成熟度模型、風險管理及團隊建設等先進的軟件管理技術進行了介紹。本書內容注重科學性、先進性,強調實踐性,理論緊密聯(lián)系實際是本書的一大特色;本書不僅提供了豐富的軟件開發(fā)實例和素材,還用一章專門討論了如何進行綜合性、設計型的軟件工程課程設計。本書可作為高等院校計算機、軟件工程及信息類專業(yè)本科生及研究生“軟件工程”課程的教材,也可作為廣大工程技術人員和科研人員的參考書。
許家珆,電子科技大學數(shù)學學院教授,主講《軟件工程》等多門課程,負責編寫了包括《軟件工程》等多本教材,主持四川省精品課程,網絡精品課程。
目 錄
第1章 軟件工程概述 (1)
1.1 軟件工程的產生和發(fā)展 (1)
1.1.1 軟件危機與軟件工程 (1)
1.1.2 軟件工程的定義及基本原則 (3)
1.1.3 軟件工程研究的內容 (3)
1.2 軟件與軟件過程 (4)
1.2.1 軟件的概念和特點 (5)
1.2.2 軟件工程過程及產品 (6)
1.3 軟件過程模型 (6)
1.3.1 瀑布模型 (6)
1.3.2 增量模型 (7)
1.3.3 螺旋模型 (7)
1.3.4 噴泉模型 (8)
1.3.5 原型模型 (8)
1.3.6 智能模型 (9)
1.4 軟件開發(fā)方法 (9)
1.4.1 結構化開發(fā)方法 (10)
1.4.2 原型化開發(fā)方法 (10)
1.4.3 面向對象的開發(fā)方法 (11)
1.4.4 敏捷軟件的開發(fā) (12)
1.5 軟件工具與集成化開發(fā)環(huán)境 (15)
1.5.1 軟件工具的發(fā)展過程 (15)
1.5.2 軟件工具 (16)
1.5.3 集成化CASE環(huán)境 (18)
小結 (19)
習題1 (19)
第2章 面向對象方法與UML建模語言 (21)
2.1 面向對象方法概述 (21)
2.1.1 面向對象方法的特點 (21)
2.1.2 幾種典型的面向對象方法 (22)
2.2 UML概述 (23)
2.2.1 UML的基本概念 (24)
2.2.2 UML的圖形表示 (25)
2.3 建立用例模型 (28)
2.3.1 需求分析與用例建模 (28)
2.3.2 確定執(zhí)行者和用例 (29)
2.3.3 用例建模實例 (31)
2.4 建立靜態(tài)模型 (33)
2.4.1 類圖 (33)
2.4.2 包圖 (41)
2.5 建立動態(tài)模型 (42)
2.5.1 消息 (42)
2.5.2 狀態(tài)圖 (43)
2.5.3 順序圖 (46)
2.5.4 合作圖 (47)
2.5.5 活動圖 (50)
2.6 建立實現(xiàn)模型 (52)
2.6.1 組件圖 (52)
2.6.2 部署圖 (53)
2.7 RUP統(tǒng)一過程及其應用 (54)
2.7.1 UML與RUP統(tǒng)一過程 (54)
2.7.2 RUP的二維開發(fā)模型 (56)
2.7.3 RUP的迭代開發(fā)模式 (58)
小結 (59)
習題二 (59)
第3章 軟件需求工程 (63)
3.1 軟件需求的基本概念 (63)
3.1.1 軟件需求的任務 (63)
3.1.2 功能需求與非功能需求 (64)
3.2 需求工程過程 (66)
3.2.1 需求工程的基本活動 (66)
3.2.2 獲取需求 (66)
3.2.3 需求分析與建模 (67)
3.2.4 需求的有效性驗證 (68)
3.2.5 需求管理 (69)
3.3 軟件需求獲取技術 (70)
3.3.1 面談法 (70)
3.3.2 問卷調查法 (70)
3.3.3 需求專題討論會 (71)
3.3.4 原型法獲取需求 (71)
3.3.5 面向用例的方法 (72)
3.4 需求分析與建模技術 (73)
3.4.1 需求分析方法 (73)
3.4.2 結構化分析(SA)方法 (74)
3.4.3 面向對象的分析(OOA)方法 (79)
3.5 軟件需求案例分析 (82)
3.5.1 案例1——用SA法建立需求模型 (82)
3.5.2 案例2——用OOA法建立需求模型 (84)
小結 (87)
習題二 (88)
第4章 軟件設計 (91)
4.1 軟件設計概述 (91)
4.1.1 軟件設計在開發(fā)階段中的重要性 (91)
4.1.2 軟件設計階段的任務 (92)
4.1.3 軟件設計的目標 (92)
4.1.4 軟件設計過程 (92)
4.2 軟件體系結構設計 (93)
4.2.1 系統(tǒng)結構性模型——集中式系統(tǒng)模型 (93)
4.2.2 系統(tǒng)結構性模型——層次結構模型 (94)
4.2.3 系統(tǒng)結構性模型——分布式系統(tǒng)模型 (95)
4.2.4 控制模型 (100)
4.2.5 模塊分解 (101)
4.3 詳細設計描述工具 (104)
4.4 面向對象的設計 (105)
4.4.1 面向對象設計的準則 (106)
4.4.2 面向對象設計的基本任務 (106)
4.5 用戶界面設計 (108)
4.5.1 用戶界面設計的特性與設計任務 (108)
4.5.2 用戶界面設計的基本原則 (109)
4.5.3 用戶界面的基本類型 (110)
4.5.4 用戶交互設計 (111)
4.6 MVC設計模式 (114)
4.7 軟件設計實例 (115)
小結 (118)
習題四 (118)
第5章 軟件構造 (121)
5.1 程序設計語言的選擇 (121)
5.1.1 程序設計語言的分類 (121)
5.1.2 高級程序設計語言的基本組成 (122)
5.1.3 程序設計語言選擇準則 (123)
5.2 程序設計方法 (123)
5.2.1 結構化程序設計 (123)
5.2.2 面向對象程序設計 (125)
5.3 程序設計風格 (127)
5.3.1 源程序文件 (128)
5.3.2 語句構造方法 (129)
5.3.3 數(shù)據(jù)說明方法 (129)
5.3.4 輸入/輸出技術 (130)
5.4 算法與程序效率 (130)
5.4.1 算法轉換過程中的指導原則 (130)
5.4.2 影響效率的因素 (131)
5.5 軟件代碼審查 (133)
5.6 軟件復用 (134)
5.6.1 軟件復用的級別 (134)
5.6.2 軟件復用過程 (135)
5.6.3 可復用構件 (135)
5.6.4 基于復用的開發(fā)過程 (136)
5.6.5 構件的組裝和復用 (137)
5.7 軟件構造實例 (137)
5.7.1 實現(xiàn)環(huán)境 (137)
5.7.2 系統(tǒng)編碼實現(xiàn) (138)
5.7.3 用戶界面 (143)
小結 (143)
習題五 (143)
第6章 軟件測試 (145)
6.1 軟件測試概述 (145)
6.1.1 軟件測試的基本概念 (145)
6.1.2 軟件測試的特點和基本原則 (147)
6.1.3 軟件測試過程 (149)
6.1.4 靜態(tài)分析與動態(tài)測試 (151)
6.2 白盒法測試 (153)
6.2.1 語句覆蓋 (153)
6.2.2 判定覆蓋 (154)
6.2.3 條件覆蓋 (155)
6.2.4 判定-條件覆蓋 (155)
6.2.5 條件組合覆蓋 (156)
6.3 黑盒法測試 (157)
6.3.1 等價分類法 (157)
6.3.2 邊界值分析法 (158)
6.3.3 錯誤推測法 (158)
6.3.4 因果圖法 (159)
6.4 軟件測試的策略 (160)
6.4.1 單元測試 (160)
6.4.2 集成測試 (162)
6.4.3 確認測試 (164)
6.4.4 系統(tǒng)測試 (165)
6.4.5 ?測試和?測試 (166)
6.4.6 綜合測試策略 (167)
6.5 軟件調試 (167)
6.5.1 軟件調試過程 (167)
6.5.2 軟件調試策略 (168)
6.6 面向對象的測試 (170)
6.6.1 面向對象測試的特點 (170)
6.6.2 面向對象測試模型 (171)
6.6.3 面向對象測試類型 (171)
6.6.4 分析模型測試 (173)
6.6.5 面向對象的測試用例 (177)
6.7 自動化測試 (177)
6.7.1 自動化測試概述 (178)
6.7.2 實施自動化測試的前提條件 (179)
6.7.3 自動化測試過程 (180)
6.7.4 自動化測試的原則 (182)
6.7.5 敏捷測試 (182)
小結 (183)
習題六 (184)
第7章 軟件維護 (186)
7.1 軟件維護的基本概念 (186)
7.1.1 軟件維護的目的 (186)
7.1.2 軟件維護的分類 (186)
7.1.3 軟件維護的特性 (187)
7.1.4 軟件維護的代價 (188)
7.2 軟件維護的過程 (189)
7.2.1 軟件維護的組織和維護過程管理 (189)
7.2.2 維護工作的流程 (190)
7.3 軟件維護技術 (191)
7.4 軟件可維護性 (192)
7.4.1 軟件可維護性的定義 (192)
7.4.2 提高可維護性的方法 (193)
7.5 軟件再工程技術 (197)
7.5.1 逆向工程 (197)
7.5.2 軟件再工程過程 (197)
7.5.3 再工程的成本及效益分析 (198)
7.5.4 再工程的風險分析 (199)
小結 (199)
習題七 (199)
第8章 軟件項目管理 (201)
8.1 軟件項目管理概述 (201)
8.1.1 軟件項目管理的特點 (201)
8.1.2 軟件項目管理的主要活動 (202)
8.2 軟件項目可行性研究 (203)
8.2.1 可行性研究的任務 (203)
8.2.2 可行性研究報告 (203)
8.3 軟件項目計劃 (204)
8.3.1 軟件項目計劃內容 (204)
8.3.2 軟件開發(fā)進度計劃 (205)
8.4 軟件項目成本估算技術 (207)
8.4.1 影響成本估算的因素 (207)
8.4.2 成本估算模型 (208)
8.4.3 成本/效益分析 (211)
8.5 軟件項目人力資源管理 (211)
8.5.1 軟件團隊建設 (212)
8.5.2 團隊人員的選擇 (213)
8.6 軟件項目風險管理 (213)
8.6.1 軟件項目風險管理概述 (213)
8.6.2 軟件項目風險管理過程 (214)
8.6.3 風險管理的理論和模型 (216)
8.7 軟件質量保證 (218)
8.8 軟件配置管理 (219)
8.8.1 軟件配置管理的基本概念 (219)
8.8.2 軟件配置管理的活動 (219)
小結 (222)
習題八 (222)
第9章 軟件能力成熟度模型 (223)
9.1 CMM概述 (223)
9.1.1 軟件過程成熟度的基本概念 (223)
9.1.2 軟件過程的成熟度等級 (224)
9.2 CMM的結構 (225)
9.2.1 關鍵過程域 (226)
9.2.2 關鍵實踐 (227)
9.2.3 共同特性 (227)
9.3 CMM的實施與評估 (227)
9.3.1 軟件過程評估的必要性 (228)
9.3.2 軟件過程評估及參考模型 (229)
9.3.3 軟件過程改進 (231)
9.3.4 CMM評估的執(zhí)行步驟 (231)
9.3.5 軟件企業(yè)如何實施CMM (234)
9.3.6 CMM與ISO 9000標準 (236)
9.4 軟件能力成熟度模型集成 (237)
9.4.1 CMMI的產生與發(fā)展 (237)
9.4.2 CMMI的模型 (237)
9.4.3 CMMI的評估 (239)
9.4.4 CMMI與CMM的比較 (240)
小結 (241)
習題九 (241)
第10章 軟件工程課程設計 (243)
10.1 課程設計的目的和要求 (243)
10.2 課程設計步驟及安排 (243)
10.3 可視化建模工具Rational Rose (245)
10.3.1 Rose工具簡介 (245)
10.3.2 繪制業(yè)務用例圖 (246)
10.3.3 繪制用例圖 (247)
10.3.4 繪制類圖 (248)
10.3.5 繪制協(xié)作圖與順序圖 (249)
10.3.6 繪制活動圖 (250)
10.3.7 繪制狀態(tài)圖 (251)
10.3.8 繪制構件圖和部署圖 (251)
10.4 案例分析 (252)
10.4.1 案例一:ATM系統(tǒng) (252)
10.4.2 案例二:網上拍賣系統(tǒng) (257)
10.4.3 案例三:會議管理系統(tǒng) (263)
10.4.4 案例四:倉庫信息管理系統(tǒng) (272)
參考文獻 (278)