軟件工程是高等院校計(jì)算機(jī)相關(guān)學(xué)科各專業(yè)的專業(yè)基礎(chǔ)課,其研究范圍非常廣泛!盾浖こ汤碚摷皯(yīng)用/普通高等教育“十二五”規(guī)劃教材》從實(shí)用的角度出發(fā),在系統(tǒng)講解軟件工程理論和方法的同時(shí),注重結(jié)合實(shí)例,分析軟件工程技術(shù)與工具的綜合應(yīng)用;在強(qiáng)調(diào)傳統(tǒng)的結(jié)構(gòu)化方法的同時(shí),著重介紹面向?qū)ο蠓椒ā?/span>
《軟件工程理論及應(yīng)用/普通高等教育“十二五”規(guī)劃教材》共分10章,包括軟件產(chǎn)品、軟件過程、項(xiàng)目管理和軟件項(xiàng)目計(jì)劃、項(xiàng)目進(jìn)度安排及跟蹤、軟件工程的需求工程、軟件設(shè)計(jì)、面向?qū)ο蟮姆治龇椒、面向(qū)ο笤O(shè)計(jì)、面向?qū)ο鬁y試和軟件維護(hù)工程。
《軟件工程理論及應(yīng)用/普通高等教育“十二五”規(guī)劃教材》將理論知識與實(shí)踐案例相結(jié)合,便于教學(xué)與應(yīng)用,文字通俗易懂,概念清晰,實(shí)例豐富,實(shí)用性強(qiáng),并配有習(xí)題!盾浖こ汤碚摷皯(yīng)用/普通高等教育“十二五”規(guī)劃教材》可作為高等院校計(jì)算機(jī)類專業(yè)軟件工程相關(guān)課程的教材,也可作為軟件開發(fā)人員的參考書。
前言
第1章 軟件產(chǎn)品
1.1 軟件的發(fā)展
1.1.1 軟件產(chǎn)業(yè)
1.1.2 軟件的競爭
1.2 軟件危機(jī)與軟件工程
1.2.1 軟件特征
1.2.2 軟件工程
1.2 -3軟件應(yīng)用
1.2.4 軟件語言
1.2.5 軟件文檔
1.3 軟件生存周期模型
1.3.1 瀑布模型
1.3.2 快速原型模型
1.3.3 螺旋模型
1.3.4 噴泉模型和其他模型
1.4 軟件工程工具及環(huán)境
本章小結(jié)
習(xí)題
第2章 軟件過程
2.1 軟件過程規(guī)范
2.2 軟件過程成熟度模型
2.2.1 初始級
2.2.2 可重復(fù)級
2.2.3 已定義級
2.2.4 已管理級
2.2.5 優(yōu)化級
2.3 軟件過程管理案例
本章小結(jié)
習(xí)題
第3章 項(xiàng)目管理和軟件項(xiàng)目計(jì)劃
3.1 對估算的觀察
3.2 項(xiàng)目計(jì)劃目標(biāo)
3.3 軟件范圍
3.4 軟件項(xiàng)目估算
3.5 項(xiàng)目管理實(shí)驗(yàn)
本章小結(jié)
習(xí)題
第4章 項(xiàng)目進(jìn)度安排及跟蹤
4.1 人員與工作量之間的關(guān)系
4.2 為軟件項(xiàng)目定義任務(wù)集合
4.2.1 嚴(yán)格度
4.2.2 定義適應(yīng)準(zhǔn)則
4.2.3 計(jì)算任務(wù)集合選擇因子的值
4.3 主要任務(wù)的求精
4.4 進(jìn)度安排
4.5 軟件項(xiàng)目計(jì)劃案例
本章小結(jié)
習(xí)題
第5章 軟件工程的需求工程
5.1 軟件工程需求分析案例
5.2 需求分析的基本內(nèi)容
5.2.1 需求分析的必要性
5.2.2 需求分析的原則
5.2.3 需求的類型
5.2.4 需求分析的方法
5.3 結(jié)構(gòu)化分析的技巧
5.3.1 創(chuàng)建實(shí)體一關(guān)系圖
5.3.2 創(chuàng)建數(shù)據(jù)流模型
5.3.3 加工規(guī)范化
5.3.4 數(shù)據(jù)字典
5.3.5 其他分析方法概述
本章小結(jié)
習(xí)題
第6章 軟件設(shè)計(jì)
6.1 設(shè)計(jì)和軟件質(zhì)量
6.2 軟件設(shè)計(jì)的演化
6.3 設(shè)計(jì)目標(biāo)與任務(wù)
6.4 設(shè)計(jì)概念
6.4.1 抽象
6.4.2 求精
6.4.3 模塊化
6.4.4 軟件體系結(jié)構(gòu)
6.4.5 控制層次
6.4.6 結(jié)構(gòu)劃分
6.4.7 數(shù)據(jù)結(jié)構(gòu)
6.4.8 信息隱藏與局部化
6.5 有效的模塊設(shè)計(jì)案例
6.5.1 模塊獨(dú)立性
6.5.2 內(nèi)聚
6.5.3 耦合
本章小結(jié)
習(xí)題
第7章 面向?qū)ο蟮姆治龇椒?/span>
7.1 面向?qū)ο蠓治龈攀?/span>
7.1.1 常用的00A方法
7.1.2 OOA模型
7.2 領(lǐng)域分析
7.2.1 復(fù)用和領(lǐng)域分析
7.2.2 領(lǐng)域分析過程
7.2.3 面向?qū)ο蠓治瞿P偷念悓俪煞?/span>
7.3 OOA過程
7.3.1 用例
7.3.2 類一責(zé)任一協(xié)作者建模
7.3.3 定義結(jié)構(gòu)和層次
7.3.4 定義主題和子系統(tǒng)
7.4 對象一關(guān)系模型
7.5 對象一行為模型
本章小結(jié)
習(xí)題
第8章 面向?qū)ο笤O(shè)計(jì)
8.1 面向?qū)ο笙到y(tǒng)的設(shè)計(jì)
8.1.1 OOD概述
8.1.2 統(tǒng)一的OOD方法
8.2 系統(tǒng)設(shè)計(jì)過程
8.2.1 劃分分析模型
8.2.2 并發(fā)性和子系統(tǒng)分配
8.2.3 任務(wù)管理構(gòu)件
8.2.4 人機(jī)界面構(gòu)件
8.2.5 數(shù)據(jù)管理構(gòu)件
8.2.6 資源管理構(gòu)件
8.2.7 子系統(tǒng)間通信
8.3 對象設(shè)計(jì)過程
8.3.1 對象描述
8.3.2 設(shè)計(jì)算法和數(shù)據(jù)結(jié)構(gòu)
8.3.3 程序構(gòu)件與接口
8.4 設(shè)計(jì)模式
8.4.1 描述設(shè)計(jì)模式
8.4.2 在設(shè)計(jì)中使用設(shè)計(jì)模式
本章小結(jié)
習(xí)題
第9章 面向?qū)ο鬁y試
9.1 OOA和OOD模型的正確性
9.2 OOA和OOD的測試
9.3 OO軟件的測試案例設(shè)計(jì)的影響
9.3.1 OO概念的測試用例設(shè)計(jì)的含義
9.3.2 傳統(tǒng)測試案例設(shè)計(jì)方法的可用性
9.3.3 基于故障的測試
9.4 在類級別可用的測試方法
9.4.1 對OO類的測試
9.4.2 系統(tǒng)測試
本章小結(jié)
習(xí)題
第10章 軟件維護(hù)工程
10.1 軟件維護(hù)案例介紹
10.2 軟件維護(hù)概述
10.2.1 軟件維護(hù)的類型
10.2.2 軟件維護(hù)的困難
10.2.3 軟件維護(hù)的費(fèi)用
10.2.4 軟件維護(hù)的方式
10.3 軟件系統(tǒng)的維護(hù)
10.3.1 概述
10.3.2 軟件維護(hù)的過程
10.3.3 軟件維護(hù)技術(shù)
10.3.4 影響維護(hù)工作量的因素
10.3.5 軟件維護(hù)的策略
10.3.6 維護(hù)成本
本章小結(jié)
習(xí)題
參考文獻(xiàn)
這個(gè)階段要回答的關(guān)鍵問題是:“對于上一個(gè)階段所確定的問題有可行的解決辦法嗎?”為了回答這個(gè)問題,系統(tǒng)分析員需要進(jìn)行一次大大壓縮和簡化了的系統(tǒng)分析和設(shè)計(jì)過程,也就是在較抽象的高層次上進(jìn)行的分析和設(shè)計(jì)過程?尚行匝芯繎(yīng)該比較簡短,這個(gè)階段的任務(wù)不是具體解決問題,而是研究問題的范圍,探索這個(gè)問題是否值得去解,是否有可行的解決辦法?尚行匝芯康慕Y(jié)果是使部門負(fù)責(zé)人做出是否繼續(xù)進(jìn)行這項(xiàng)工程的決定的重要依據(jù),一般來說,只有投資可能取得較大經(jīng)濟(jì)效益的那些工程項(xiàng)目才值得繼續(xù)進(jìn)行下去?尚行匝芯恳院蟮哪切╇A段將需要投入更多的人力物力。及時(shí)終止不值得投資的工程項(xiàng)目可以避免更大的浪費(fèi)。
可行性研究的目的不是解決問題,而是確定問題“是否值得去解決”。怎樣達(dá)到這個(gè)目的?當(dāng)然不能靠主觀猜想,而是要靠客觀分析。系統(tǒng)分析員必須分析幾種主要的可能解法的利弊,從而判斷原定的系統(tǒng)規(guī)模和目標(biāo)是否現(xiàn)實(shí),以及系統(tǒng)完成后所能帶來的效益是否大到值得投資開發(fā)這個(gè)系統(tǒng)的程度。
首先需要進(jìn)一步分析和澄清問題定義。在問題定義階段初步確定的規(guī)模和目標(biāo),如果是正確的就進(jìn)一步加以肯定;如果有錯(cuò)誤就應(yīng)該及時(shí)改正;如果對目標(biāo)系統(tǒng)有任何約束和限制,也必須把它們清楚地列舉出來。在澄清了問題定義之后,系統(tǒng)分析員應(yīng)該導(dǎo)出系統(tǒng)的邏輯模型。然后從系統(tǒng)邏輯模型出發(fā),探索若干種可供選擇的主要解法(即系統(tǒng)實(shí)現(xiàn)方案)。對每種解法,系統(tǒng)分析員都應(yīng)該仔細(xì)研究它的可行性,一般說來,至少應(yīng)該從3個(gè)方面研究每種解法的可行性;①技術(shù)可行性,即使用現(xiàn)有的技術(shù)能實(shí)現(xiàn)這個(gè)系統(tǒng)嗎?②經(jīng)濟(jì)可行性,即這個(gè)系統(tǒng)的經(jīng)濟(jì)效益能超過它的開發(fā)成本嗎?③操作可行性,即系統(tǒng)的操作方式在這個(gè)用戶組織內(nèi)行得通嗎?
必要時(shí)還應(yīng)該從法律、社會效益等更廣泛的方面研究每種解法的可行性。系統(tǒng)分析員應(yīng)該為每個(gè)可行的解法制訂一個(gè)粗略的實(shí)現(xiàn)進(jìn)度。
可行性研究最根本的任務(wù)是對以后的行動方針提出建議。如果問題沒有可行的解,系統(tǒng)分析員應(yīng)該建議停止這項(xiàng)開發(fā)工程,以避免時(shí)間、資源、人力和金錢的浪費(fèi);如果問題有可行的解,分析員應(yīng)該推薦一個(gè)較好的解決方案,并且為工程制定一個(gè)初步的計(jì)劃?尚行匝芯啃枰臅r(shí)間長短取決于工程的規(guī)模。一般說來,可行性研究的成本只是預(yù)期工程總成本的5%~10%。
需求分析階段的任務(wù)仍然不是具體地解決問題,而是準(zhǔn)確地確定“為了解決這個(gè)問題,目標(biāo)系統(tǒng)必須做什么”,主要是確定目標(biāo)系統(tǒng)必須具備哪些功能。用戶了解他們所面對的問題,知道必須做什么,但通常不能完整準(zhǔn)確地表達(dá)出他們的要求,更不知道怎樣利用計(jì)算機(jī)解決他們的問題;軟件開發(fā)人員知道怎樣用軟件實(shí)現(xiàn)人們的要求,但是對特定用戶的具體要求并不完全清楚。因此,系統(tǒng)分析員在需求分析階段必須和用戶密切配合,充分交流信息,以得出經(jīng)過用戶確認(rèn)的系統(tǒng)邏輯模型。通常用數(shù)據(jù)流圖、數(shù)據(jù)字典和簡要的算法表示系統(tǒng)的邏輯模型。在需求分析階段確定的系統(tǒng)邏輯模型是以后設(shè)計(jì)和實(shí)現(xiàn)目標(biāo)系統(tǒng)的基礎(chǔ),因此必須準(zhǔn)確完整地體現(xiàn)用戶的要求。這個(gè)階段的一項(xiàng)重要任務(wù),是用正式文檔準(zhǔn)確地記錄對目標(biāo)系統(tǒng)的需求,即《需求分析規(guī)格說明書》。
3.系統(tǒng)設(shè)計(jì)
系統(tǒng)設(shè)計(jì)階段必須回答的關(guān)鍵問題是:“概括地說,應(yīng)該怎樣實(shí)現(xiàn)目標(biāo)系統(tǒng)?”系統(tǒng)設(shè)計(jì)的主要任務(wù)是進(jìn)行總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)?傮w設(shè)計(jì)又稱為概要設(shè)計(jì)。首先,應(yīng)該設(shè)計(jì)出實(shí)現(xiàn)目標(biāo)系統(tǒng)的幾種可能的方案。通常至少應(yīng)該設(shè)計(jì)出低成本、中等成本和高成本3種方案。軟件工程師應(yīng)該用適當(dāng)?shù)谋磉_(dá)工具描述每種方案,分析每種方案的優(yōu)缺點(diǎn),并在充分權(quán)衡每種方案利弊的基礎(chǔ)上推薦一個(gè)最佳方案。此外,還應(yīng)該制訂出實(shí)現(xiàn)最佳方案的詳細(xì)計(jì)劃。如果客戶接受所推薦的方案,則應(yīng)進(jìn)一步完成下一項(xiàng)主要任務(wù)?傮w設(shè)計(jì)工作確定了解決問題的策略及目標(biāo)系統(tǒng)中應(yīng)包含的程序,但是,怎樣設(shè)計(jì)這些程序呢?軟件設(shè)計(jì)的_條基本原理就是,程序應(yīng)該模塊化,也就是說,一個(gè)程序應(yīng)該由若干個(gè)規(guī)模適中的模塊按合理的層次結(jié)構(gòu)組織而成。因此,總體設(shè)計(jì)的另一項(xiàng)主要任務(wù)就是設(shè)計(jì)程序的體系結(jié)構(gòu),也就是確定程序由哪些模塊組成以及模塊問的關(guān)系。
總體設(shè)計(jì)階段以比較抽象概括的方式提出了解決問題的辦法。詳細(xì)設(shè)計(jì)階段即程序?qū)崿F(xiàn)的任務(wù)就是把解法具體化,也就是回答“應(yīng)該怎樣具體地實(shí)現(xiàn)這個(gè)系統(tǒng)呢?”這個(gè)關(guān)鍵問題。這個(gè)階段的任務(wù)還不是編寫程序,而是設(shè)計(jì)出程序的詳細(xì)規(guī)格說明。詳細(xì)規(guī)格說明的作用類似于其他工程領(lǐng)域中工程師經(jīng)常使用的工程藍(lán)圖,應(yīng)該包含必要的細(xì)節(jié)。程序員可以根據(jù)詳細(xì)規(guī)格說明寫出實(shí)際的程序代碼。
4.程序?qū)崿F(xiàn)
程序?qū)崿F(xiàn)也被稱為模塊設(shè)計(jì),開發(fā)人員在這個(gè)階段將詳細(xì)地設(shè)計(jì)每個(gè)模塊,并確定實(shí)現(xiàn)模塊功能所需要的算法和數(shù)據(jù)結(jié)構(gòu)。
這個(gè)階段的關(guān)鍵任務(wù)是寫出正確的容易理解、容易維護(hù)的程序模塊,具體包括編碼和單元測試。程序員應(yīng)該根據(jù)目標(biāo)系統(tǒng)的性質(zhì)和實(shí)際環(huán)境,選取一種適當(dāng)?shù)母呒壋绦蛟O(shè)計(jì)語言(必要時(shí)用匯編語言),把詳細(xì)設(shè)計(jì)的結(jié)果翻譯成使用選定的語言書寫的程序,并應(yīng)仔細(xì)測試編寫的每一個(gè)模塊。
5.測試確認(rèn)
這個(gè)階段的關(guān)鍵任務(wù)是通過各種類型的測試及調(diào)試,使軟件達(dá)到預(yù)定的要求。最基本的測試是集成測試和驗(yàn)收測試。所謂集成測試是根據(jù)設(shè)計(jì)的軟件結(jié)構(gòu),把經(jīng)過單元測試檢驗(yàn)的模塊按某種選定的策略裝配起來,在裝配過程中對程序進(jìn)行必要的測試。所謂驗(yàn)收測試則是按照需求規(guī)格說明書的規(guī)定,由用戶對目標(biāo)系統(tǒng)進(jìn)行驗(yàn)收,必要時(shí)還可以再通過現(xiàn)場測試或平行運(yùn)行等方法對目標(biāo)系統(tǒng)進(jìn)一步測試檢驗(yàn)。為了使用戶能夠積極參加驗(yàn)收測試,并且在系統(tǒng)投入生產(chǎn)性運(yùn)行以后能夠正確有效地使用這個(gè)系統(tǒng),通常需要以正式的或非正式的方式對用戶進(jìn)行培訓(xùn)。通過對軟件測試結(jié)果進(jìn)行分析,可以預(yù)測軟件的可靠性;反之,根據(jù)對軟件可靠性的要求,用戶也可以決定測試和調(diào)試過程什么時(shí)候結(jié)束。軟件測試人員應(yīng)該用正式的文檔資料把測試計(jì)劃、詳細(xì)測試方案以及實(shí)際測試結(jié)果保存下來,作為軟件配置的一個(gè)組成部分。
……