《軟件工程》全面系統(tǒng)地講述了軟件工程的概念、原理和典型的方法,以及軟件項(xiàng)目的管理技術(shù)和軟件工程的新方法。主要內(nèi)容包括軟件生命周期各階段的任務(wù)、過程、結(jié)構(gòu)化方法和面向?qū)ο蠓椒ǎ浖?xiàng)目管理相關(guān)技術(shù)及工具,軟件工程應(yīng)用中的新技術(shù)等。著重介紹面向數(shù)據(jù)流的系統(tǒng)分析和設(shè)計(jì),面向?qū)ο蟮姆治龊驮O(shè)計(jì),面向?qū)ο蠡A(chǔ)和UML。
《軟件工程》在介紹面向數(shù)據(jù)流和面向?qū)ο蟮脑O(shè)計(jì)時(shí),緊密圍繞實(shí)例進(jìn)行闡述,對(duì)讀者深入理解軟件工程學(xué)很有幫助,可以作為學(xué)生綜合實(shí)驗(yàn)前的練習(xí)。《軟件工程》可作為高等院校軟件工程課程的教材或教學(xué)參考書,也可作為軟件開發(fā)人員和軟件項(xiàng)目管理人員的參考書。
前言
第1章軟件工程概述
1.1軟件概述
1.1.1軟件的定義
1.1.2軟件的特點(diǎn)
1.1.3軟件的分類
1.1.4軟件的發(fā)展
1.2軟件危機(jī)
1.2.1什么是軟件危機(jī)
1.2.2產(chǎn)生的原因及解決途徑
1.3軟件工程
1.3.1軟件工程定義
1.3.2軟件工程的研究內(nèi)容
1.3.3軟件工程的目標(biāo)和原則
1.3.4軟件工程基本原理
1.4軟件開發(fā)方法
1.4.1結(jié)構(gòu)化方法
1.4.2面向數(shù)據(jù)結(jié)構(gòu)的開發(fā)方法
1.4.3 面向?qū)ο蟮姆椒?nbsp;
1.5 CASE工具
小結(jié)
習(xí)題
第2章 軟件生命周期和過程模型
2.1軟件生命周期
2.1.1 軟件定義
2.1.2軟件開發(fā)
2.1.3軟件運(yùn)行與維護(hù)
2.2軟件過程模型
2.2.1瀑布模型
2.2.2原型模型
2.2.3螺旋模型
2.2.4噴泉模型
2.2.5增量模型
2.2.6構(gòu)件組裝模型
2.2.7 RUP
小結(jié)
習(xí)題
第3章可行性研究
3.1問題定義
3.2可行性研究
3.2.1 可行性研究的任務(wù)
3.2.2 可行性研究的步驟
3.3成本估計(jì)與效益分析
3.3.1 成本估算方法
3.3.2效益估算
3.4系統(tǒng)流程圖
3.4.1 系統(tǒng)流程圖的符號(hào)
3.4.2 系統(tǒng)流程圖舉例
3.5制訂軟件計(jì)劃
3.5.1確定軟件計(jì)劃
3.5.2復(fù)審軟件計(jì)劃
小結(jié)
習(xí)題
第4章需求工程
4.1需求的概念與內(nèi)容
4.1.1 需求的問題
4.1.2需求的定義和分類
4.1.3 需求的層次
4.2需求工程
4.2.1 需求工程的定義
4.2.2需求工程的方法
4.3需求開發(fā)
4.3.1 需求獲取技術(shù)
4.3.2需求建模
4.3.3 需求規(guī)格說明
4.3.4需求評(píng)審
4.4需求管理
4.4.1 需求變更控制
4.4.2需求版本控制
4.4.3需求跟蹤
4.4.4需求狀態(tài)跟蹤
4.5需求管理工具
小結(jié)
習(xí)題
第5章結(jié)構(gòu)化分析方法
5.1結(jié)構(gòu)化分析方法概述
5.1.1基本思想
5.1.2 分析過程
5.1.3 描述工具
5.2數(shù)據(jù)流圖
5.2.1 數(shù)據(jù)流圖的結(jié)構(gòu)
5.2.2 數(shù)據(jù)流與加工之間的關(guān)系
5.2.3 數(shù)據(jù)流圖的分層
5.2.4數(shù)據(jù)流圖的繪制
5.2.5 繪制數(shù)據(jù)流圖的注意事項(xiàng)
5.3數(shù)據(jù)字典
5.3.1 數(shù)據(jù)字典的作用和內(nèi)容
5.3.2 數(shù)據(jù)字典編寫的基本要求
5.3.3 數(shù)據(jù)字典的定義符號(hào)和編寫格式
5.4加工邏輯說明
5.4.1結(jié)構(gòu)化英語
5.4.2 判定表
5.4.3判定樹
5.4.4三種表達(dá)工具的比較
5.5 實(shí)例:供銷管理系統(tǒng)的需求分析
5.5.1需求調(diào)研
5.5.2需求建模
小結(jié)
習(xí)題
第6章面向?qū)ο蠡A(chǔ)
6.1 傳統(tǒng)開發(fā)方法與面向?qū)ο蟮拈_發(fā)方法比較
6.1.1 結(jié)構(gòu)化軟件工程方法的缺點(diǎn)
6.1.2 面向?qū)ο蠓椒ǖ膬?yōu)點(diǎn)
6.2面向?qū)ο蟮幕靖拍?nbsp;
6.3 面向?qū)ο蟮能浖_發(fā)過程
6.4幾種典型的面向?qū)ο蠓椒ê?jiǎn)介
6.4.1 Booch的面向?qū)ο蠓椒?nbsp;
6.4.2 Jacobson的面向?qū)ο蠓椒?nbsp;
6.4.3 Coad—Yourdon的面向?qū)ο蠓椒?nbsp;
6.4.4 James Rumbaugh的面向?qū)ο蠓椒?nbsp;
6.5統(tǒng)一建模語言UML
6.5.1 UML概述
6.5.2 UML的概念模型
6.5.3 UML的擴(kuò)展機(jī)制
6.6案例:基于UML的客戶服務(wù)記賬系統(tǒng)需求分析
6.6.1 問題描述
6.6.2尋找參與者
6.6.3 尋找用例
6.6.4 確定參與者和用例之間的關(guān)系,繪制用例圖
6.6.5 編寫用例描述
小結(jié)
習(xí)題
第7章面向?qū)ο蠓治?nbsp;
7.1 面向?qū)ο蠓治鲞^程
7.1.1 分析類的概念
7.1.2分析過程
7.2識(shí)別分析類
7.2.1 識(shí)別實(shí)體類
7.2.2識(shí)別邊界類
7.2.3識(shí)別控制類
7.2.4交互原則
7.3描述行為
7.3.1 消息與責(zé)任
7.3.2登錄用例的順序圖
7.3.3 其他用例的順序圖
7.4描述類
7.5評(píng)審分析模型
小結(jié)
習(xí)題
第8章軟件設(shè)計(jì)基礎(chǔ)
8.1軟件設(shè)計(jì)的目標(biāo)和任務(wù)
8.1.1 軟件設(shè)計(jì)的目標(biāo)
8.1.2軟件設(shè)計(jì)的任務(wù)
8.2軟件設(shè)計(jì)的概念與原則
8.2.1 模塊化與模塊獨(dú)立性
8.2.2抽象與逐步求精
8.2.3信息隱藏
8.3軟件體系結(jié)構(gòu)風(fēng)格
8.3.1 管道—過濾器
8.3.2 倉庫體系結(jié)構(gòu)
8.3.3 分層體系結(jié)構(gòu)
8.3.4 MVC體系結(jié)構(gòu)
8.3.5 三層C/S體系結(jié)構(gòu)
8.3.6 C/S與B/S混合軟件體系結(jié)構(gòu)
8.4設(shè)計(jì)復(fù)審
小結(jié)
習(xí)題
第9章結(jié)構(gòu)化設(shè)計(jì)方法
9.1概要設(shè)計(jì)
9.1.1基本概念
9.1.2變換分析
9.1.3事務(wù)分析
9.1.4變換一事務(wù)混合型分析
9.1.5啟發(fā)式規(guī)則
9.1.6設(shè)計(jì)優(yōu)化
9.2詳細(xì)設(shè)計(jì)
9.2.1 程序流程圖
9.2.2盒圖
9.2.3 PAD圖
9.2.4 PDL
9.2.5 HIPO圖
9.3 案例:供銷管理系統(tǒng)的設(shè)計(jì)
9.3.1模塊結(jié)構(gòu)設(shè)計(jì)
9.3.2 系統(tǒng)IPO圖
9.3.3 其他設(shè)計(jì)工作
小結(jié)
習(xí)題
第10章 面向?qū)ο蟮脑O(shè)計(jì)
10.1 OOD概述
10.2面向?qū)ο笤O(shè)計(jì)原則
10.2.1 單一職責(zé)原則
10.2.2開放一封閉原則
10.2.3 Liskov替換原則
10.2.4接口隔離原則
10.2.5依賴倒置原則
10.3系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)
10.3.1 軟件系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)
10.3.2 硬件系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)
10.4系統(tǒng)設(shè)計(jì)
10.4.1識(shí)別設(shè)計(jì)元素
10.4.2數(shù)據(jù)存儲(chǔ)策略
10.5詳細(xì)設(shè)計(jì)
10.5.1 方法和屬性建模
10.5.2狀態(tài)建模
10.5.3 詳細(xì)類圖
10.6評(píng)審設(shè)計(jì)模型
10.7設(shè)計(jì)優(yōu)化
10.7.1 確定優(yōu)先級(jí)
10.7.2 提高效率的幾項(xiàng)技術(shù)
10.7.3 調(diào)整繼承關(guān)系
10.8設(shè)計(jì)模式
10.8.1 設(shè)計(jì)模式的作用和研究意義
10.8.2經(jīng)典設(shè)計(jì)模式
10.8.3 設(shè)計(jì)模式的使用策略
小結(jié)
習(xí)題
第11章用戶界面設(shè)計(jì)
11.1用戶界面基礎(chǔ)
11.1.1 交互模型和框架
11.1.2人類工程學(xué)
11.1.3用戶界面風(fēng)格
11.2用戶界面設(shè)計(jì)原則
11.2.1 置用戶于控制之下
11.2.2減輕用戶的記憶負(fù)擔(dān)
11.2.3保持界面一致
11.3用戶界面設(shè)計(jì)過程
11.3.1 界面分析和建模
11.3.2界面設(shè)計(jì)
11.3.3 界面實(shí)現(xiàn)和評(píng)估
小結(jié)
習(xí)題
第12章軟件實(shí)現(xiàn)
12.1軟件實(shí)現(xiàn)的目標(biāo)和任務(wù)
12.2程序設(shè)計(jì)語言
12.2.1 程序設(shè)計(jì)語言的分類
12.2.2程序設(shè)計(jì)語言的選擇
12.3軟件編碼規(guī)范
12.3.1 頭文件規(guī)范
12.3.2 注釋規(guī)范
12.3 3 命名規(guī)范
12.3.4排版規(guī)范
12.3.5 目錄結(jié)構(gòu)規(guī)范
12.4程序效率
12.4.1 運(yùn)行速度的提高
12.4.2 存儲(chǔ)空間的優(yōu)化
12.4.3 輸入/輸出效率的提高
12.5軟件代碼審查
小結(jié)
習(xí)越
第13章軟件測(cè)試
13.1軟件測(cè)試基礎(chǔ)
13.1.1 失敗的軟件案例
13.1.2軟件缺陷概念
13.1.3 軟件測(cè)試概念
13.2軟件測(cè)試技術(shù)
13.2.1 靜態(tài)黑盒測(cè)試
13.2.2動(dòng)態(tài)黑盒測(cè)試
13.2.3 靜態(tài)白盒測(cè)試
13.2.4動(dòng)態(tài)白盒測(cè)試
13.3軟件測(cè)試策略
13.3.1 單元測(cè)試
13.3.2集成測(cè)試
13.3.3 確認(rèn)測(cè)試
13.3.4 系統(tǒng)測(cè)試
13.4面向?qū)ο蟮能浖䴗y(cè)試
13.4.1 面向?qū)ο鬁y(cè)試類型
13.4.2面向?qū)ο鬁y(cè)試策略
13.4.3 面向?qū)ο鬁y(cè)試用例設(shè)計(jì)
13.5軟件調(diào)試
13.5.1 調(diào)試過程
13.5.2調(diào)試方法
13.5.3 調(diào)試原則
13.6軟件測(cè)試自動(dòng)化
13.7軟件測(cè)試管理
小結(jié)
習(xí)題
第14章軟件維護(hù)
14.1軟件維護(hù)概述
14.1.1 軟件維護(hù)的產(chǎn)生及其目的
14.1.2 軟件維護(hù)的分類
14.1.3 維護(hù)的成本
14.2軟件維護(hù)的特征
14.2.1 結(jié)構(gòu)化維護(hù)和非結(jié)構(gòu)化維護(hù)
14.2.2 維護(hù)可能存在的問題
14.2.3影響軟件維護(hù)工作量的因素
14.3軟件維護(hù)實(shí)施
14.3.1 軟件維護(hù)組織
14.3.2軟件維護(hù)申請(qǐng)
14.3.3 維護(hù)過程
14.3.4維護(hù)檔案記錄
14.3.5 維護(hù)評(píng)價(jià)
14.4軟件可維護(hù)性
14.4.1 影響軟件可維護(hù)性的因素
14.4.2 軟件可維護(hù)性的度量
14.4.3 提高可維護(hù)性的策略
14.5軟件維護(hù)的副作用
14.6逆向工程和再工程
14.6.1 逆向工程
14.6.2 軟件再工程
小結(jié)
習(xí)題
第15章軟件項(xiàng)目管理
15.1軟件項(xiàng)目管理概述
15.1.1軟件項(xiàng)目的特點(diǎn)
15.1.2軟件項(xiàng)目管理的特點(diǎn)和職能
15.2人員的組織與管理
15.2.1 軟件項(xiàng)目組織
15.2.2人員的配置和管理
15.3成本的估計(jì)與控制
15.3.1 軟件開發(fā)成本估計(jì)方法
15.3.2 專家判斷法
15.3.3 成本估算模型
15.4進(jìn)度計(jì)劃
15.4.1 甘特圖法
15.4.2 工程網(wǎng)絡(luò)
15.4.3 項(xiàng)目活動(dòng)工期估算的方法
15.4.4關(guān)鍵路徑法(CPM)
15.5軟件配置管理
15.5.1 軟件配置
15.5.2 軟件配置管理過程
15.6風(fēng)險(xiǎn)分析與管理
15.6.1 軟件風(fēng)險(xiǎn)
15.6.2風(fēng)險(xiǎn)識(shí)別
15.6.3 風(fēng)險(xiǎn)預(yù)測(cè)
15.6.4風(fēng)險(xiǎn)規(guī)劃
15.7 項(xiàng)目管理工具
15.7.1 SourceSafe
15.7.2 CVS
15.7.3 ClearCase
15.7.4軟件工程中的CASE工具
15.7.5 Microsoft Project 2010系列產(chǎn)品
小結(jié)
習(xí)題
第16章軟件工程新技術(shù)
16.1 XP技術(shù)
16.1.1 XP基本原則
16.1.2 XP軟件開發(fā)中的基本活動(dòng)
16.1.3 XP的十二條慣例和規(guī)則
16.2凈室軟件工程方法
16.2.1 凈室軟件工程目標(biāo)
16.2.2 凈室理論基礎(chǔ)
16.2.3 凈室技術(shù)
16.2.4凈室技術(shù)的發(fā)展
16.3 AOP編程
16.3.1 AOP的基本定義
16.3.2 開發(fā)步驟
16.3.3 AOP的關(guān)鍵技術(shù)
16.3.4 實(shí)現(xiàn)方法
16.3.5 AOP的技術(shù)優(yōu)勢(shì)
16.4軟件復(fù)用技術(shù)
16.4.1 軟件復(fù)用的分類
16.4.2軟件復(fù)用技術(shù)
16.4.3 軟件復(fù)用的過程
16.4.4軟件復(fù)用的發(fā)展
小結(jié)
習(xí)題
參考文獻(xiàn)
4.建立快速原型
快速建立軟件原型是最準(zhǔn)確最有效、最強(qiáng)大的需求分析技術(shù)。快速原型就是快速建立起來的旨在演示目標(biāo)系統(tǒng)主要功能的可運(yùn)行的程序。一個(gè)軟件原型通常僅僅是真實(shí)系統(tǒng)的一部分或一個(gè)模型,是對(duì)新產(chǎn)品的部分實(shí)現(xiàn)。這種方法要求盡可能快地建造一個(gè)粗糙的系統(tǒng),這系統(tǒng)只需實(shí)現(xiàn)目標(biāo)系統(tǒng)的某些功能,并且該系統(tǒng)可能在可靠性、界面的友好性或其他方面上存在缺陷。但是,借助于這個(gè)原型可以加快對(duì)需求的挖掘和雙方對(duì)需求的理解,以便快速獲取用戶需求。
在使用原型化方法時(shí)有兩種不同的策略:廢棄策略和追加策略。例如,為了獲得具體的用戶需求,可以用某些軟件工具快速的建造一個(gè)原型系統(tǒng),這個(gè)系統(tǒng)只是一個(gè)界面,然后聽取用戶的意見,改進(jìn)這個(gè)原型。以后的目標(biāo)系統(tǒng)可以在原型系統(tǒng)的基礎(chǔ)上演化而成,為后續(xù)開發(fā)工作節(jié)省工作量和成本。
叢原型的用途可以看出,原型只要能夠體現(xiàn)它的作用、滿足評(píng)價(jià)的要求,它可以忽略一切暫時(shí)不關(guān)心的部分。正是由于這樣忽略,追加策略原型進(jìn)化為最終系統(tǒng)時(shí)需要十分小心,否則會(huì)對(duì)后期的開發(fā)造成很大問題。
5.基于用例的方法
隨著面向?qū)ο蠹夹g(shù)的發(fā)展,基于用例的方法在需求獲取和建模方面應(yīng)用得越來越廣泛。這種方法以用戶和任務(wù)為中心,不但能夠更加清楚地描述新系統(tǒng)允許用戶做什么,而且能夠幫助開發(fā)人員理解用戶的業(yè)務(wù)和應(yīng)用領(lǐng)域,并且可以運(yùn)用面向?qū)ο蟮姆治龊驮O(shè)計(jì)方法將用例轉(zhuǎn)化為對(duì)象模型。
在用例模型中,只關(guān)心系統(tǒng)所應(yīng)實(shí)現(xiàn)的功能,而不關(guān)心內(nèi)部的具體實(shí)現(xiàn)細(xì)節(jié)。一般情況下,用例模型的建立需要開發(fā)方和用戶方的共同參與和反復(fù)討論。基于用例的方法需求完成以下幾個(gè)任務(wù)。
1)確定參與者
參與者指與系統(tǒng)交互的人或事。確定系統(tǒng)的參與者可以通過確認(rèn)系統(tǒng)功能的使用者和維護(hù)者,確認(rèn)系統(tǒng)與其他軟件或系統(tǒng)的接口,確定系統(tǒng)與硬件設(shè)備的接口等方法來實(shí)現(xiàn)。
2)確定用例
用例描述系統(tǒng)完成的動(dòng)作序列,產(chǎn)生對(duì)參與者有價(jià)值的結(jié)果。一個(gè)系統(tǒng)包含若干個(gè)用例,每個(gè)用例具體說明應(yīng)完成的功能。識(shí)別用例首先要決定系統(tǒng)所能反映的外部事件,并把這些事件與參與的執(zhí)行者和特定的使用實(shí)例聯(lián)系起來,最終繪制出用例圖。
3)描述用例
單純地使用用例圖不能提供用例所具有的全部信息,因此,對(duì)于那些不能反映到圖形上的信息需求用文字加以描述。用例描述實(shí)際上是關(guān)于參與者與系統(tǒng)如何交互的規(guī)格說明,要求清晰明確,沒有二義性。
由此可見,需求獲取要求系統(tǒng)分析人員能夠從復(fù)雜的原始材料中整理并抽取出能夠反映用戶真實(shí)需要的用戶需求信息。系統(tǒng)分析人員根據(jù)目標(biāo)系統(tǒng)的實(shí)際特點(diǎn),獨(dú)立或者組合使用以上方法,通過與用戶的多次溝通最終實(shí)現(xiàn)需求獲取階段的任務(wù)。