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