本教材全面介紹了軟件工程的基本概念、原理和典型的方法學(xué),全書共分為11章,第1章介紹軟件工程的概況;第2章至第9章順序講述軟件生命周期各階段的任務(wù)、過程、方法和工具,包括可行性分析、需求分析、概要設(shè)計、詳細設(shè)計、編程實現(xiàn)、軟件測試和軟件維護;第10章介紹軟件管理;第11章介紹軟件工程的新技術(shù)。
本書可作為高等院校本科各專業(yè)軟件工程課程教材,以及計算機科學(xué)技術(shù)和軟件工程本科專業(yè)"軟件工程概論"和"軟件工程導(dǎo)論"課程教材,也可以作為從事軟件開發(fā)、管理、維護和應(yīng)用的工程技術(shù)和管理人員的參考書。
本書重點突出軟件工程的基本理論、基本概念和基礎(chǔ)知識,同時強調(diào)這些基礎(chǔ)內(nèi)容與軟件工程領(lǐng)域新的技術(shù)、工具、方法之間的內(nèi)在聯(lián)系,為軟件工程師、軟件架構(gòu)師和需求分析師等技術(shù)型人才培養(yǎng)提供支撐
前言
本教材在編寫時重點從以下三個方面考慮:第一,作為軟件工程概論教材,能夠簡明、清晰地反映軟件工程學(xué)科的基本概念、基本方法、基本技術(shù)等基本內(nèi)容。第二,反映軟件工程學(xué)科的新發(fā)展,較全面地介紹軟件過程、軟件開發(fā)方法、軟件建模、軟件體系結(jié)構(gòu)等內(nèi)容。第三,兼顧學(xué)科體系的合理性和工程的指導(dǎo)性兩個方面。以軟件工程學(xué)科體系構(gòu)架教材結(jié)構(gòu),教材結(jié)構(gòu)能夠直接反映軟件工程學(xué)科的體系框架;重點介紹軟件開發(fā)中的策劃、分析、設(shè)計、編程、測試、管理等基本工作。通過本教材的學(xué)習(xí),學(xué)生能夠掌握軟件開發(fā)的基本方法和基本技能。本書可作為高等院校本科各專業(yè)軟件工程課程教材,以及計算機科學(xué)技術(shù)和軟件工程本科專業(yè)軟件工程概論和軟件工程導(dǎo)論課程教材,也可以作為從事軟件開發(fā)、管理、維護和應(yīng)用的工程技術(shù)和管理人員的參考書。
本書在編寫和出版過程中得到許多老師和同學(xué)的支持與幫助,編者在此表示衷心感謝。由于作者水平有限,書中缺點和欠妥之處在所難免,懇請讀者來郵件指正。
劉昕,男,1980年8月出生。1998年在華中科技大學(xué)計算機學(xué)院學(xué)習(xí),獲學(xué)士學(xué)位。2003-2010在華中科技大學(xué)計算機學(xué)院學(xué)習(xí),從事計算機軟件與理論方向的研究工作,獲得工學(xué)碩士及工學(xué)博士學(xué)位。2011年-2014年在中國船舶重工集團第722研究所工作。從事項目管理相關(guān)工作,作為第一項目負責(zé)人參與項目兩項,作為主要負責(zé)人參與項目三項。參與發(fā)明專利一項。2014-至今在湖北大學(xué)計算機與信息工程學(xué)院工作,從事軟件工程方向的研究與相關(guān)專業(yè)課程的講授。
目錄
第1章軟件工程概述(1)
1.1軟件工程的概念(1)
1.1.1軟件的定義與特點(1)
1.1.2軟件的發(fā)展(2)
1.1.3軟件的分類(2)
1.1.4軟件危機(4)
1.1.5軟件工程(5)
1.2軟件生存周期模型及軟件開發(fā)方法和工具(8)
1.2.1軟件生存周期模型(8)
1.2.2軟件開發(fā)方法(10)
1.2.3軟件開發(fā)工具(12)
1.3軟件工程過程(13)
1.3.1概述(13)
1.3.2軟件工程過程(14)
1.3.3統(tǒng)一軟件開發(fā)過程(16)
習(xí)題1(18)
第2章軟件可行性分析(19)
2.1可行性分析的意義(19)
2.2可行性分析的內(nèi)容(19)
2.2.1經(jīng)濟可行性(19)
2.2.2技術(shù)可行性(20)
2.2.3社會可行性(20)
2.3可行性分析方法(21)
2.3.1系統(tǒng)流程圖(21)
2.3.2成本效益分析(22)
2.4項目開發(fā)計劃(23)
2.4.1概述(23)
2.4.2軟件開發(fā)計劃的內(nèi)容(23)
2.5可行性分析報告(24)
習(xí)題2(26)
第3章軟件需求分析(27)
3.1軟件需求分析的任務(wù)(27)
3.1.1軟件需求分析的概念(27)
3.1.2需求分析的基本任務(wù)(27)
3.2需求分析過程(28)
3.2.3需求規(guī)格說明書(30)
3.2.4需求評審(30)
3.3需求分析模型(30)
3.3.1實體關(guān)系圖(31)
3.3.2數(shù)據(jù)流圖(33)
3.5數(shù)據(jù)字典(37)
3.5.1詞條描述(37)
3.5.2數(shù)據(jù)字典中的符號(40)
3.6需求規(guī)格說明書(41)
習(xí)題3(42)
第4章軟件概要設(shè)計(44)
4.1軟件設(shè)計過程(44)
4.2概要設(shè)計的目標與任務(wù)(46)
4.2.1概要設(shè)計的目標(46)
4.2.2概要設(shè)計的任務(wù)(46)
4.3概要設(shè)計原則(46)
4.3.1模塊化(46)
4.3.2抽象(48)
4.3.3自頂向下,逐步細化(48)
4.3.4信息隱蔽(49)
4.3.5模塊獨立性(49)
4.4體系結(jié)構(gòu)設(shè)計工具(53)
4.4.1結(jié)構(gòu)圖(53)
4.4.2HIPO圖(54)
4.5面向數(shù)據(jù)流的設(shè)計方法(55)
4.5.1數(shù)據(jù)流的類型(55)
4.5.2設(shè)計過程(56)
4.5.3變換分析設(shè)計(57)
4.5.4事務(wù)分析設(shè)計(57)
4.5.5實例分析(58)
4.6表示軟件結(jié)構(gòu)的另一種圖形工具——HIPO圖(59)
4.6.1HIPO圖的H圖(59)
4.6.2IPO圖(60)
4.7概要設(shè)計說明書(60)
習(xí)題4(62)
第5章軟件詳細設(shè)計(64)
5.1詳細設(shè)計的任務(wù)與原則(64)
5.1.1詳細設(shè)計的任務(wù)(64)
5.1.2詳細設(shè)計的基本原則(65)
5.2結(jié)構(gòu)化程序設(shè)計(65)
5.2.1結(jié)構(gòu)化程序設(shè)計的概念(65)
5.2.2結(jié)構(gòu)化程序設(shè)計的原則(65)
5.2.3程序設(shè)計的優(yōu)點(66)
5.3過程設(shè)計工具(66)
5.3.1程序流程圖(67)
5.3.2盒圖(NS圖)(69)
5.3.3PAD(69)
5.3.4判定表(70)
5.3.5判定樹(72)
5.3.6PDL語言(72)
5.3.7小結(jié)(73)
5.4面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計方法(74)
5.4.1概述(74)
5.4.2Jackson結(jié)構(gòu)圖(74)
5.4.3Jackson方法設(shè)計步驟(75)
5.5詳細設(shè)計說明書(78)
習(xí)題5(80)
第6章軟件編程(81)
6.1程序設(shè)計語言(81)
6.1.1程序設(shè)計語言分類(81)
6.1.2程序設(shè)計語言的特點(83)
6.1.3程序設(shè)計語言的選擇(85)
6.2編程風(fēng)格(87)
6.2.1源程序文檔化(87)
6.2.2數(shù)據(jù)說明(88)
6.2.3語句構(gòu)造(88)
6.2.4輸入和輸出(88)
6.3程序效率(89)
6.3.1程序效率的準則(89)
6.3.2算法對效率的影響(89)
6.3.3存儲效率(89)
6.3.4輸入/輸出效率(90)
6.4冗余編程及容錯技術(shù)(90)
6.4.1冗余編程(90)
6.4.2軟件容錯技術(shù)(91)
6.5程序復(fù)雜性的度量(93)
6.5.1代碼行度量法(94)
6.5.2McCabe度量法(94)
習(xí)題6(95)
第7章面向?qū)ο蟮姆椒?96)
7.1面向?qū)ο蠓椒?96)
7.1.1面向?qū)ο蠓椒ǜ攀?96)
7.1.2面向?qū)ο蟮母拍?97)
7.1.3面向?qū)ο蟮拈_發(fā)方法(100)
7.2面向?qū)ο蟮哪P?101)
7.2.1對象模型(101)
7.2.2動態(tài)模型(104)
7.2.3功能模型(106)
7.3面向?qū)ο蟮姆治?107)
7.3.1面向?qū)ο蟮姆治?108)
7.3.2建立對象模型(108)
7.3.3建立動態(tài)模型(112)
7.3.4建立功能模型(114)
7.3.5確定操作(116)
7.4面向?qū)ο笤O(shè)計(116)
7.4.1面向?qū)ο笤O(shè)計的準則(116)
7.4.2面向?qū)ο笤O(shè)計的啟發(fā)規(guī)則(117)
7.4.3系統(tǒng)設(shè)計(118)
7.4.4對象設(shè)計(118)
7.5面向?qū)ο蟮膶崿F(xiàn)(119)
7.5.1程序設(shè)計語言(119)
7.5.2類的實現(xiàn)(119)
7.5.3應(yīng)用系統(tǒng)的實現(xiàn)(119)
7.5.4面向?qū)ο鬁y試(120)
習(xí)題7(120)
第8章軟件測試(121)
8.1概述(121)
8.1.1測試的概念(121)
8.1.2測試的過程(122)
8.1.3測試的原則(123)
8.2靜態(tài)測試(123)
8.2.1靜態(tài)測試的概念(123)
8.2.2靜態(tài)測試方法(124)
8.3動態(tài)測試(124)
8.3.1白盒測試與黑盒測試的區(qū)別與聯(lián)系(124)
8.3.2白盒測試(125)
8.3.3黑盒測試(127)
8.4單元測試(129)
8.4.1單元測試概述(129)
8.4.2單元測試的策略(130)
8.4.3面向?qū)ο蟮膯卧獪y試(131)
8.5集成測試(132)
8.5.1集成測試概述(132)
8.5.2集成測試的策略(132)
8.5.3面向?qū)ο蟮募蓽y試(133)
8.6系統(tǒng)測試(134)
8.7驗收測試(134)
習(xí)題8(135)
第9章軟件維護(136)
9.1概述(136)
9.1.1維護的定義(136)
9.1.2維護的目的(136)
9.1.3維護的種類(137)
9.2軟件維護的難點和軟件的可維護性(137)
9.2.1軟件維護的難點(137)
9.2.2軟件的可維護性(138)
9.3軟件維護的工作(139)
9.3.1收取故障信息(139)
9.3.2排查方法(139)
9.3.3修改程序(139)
9.3.4維護管理(140)
習(xí)題9(140)
第10章軟件管理(141)
10.1軟件質(zhì)量管理(141)
10.1.1軟件質(zhì)量管理概述(141)
10.1.2軟件質(zhì)量評價(143)
10.2軟件文檔管理(145)
10.2.1軟件文檔的分類(145)
10.2.2軟件文檔的編寫(147)
10.3軟件項目管理(148)
10.3.1軟件項目管理概述(148)
10.3.2軟件開發(fā)成本估計(149)
10.3.3軟件開發(fā)進度安排(150)
習(xí)題10(152)
第11章軟件工程新技術(shù)(154)
11.1形式化方法(154)
11.1.1形式化方法的引入(154)
11.1.2形式化規(guī)格說明語言(155)
11.1.3形式化方法的十條戒律(156)
11.2凈室軟件工程(156)
11.2.1CRSE方法的引入(157)
11.2.2CRSE過程模型(157)
11.2.3CRSE的特點(158)
11.3基于構(gòu)件的軟件工程(159)
11.3.1基本概念(159)
11.3.2基于構(gòu)件的軟件工程(159)
11.3.3構(gòu)件庫的建立與使用(160)
11.4軟件復(fù)用與再工程(161)
11.4.1基本概念(161)
11.4.2業(yè)務(wù)過程再工程(162)
11.4.3軟件再工程(163)
11.5敏捷軟件過程(164)
11.5.1基本概念(164)
11.5.2敏捷軟件開發(fā)方法的指導(dǎo)原則(165)
11.5.3典型的敏捷過程模型(166)
習(xí)題11(167)
參考文獻(168)