軟件工程課件:軟件工程學(xué)概論_第1頁
軟件工程課件:軟件工程學(xué)概論_第2頁
軟件工程課件:軟件工程學(xué)概論_第3頁
軟件工程課件:軟件工程學(xué)概論_第4頁
軟件工程課件:軟件工程學(xué)概論_第5頁
已閱讀5頁,還剩121頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

軟件工程學(xué)概論1.1軟件的基本概念1.2軟件危機(jī)1.3軟件工程1.4軟件工程的方法、工具與環(huán)境1.5軟件過程與軟件生命周期1.6常見的軟件過程模型1.7小結(jié)習(xí)題1

知識點(diǎn)

軟件,軟件危機(jī),軟件工程,軟件工程的方法、模型、工具,軟件過程模型。

難點(diǎn)

軟件開發(fā)過程及過程模型。

基于工作過程的教學(xué)任務(wù)

通過本章的學(xué)習(xí),了解和掌握軟件工程的基本概念(如軟件和軟件工程的定義等),軟件危機(jī)的表現(xiàn)形式、產(chǎn)生的原因及消除的途徑,軟件工程的基本原理、方法學(xué),軟件的生存期,幾種主要的軟件開發(fā)模型等。

1.1軟件的基本概念

在20世紀(jì)中葉,軟件伴隨著第一臺電子計算機(jī)的問世誕生了。以編寫軟件為職業(yè)的人也開始出現(xiàn),他們多是經(jīng)過訓(xùn)練的數(shù)學(xué)家和電子工程師。20世紀(jì)60年代,美國大學(xué)里開始出現(xiàn)計算機(jī)專業(yè),教學(xué)生如何編寫軟件。軟件產(chǎn)業(yè)從零開始起步,在短短的五十多年時間里迅速發(fā)展成為推動人類社會發(fā)展的龍頭產(chǎn)業(yè),并造就了一批百萬、億萬富翁。隨著信息產(chǎn)業(yè)的發(fā)展,軟件對人類社會越來越重要。

1.1.1軟件與軟件特性

軟件也稱計算機(jī)軟件。如果將計算機(jī)比喻成人體,軟件就如同人體的骨架(體系結(jié)構(gòu))、外表(用戶界面)、大腦(數(shù)據(jù)庫)、器官(模塊)、神經(jīng)和肌肉(數(shù)據(jù)結(jié)構(gòu)和算法)。

1.什么是軟件

軟件是計算機(jī)系統(tǒng)中與硬件相互依存的重要組成部分。高質(zhì)量、多功能的軟件使得計算機(jī)的應(yīng)用從單一的科學(xué)計算擴(kuò)展到多個領(lǐng)域,比如數(shù)據(jù)處理、實時控制等。

軟件是計算機(jī)系統(tǒng)運(yùn)行的指令、數(shù)據(jù)和資料的集合,包括指令程序、數(shù)據(jù)、相關(guān)文檔和完善的售后服務(wù),即

軟件=程序+數(shù)據(jù)+文檔+服務(wù)

其中:程序是按事先設(shè)計的功能和性能要求執(zhí)行的指令序列;數(shù)據(jù)是使程序能正常處理信息所需的數(shù)據(jù)結(jié)構(gòu)及信息表示;文檔是與程序開發(fā)、維護(hù)和使用有關(guān)的技術(shù)數(shù)據(jù)和圖文資料,如軟件開發(fā)計劃書、需求規(guī)格說明書、設(shè)計說明書、測試報告和用戶手冊等。

2.軟件的特性

軟件的特性主要分為有形特性和無形特性。其中,軟件的有形特性是軟件的各種具體表現(xiàn)形式,包括軟件文檔、程序代碼、二進(jìn)制代碼、用戶界面、輸出報表等;而軟件的無形特性是軟件的內(nèi)部邏輯,是軟件本身所包含的思想。

軟件的無形特性使得我們只能從軟件之外去觀察、認(rèn)識軟件,與硬件和傳統(tǒng)的工業(yè)產(chǎn)品相比較,軟件具有以下獨(dú)特的特性:

(1)軟件是一種邏輯產(chǎn)品,與物質(zhì)產(chǎn)品有很大的區(qū)別。軟件產(chǎn)品是看不見摸不著的,因而具有無形性;軟件是腦力勞動的結(jié)晶,是以程序和文檔的形式出現(xiàn)的,通過計算機(jī)的執(zhí)行才能體現(xiàn)其功能和作用。

(2)軟件產(chǎn)品生產(chǎn)的關(guān)鍵主要是研制,軟件產(chǎn)品的成本主要體現(xiàn)在軟件的開發(fā)和研制上。軟件一旦研制開發(fā)成功后,通過復(fù)制就可以產(chǎn)生大量軟件產(chǎn)品。

(3)在軟件的運(yùn)行和使用期間,沒有硬件那樣的機(jī)械磨損老化問題。

(4)軟件的開發(fā)和運(yùn)行常受到計算機(jī)系統(tǒng)的限制,對計算機(jī)系統(tǒng)有著不同程度的依賴性,這導(dǎo)致了軟件移植的問題。

(5)軟件的開發(fā)主要是進(jìn)行腦力勞動,至今尚未完全擺脫手工作坊式的開發(fā)方式,生產(chǎn)效率低,且大部分產(chǎn)品是定制的。

(6)軟件是復(fù)雜的,而且以后會更加復(fù)雜。軟件是人類有史以來生產(chǎn)的復(fù)雜度最高的工業(yè)產(chǎn)品。軟件涉及人類社會的各行各業(yè)、方方面面,軟件開發(fā)常常涉及其他領(lǐng)域的專門知識,這對軟件工程師提出了很高的要求。

(7)軟件的成本相當(dāng)昂貴。軟件開發(fā)需要投入大量、高強(qiáng)度的腦力勞動,成本非常高,風(fēng)險也大。現(xiàn)在軟件的成本開銷已大大超過了硬件的成本開銷。

(8)脆弱性。隨著Internet的普及,計算機(jī)之間經(jīng)常相互通信和共享資源,這給用戶帶來方便和利益的同時,也給計算機(jī)系統(tǒng)的安全性帶來了威脅。

(9)軟件工作牽涉很多社會因素。許多軟件的開發(fā)和運(yùn)行涉及機(jī)構(gòu)、體制和管理方式等問題,還會涉及人們的觀念和心理等因素。這些人的因素,常常成為軟件開發(fā)的困難所在,直接影響到項目的成敗。

1.1.2軟件的分類

計算機(jī)軟件是一個涉及多個領(lǐng)域、應(yīng)用廣泛的概念,可以從各個不同的角度對計算機(jī)軟件進(jìn)行分類。目前一般的分類方法有以下幾種。

1.基于軟件功能的劃分

基于軟件功能,可將軟件劃分為系統(tǒng)軟件、應(yīng)用軟件和支撐軟件等。

系統(tǒng)軟件是與計算機(jī)硬件緊密結(jié)合,以使計算機(jī)的各個部件與相關(guān)軟件及數(shù)據(jù)協(xié)調(diào)、高效工作的軟件。它有基礎(chǔ)性和通用性兩大特點(diǎn)。例如,操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)、設(shè)備驅(qū)動程序等。這些軟件一般由專業(yè)的軟件公司有目的地開發(fā)并較好地維護(hù)。

應(yīng)用軟件是為特定領(lǐng)域應(yīng)用、為特定目的服務(wù)而開發(fā)的一類軟件。例如,商業(yè)處理軟件、科學(xué)計算軟件、計算機(jī)輔助設(shè)計軟件、人工智能軟件等。

支撐軟件是協(xié)助用戶開發(fā)軟件的工具性軟件,包括幫助程序人員開發(fā)軟件產(chǎn)品的工具和幫助管理人員控制開發(fā)進(jìn)程的工具。例如,需求分析工具、設(shè)計工具、編碼工具、測試工具、維護(hù)和管理工具等。

2.基于軟件規(guī)模的劃分

軟件規(guī)模是軟件項目可量化的結(jié)果,通常采用代碼行數(shù)量或耗用人工時的多少來衡量。

3.基于軟件工作方式的劃分

基于軟件工作方式,可將軟件劃分為實時處理軟件、分時軟件、交互式軟件和批處理軟件。

實時處理軟件,例如衛(wèi)星實時監(jiān)控軟件、外匯實時行情軟件等。實時軟件既可以應(yīng)用于信息處理,也可以應(yīng)用于過程控制。

分時軟件,允許多個聯(lián)機(jī)用戶同時使用計算機(jī)的軟件。

交互式軟件,能實現(xiàn)人機(jī)通信的軟件,能接收用戶給出的信息,但在時間上沒有嚴(yán)格規(guī)定。

批處理軟件,把一組輸入作業(yè)或一批數(shù)據(jù)以成批處理的方式一次運(yùn)行,順序逐個處理的軟件。

4.按軟件服務(wù)對象的范圍進(jìn)行劃分

按軟件服務(wù)對象的范圍,可將軟件劃分為項目軟件和產(chǎn)品軟件。

項目軟件也稱定制軟件,是受某特定客戶的委托,由軟件開發(fā)機(jī)構(gòu)在合同約束下開發(fā)的軟件,例如氣象預(yù)測分析軟件、交通監(jiān)控指揮系統(tǒng)、衛(wèi)星控制系統(tǒng)等。

產(chǎn)品軟件也稱通用軟件,指由軟件開發(fā)機(jī)構(gòu)開發(fā)并直接提供給市場,為眾多用戶服務(wù)的軟件,例如文字處理軟件、圖片處理軟件、財務(wù)處理軟件、人事管理軟件等。

5.按使用的頻度進(jìn)行劃分

有些軟件開發(fā)出來僅供一次使用(例如用于人口普查、工業(yè)普查的軟件),另外有些軟件具有較高的使用頻度(例如天氣預(yù)報軟件等)。

6.按軟件失效的影響進(jìn)行劃分

有些軟件在工作中出現(xiàn)故障而失效后,可能對整個軟件系統(tǒng)的影響不大;而有些軟件一旦失效,就可能帶來災(zāi)難性后果(例如財務(wù)金融軟件、交通通信軟件、航空航天軟件等),這類軟件稱為關(guān)鍵軟件。

7.其他幾類軟件

嵌入式軟件。嵌入式計算機(jī)系統(tǒng)將計算機(jī)嵌入在某一系統(tǒng)中,使之成為該系統(tǒng)的重要組成部分,控制該系統(tǒng)的運(yùn)行,進(jìn)而實現(xiàn)一個特定的物理過程。用于嵌入式計算機(jī)系統(tǒng)的軟件稱為嵌入式軟件。大型的嵌入式軟件可用于航空航天系統(tǒng)。小型的嵌入式軟件可用于工業(yè)的智能化產(chǎn)品中,如移動電話、電子詞典、數(shù)碼相機(jī)、機(jī)頂盒、MP4、洗衣機(jī)、空調(diào)機(jī)的自動控制等。

基于Web的軟件。該類軟件是基于B/S(Browser/Server,即瀏覽器/服務(wù)器)結(jié)構(gòu)的軟件,如網(wǎng)絡(luò)游戲軟件、在線考試系統(tǒng)、網(wǎng)絡(luò)銀行等。

1.2軟件危機(jī)

現(xiàn)代計算機(jī)應(yīng)用系統(tǒng)中,軟件的地位日益重要和突出。如何滿足日益增長的軟件需求,如何維護(hù)應(yīng)用中的大量已有軟件,已經(jīng)成為計算機(jī)應(yīng)用系統(tǒng)進(jìn)一步發(fā)展的瓶頸。20世紀(jì)60年代末至20世紀(jì)70年代初,軟件危機(jī)一詞在計算機(jī)界廣為流傳。事實上,軟件危機(jī)幾乎從計算機(jī)誕生的那一天起就出現(xiàn)了,只不過到了1968年,NATO(北大西洋公約組織)的計算機(jī)科學(xué)家在原聯(lián)邦德國召開的國際學(xué)術(shù)會議上才第一次提出了軟件危機(jī)(SoftwareCrisis)這個名詞。

舉例:下面是一個比較典型的軟件危機(jī)的例子。

IBM公司在1963年—1966年間開發(fā)了IBM360機(jī)的操作系統(tǒng)。這一項目花了5000人一年的工作量,最多時有1000人投入開發(fā)工作,寫出了近100萬行源程序,總投資5億美元。據(jù)統(tǒng)計,這個操作系統(tǒng)每次發(fā)行的新版本都是從前一版本中找出1000個程序錯誤后修正的結(jié)果。

這個項目的負(fù)責(zé)人事后總結(jié)他在組織開發(fā)過程中的沉痛教訓(xùn)時說:“正像一只逃亡的野獸落到泥潭中做垂死的掙扎,越是掙扎,陷得越深,最后無法逃脫滅頂?shù)臑?zāi)難。程序設(shè)計工作正像這樣一個泥潭,一批批程序員被迫在泥潭中拼命掙扎。”

如今,雖然軟件開發(fā)的技術(shù)和工具不斷改進(jìn),但是軟件危機(jī)依然沒有徹底消除。那么,什么是軟件危機(jī)呢?

簡單地說,所謂軟件危機(jī),就是指在軟件開發(fā)和軟件維護(hù)過程中所存在的一系列嚴(yán)重問題。這類問題絕不僅僅是不能正常運(yùn)行的軟件才具有的,實際上幾乎所有軟件都不同程度地存在這類問題。軟件危機(jī)包含兩方面的問題:

(1)如何開發(fā)軟件,怎樣滿足對軟件的日益增長、日趨復(fù)雜的需求;

(2)如何維護(hù)數(shù)量不斷膨脹的軟件產(chǎn)品。

具體來說,軟件危機(jī)的主要典型表現(xiàn)與產(chǎn)生的原因有以下幾方面。

(1)對軟件開發(fā)成本和進(jìn)度的估計常常很不準(zhǔn)確。產(chǎn)生的原因主要是拖期、項目管理經(jīng)驗欠缺。

(2)軟件不能符合用戶的要求,用戶對已完成的軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。產(chǎn)生的原因主要是模糊的需求、閉門造車、忙于編程、倉促上陣。

(3)軟件產(chǎn)品的質(zhì)量往往靠不住。產(chǎn)生的原因主要是可靠性和質(zhì)量保證欠缺,缺少測試。

(4)軟件常常是不可維護(hù)的。產(chǎn)生的原因主要是設(shè)計死板,沒有整體考慮。

(5)軟件通常沒有適當(dāng)?shù)奈臋n資料。產(chǎn)生的原因主要是缺少設(shè)計資料、難以維護(hù),寫文檔嫌麻煩。

(6)軟件成本在計算機(jī)系統(tǒng)總成本中所占的比例逐年上升。產(chǎn)生的原因主要是軟件過于龐大,成本過高。

(7)軟件開發(fā)生產(chǎn)率提高的速度,遠(yuǎn)遠(yuǎn)跟不上計算機(jī)應(yīng)用迅速普及深入的速度。產(chǎn)生的原因主要是軟件開發(fā)的方法跟不上計算機(jī)和軟件技術(shù)的發(fā)展速度,技術(shù)落后。

(8)開發(fā)者只專注于技術(shù),風(fēng)險意識薄弱。

消除軟件危機(jī)的途徑主要有以下幾個:

(1)理解軟件的概念,軟件是程序、數(shù)據(jù)及相關(guān)文檔的完整集合。

(2)應(yīng)該推廣使用在實踐中總結(jié)出來的開發(fā)軟件的成功技術(shù)和方法。

(3)應(yīng)該開發(fā)和使用更好的軟件工具。

(4)盡量減少軟件維護(hù)的代價,提高軟件的可維護(hù)性,這也是軟件工程學(xué)的一個重要目標(biāo)。

所以要解決軟件危機(jī)中的問題,既要有技術(shù)措施(方法和工具),又要有必要的組織管理措施,必須用工程化的方法管理軟件開發(fā)過程,用先進(jìn)的軟件開發(fā)技術(shù)進(jìn)行軟件開發(fā),從管理和技術(shù)兩方面保證軟件開發(fā)的質(zhì)量。

1.3軟件工程

1968年秋季,NATO的科技委員會召集了近50名一流的編程人員、計算機(jī)科學(xué)家和工業(yè)界巨頭,討論和制定擺脫軟件危機(jī)的對策,會議上第一次提出了軟件工程(SoftwareEngineering)這個概念。當(dāng)時提出這個概念的FritzBauer的主要思路是想將系統(tǒng)工程的原理應(yīng)用到軟件的開發(fā)和維護(hù)中。

所謂軟件工程,提倡的是一種軟件開發(fā)中的系統(tǒng)思想的具體實現(xiàn),是一門科學(xué),也被稱為是軟件產(chǎn)業(yè)中指導(dǎo)計算機(jī)軟件開發(fā)和維護(hù)的軟科學(xué),還可以定義為:軟件工程是一類設(shè)計軟件的工程。

《計算機(jī)科學(xué)技術(shù)百科全書》中對軟件工程的定義是:應(yīng)用計算機(jī)科學(xué)、數(shù)學(xué)及管理科學(xué)等原理,借鑒傳統(tǒng)工程的原則、方法,創(chuàng)建軟件以達(dá)到提高質(zhì)量、降低成本的目的。其中:計算機(jī)科學(xué)、數(shù)學(xué)用于構(gòu)建模型與算法;工程科學(xué)用于制定規(guī)范、設(shè)計規(guī)范、評估成本及確定權(quán)衡;管理科學(xué)用于計劃、資源、質(zhì)量、成本等管理。

軟件工程一直以來都缺乏一個統(tǒng)一的定義,很多學(xué)者、組織機(jī)構(gòu)都給出了自己的定義。歸納起來其定義可以總結(jié)為:

軟件工程是開發(fā)、運(yùn)行、維護(hù)和修復(fù)軟件的系統(tǒng)方法,是一門工程學(xué)科,即采用工程的概念、原理、技術(shù)和方法來開發(fā)和維護(hù)軟件;也即軟件工程是把系統(tǒng)的、有序的、可量化的方法應(yīng)用到軟件的開發(fā)、運(yùn)營和維護(hù)上的過程;也即軟件工程=工程原理?+?技術(shù)方法+管理技術(shù)。

軟件工程具有以下本質(zhì)特性與重點(diǎn):

(1)軟件工程關(guān)注于大型程序的構(gòu)造—分析與設(shè)計;

(2)軟件工程的中心課題是控制系統(tǒng)的復(fù)雜性—分解;

(3)軟件經(jīng)常變化—要有準(zhǔn)確的需求;

(4)開發(fā)軟件的效率非常重要—經(jīng)驗技巧;

(5)和諧地合作是開發(fā)軟件的關(guān)鍵—團(tuán)隊精神;

(6)軟件必須有效地支持它的用戶—構(gòu)造正確的軟件系統(tǒng);

(7)在軟件工程領(lǐng)域中,一般由具有一種文化背景的人替具有另一種文化背景的人進(jìn)行開發(fā)——須具有知識面非常廣的領(lǐng)域業(yè)務(wù)背景。其中,缺乏應(yīng)用領(lǐng)域的相關(guān)知識,是軟件開發(fā)項目出現(xiàn)問題的常見原因。

1.3.1軟件工程的基本原理

自從在1968年召開的國際會議上正式提出并使用了軟件工程這個術(shù)語以來,研究軟件工程的專家學(xué)者們陸續(xù)提出了100多條關(guān)于軟件工程的準(zhǔn)則。美國著名的軟件工程專家B.W.Boehm綜合這些學(xué)者們的意見并總結(jié)了TRW公司多年開發(fā)軟件的經(jīng)驗,于1983年在論文中提出了軟件工程的七條基本原理。人們雖然不能用數(shù)學(xué)方法嚴(yán)格證明它們是一個完備的集合,但是可以證明在此之前已經(jīng)提出的100多條軟件工程準(zhǔn)則都可以由這七條原理的任意組合蘊(yùn)含或派生。

下面簡要介紹軟件工程的七條基本原理。

1.用分階段的生命周期計劃嚴(yán)格管理

統(tǒng)計表明,50%以上的失敗項目是由于計劃不周而造成的。Boehm認(rèn)為,在整個軟件生命周期中應(yīng)指定并嚴(yán)格執(zhí)行六類計劃:項目概要計劃、里程碑計劃、項目控制計劃、產(chǎn)品控制計劃、驗證計劃、運(yùn)行維護(hù)計劃。

2.堅持進(jìn)行階段評審

統(tǒng)計結(jié)果顯示:大部分錯誤是在編碼之前造成的(大約占63%),錯誤發(fā)現(xiàn)得越晚,改正它要付出的代價就越大,有時要差2到3個數(shù)量級。因此,軟件的質(zhì)量保證工作不能等到編碼結(jié)束之后再進(jìn)行,應(yīng)堅持進(jìn)行嚴(yán)格的階段評審,以便盡早發(fā)現(xiàn)錯誤。

3.實行嚴(yán)格的產(chǎn)品控制

開發(fā)人員最痛恨的事情之一就是改動需求。但是實踐告訴我們,需求的改動往往是不可避免的。我們要采用科學(xué)的產(chǎn)品控制技術(shù)來順應(yīng)這種要求,也就是要采用變動控制,又叫基準(zhǔn)配置管理。當(dāng)需求變動時,其他各個階段的文檔或代碼隨之相應(yīng)變動,以保證軟件的一致性。

4.采納現(xiàn)代程序設(shè)計技術(shù)

從20世紀(jì)60、70年代的結(jié)構(gòu)化軟件開發(fā)技術(shù),到面向?qū)ο蠹夹g(shù),從第一、第二代語言,到第四代語言,人們已經(jīng)充分認(rèn)識到:方法比氣力更有效。采用先進(jìn)的技術(shù)既可以提高軟件開發(fā)和維護(hù)的效率,又可以減少軟件維護(hù)的成本,進(jìn)而提高軟件產(chǎn)品的質(zhì)量。

5.結(jié)果應(yīng)能清楚地審查

軟件是一種看不見、摸不著的邏輯產(chǎn)品。軟件開發(fā)小組的工作進(jìn)展情況可見性差,難于評價和管理。為更好地進(jìn)行管理,應(yīng)根據(jù)軟件開發(fā)的總目標(biāo)及完成期限,盡量明確地規(guī)定開發(fā)小組的責(zé)任和產(chǎn)品標(biāo)準(zhǔn),從而使所得到的標(biāo)準(zhǔn)能清楚地審查。

6.開發(fā)小組的人員應(yīng)該少而精

開發(fā)人員的素質(zhì)和數(shù)量是影響軟件質(zhì)量和開發(fā)效率的重要因素,應(yīng)該少而精。這基于兩點(diǎn)原因:高素質(zhì)開發(fā)人員的效率比低素質(zhì)開發(fā)人員的效率要高幾倍到幾十倍,開發(fā)工作中犯的錯誤也要少的多;當(dāng)開發(fā)小組為N人時,可能的溝通信道為N(N-1)/2,可見隨著人數(shù)N的增大,溝通開銷將急劇增大。

7.承認(rèn)不斷改進(jìn)軟件工程實踐的必要性

遵從上述六條基本原理,就能夠較好地實現(xiàn)軟件的工程化生產(chǎn)。但是,它們只是對現(xiàn)有經(jīng)驗的總結(jié)和歸納,并不能保證趕上技術(shù)不斷前進(jìn)發(fā)展的步伐。因此,Boehm提出應(yīng)把承認(rèn)不斷改進(jìn)軟件工程實踐的必要性作為軟件工程的第七條原理。根據(jù)這條原理,不僅要積極采納新的軟件開發(fā)技術(shù),還要注意不斷總結(jié)經(jīng)驗,收集進(jìn)度和消耗等數(shù)據(jù),進(jìn)行出錯類型和問題報告統(tǒng)計。這些數(shù)據(jù)既可以用來評估新的軟件技術(shù)效果,也可以用來指明必須著重注意的問題和應(yīng)該優(yōu)先進(jìn)行研究的工具和技術(shù)。

1.3.2軟件工程學(xué)科包含的領(lǐng)域

軟件工程是一門交叉性的工程學(xué)科,它將計算機(jī)科學(xué)、數(shù)學(xué)、工程學(xué)和管理學(xué)等基本原理應(yīng)用于軟件開發(fā)的工程實踐中,并借鑒傳統(tǒng)工程的原則和方法,以系統(tǒng)、可控、有效的方式生產(chǎn)高質(zhì)量的軟件產(chǎn)品。即軟件工程學(xué)結(jié)合了工程學(xué)和計算機(jī)科學(xué)的部分內(nèi)容,主要包含了開發(fā)技術(shù)和工程管理兩方面的內(nèi)容,具體的組成形式如圖1-1所示。

圖1-1軟件工程學(xué)領(lǐng)域

1.軟件開發(fā)技術(shù)

軟件開發(fā)技術(shù)又包括軟件開發(fā)方法學(xué)、軟件工具和軟件工程環(huán)境。

1)軟件開發(fā)方法學(xué)

軟件工程方法為軟件開發(fā)提供了如何做的技術(shù),是指導(dǎo)研制軟件的某種標(biāo)準(zhǔn)規(guī)范。它包括多方面的任務(wù),如項目計劃與估算、軟件系統(tǒng)需求分析、數(shù)據(jù)結(jié)構(gòu)設(shè)計、系統(tǒng)總體結(jié)構(gòu)設(shè)計、算法設(shè)計、編碼、測試以及維護(hù)等。其中,包括面向?qū)ο笮枨蠓治?、面向?qū)ο笤O(shè)計、面向?qū)ο缶幋a在內(nèi)的軟件開發(fā)方法已成為現(xiàn)在許多軟件工程師的首選方法。面向?qū)ο蠹夹g(shù)還促進(jìn)了軟件復(fù)用技術(shù)的發(fā)展,有組件、控件等軟件構(gòu)件方法。

2)軟件工具

軟件工具為軟件工程方法提供了自動的或半自動的軟件支撐環(huán)境。目前,已經(jīng)推出了許多軟件工具,這些軟件工具集成起來,建立起了稱為計算機(jī)輔助軟件工程(CASE)的軟件開發(fā)支撐系統(tǒng)。CASE將各種軟件開發(fā)方法工具、開發(fā)機(jī)器和一個存放開發(fā)過程信息的工程數(shù)據(jù)庫組合起來形成一個軟件工程環(huán)境。

3)軟件工程環(huán)境

方法與工具的結(jié)合,加上配套的系統(tǒng)軟、硬件支持就形成了軟件開發(fā)的環(huán)境。在軟件開發(fā)工作中,人們不懈地創(chuàng)造著良好的軟件開發(fā)環(huán)境,各種UNIX版本操作系統(tǒng)、MicrosoftWindows系列操作系統(tǒng)以及近幾年開源文化推動的Linux操作系統(tǒng),還有形式繁多的網(wǎng)絡(luò)計算環(huán)境等,將軟件工程環(huán)境的研究推到了一個新的領(lǐng)域,如能夠支持軟件開發(fā)過程的輔助工具CASE。

2.軟件工程管理

由于軟件本身的特性,軟件工程管理既運(yùn)用管理學(xué)的知識,又結(jié)合軟件特性,形成了軟件管理學(xué)、軟件經(jīng)濟(jì)學(xué)和軟件度量學(xué)三個分支。軟件工程管理的目的就是為了按照進(jìn)度和預(yù)算來完成軟件開發(fā)計劃,成功地生產(chǎn)軟件產(chǎn)品,并實現(xiàn)預(yù)期的經(jīng)濟(jì)效益和社會效益。軟件工程管理的任務(wù)是有效地組織人員,按照適當(dāng)?shù)募夹g(shù)、方法,利用好的工具來完成預(yù)定的軟件項目。軟件工程管理的內(nèi)容包括軟件費(fèi)用管理、人員組織、工程計劃管理、軟件配置管理等。

1.4軟件工程的方法、工具與環(huán)境

軟件工程方法學(xué)包含三個要素:方法、工具和過程。其中,方法是完成軟件開發(fā)的各項任務(wù)的技術(shù)方法,回答怎樣做的問題;工具是為運(yùn)用方法而提供的自動的或半自動的軟件工程支撐環(huán)境;過程是為了獲得高質(zhì)量的軟件所需要完成的一系列任務(wù)框架,它規(guī)定了完成各項任務(wù)的工作步驟。

1.4.1軟件工程的方法、工具與環(huán)境

1.方法

20世紀(jì)60年代中期爆發(fā)了眾所周知的軟件危機(jī)。為了克服這一危機(jī),在1968、1969年連續(xù)召開的兩次著名的NATO會議上提出了軟件工程這一術(shù)語,并在之后不斷發(fā)展、完善。與此同時,軟件研究人員也在不斷探索新的軟件開發(fā)方法。至今已形成了七類軟件開發(fā)方法。

1)傳統(tǒng)的結(jié)構(gòu)化軟件開發(fā)方法—SASD方法

1978年,E.Yourdon等人提出了結(jié)構(gòu)化方法(SASD方法),也可稱為面向功能的軟件開發(fā)方法或面向數(shù)據(jù)流的軟件開發(fā)方法。這是20世紀(jì)60~70年代使用最廣泛的軟件開發(fā)方法。

當(dāng)使用結(jié)構(gòu)化開發(fā)方法進(jìn)行軟件開發(fā)時,首先要用結(jié)構(gòu)化分析(StructuredAnalysis,SA)方法對軟件進(jìn)行需求分析;然后用結(jié)構(gòu)化設(shè)計(StructuredDesign,SD)方法進(jìn)行軟件系統(tǒng)的總體設(shè)計;最后用結(jié)構(gòu)化程序設(shè)計(StructuredProgramming,SP)編程實現(xiàn)系統(tǒng)。結(jié)構(gòu)化開發(fā)方法將軟件系統(tǒng)分為兩類典型的軟件結(jié)構(gòu):變換型和事務(wù)型,使軟件開發(fā)的成功率大大提高。

2)面向數(shù)據(jù)結(jié)構(gòu)的軟件開發(fā)方法—面向數(shù)據(jù)的方法

(1)

Jackson方法。

該方法是1975年由M.A.Jackson提出的一類至今仍廣泛使用的軟件開發(fā)方法。該方法從目標(biāo)系統(tǒng)的輸入、輸出數(shù)據(jù)結(jié)構(gòu)入手,導(dǎo)出程序框架結(jié)構(gòu),再補(bǔ)充其他細(xì)節(jié),就可得到完整的程序結(jié)構(gòu)圖。這一方法對輸入、輸出數(shù)據(jù)結(jié)構(gòu)明確的中小型系統(tǒng)特別有效,如商業(yè)應(yīng)用中的文件表格處理。該方法也可與其他方法結(jié)合,用于模塊的詳細(xì)設(shè)計。

Jackson方法有時也稱為面向數(shù)據(jù)結(jié)構(gòu)的軟件設(shè)計方法。

(2)

Warnier方法。

該方法是1974年由J.D.Warnier提出的軟件開發(fā)方法,它與Jackson方法類似,差別有三點(diǎn):一是它們使用的圖形工具不同,分別使用Warnier圖和Jackson圖;二是使用的偽碼不同;三是最主要的差別,即在構(gòu)造程序框架時,Warnier方法僅考慮輸入數(shù)據(jù)結(jié)構(gòu),而Jackson方法不僅考慮輸入數(shù)據(jù)結(jié)構(gòu),而且還考慮輸出數(shù)據(jù)結(jié)構(gòu)。

3)面向問題的分析法—問題分析法

面向問題的分析法(ProblemAnalysisMethod,PAM)是20世紀(jì)80年代末由日立公司提出的一種軟件開發(fā)方法。其基本思想是用輸入、輸出數(shù)據(jù)結(jié)構(gòu)來指導(dǎo)系統(tǒng)的分解,并在系統(tǒng)分析指導(dǎo)下逐步綜合。該方法的具體步驟是:從輸入、輸出數(shù)據(jù)結(jié)構(gòu)導(dǎo)出基本處理框,分析這些處理框之間的先后關(guān)系,按先后關(guān)系逐步綜合處理框,直到畫出整個系統(tǒng)的PAD圖。PAM方法的另一個優(yōu)點(diǎn)是使用PAD圖。這是一種二維樹形結(jié)構(gòu)圖,是到目前為止最好的詳細(xì)設(shè)計表示方法之一。由于在輸入、輸出數(shù)據(jù)結(jié)構(gòu)與整個系統(tǒng)之間同樣存在著鴻溝,PAM方法仍只適用于中小型系統(tǒng)的分析和設(shè)計。

4)面向?qū)ο蟮能浖_發(fā)方法

隨著OOP(面向?qū)ο缶幊?向OOD(面向?qū)ο笤O(shè)計)和OOA(面向?qū)ο蠓治?的發(fā)展,最終形成面向?qū)ο蟮能浖_發(fā)方法OMT(ObjectModellingTechnique),其主要要點(diǎn)是:對象+類+繼承+消息通信。這是一種自底向上和自頂向下相結(jié)合的方法,而且它以對象建模為基礎(chǔ),從而不僅考慮了輸入、輸出數(shù)據(jù)結(jié)構(gòu),實際上也包含了所有對象的數(shù)據(jù)結(jié)構(gòu)。所以O(shè)MT徹底實現(xiàn)了PAM沒有完全實現(xiàn)的目標(biāo)。

不僅如此,OO(面向?qū)ο?技術(shù)在需求分析、可維護(hù)性和可靠性這三個軟件開發(fā)的關(guān)鍵環(huán)節(jié)和質(zhì)量指標(biāo)上有了實質(zhì)性的突破,徹底地解決了在這些方面存在的嚴(yán)重問題,能夠真正建立基于用戶需求的軟件系統(tǒng),而且系統(tǒng)的可維護(hù)性大大改善,從而宣告了軟件危機(jī)末日的來臨。當(dāng)前業(yè)界廣泛使用的面向?qū)ο蠼5臉?biāo)準(zhǔn)建模語言是UML(UnifiedModelingLanguage),使用UML建模語言可以建立面向?qū)ο蠓治龊驮O(shè)計等模型。

5)可視化開發(fā)方法

可視化開發(fā)是20世紀(jì)90年代軟件界最大的兩個熱點(diǎn)之一。隨著圖形用戶界面的興起,用戶界面在軟件系統(tǒng)中所占的比例也越來越大,有的甚至高達(dá)60%~70%。

可視化開發(fā)就是在可視開發(fā)工具提供的圖形用戶界面上,通過操作界面元素,諸如菜單、按鈕、對話框、編輯框、單選框、復(fù)選框、列表框和滾動條等,由可視開發(fā)工具自動生成應(yīng)用軟件,這類應(yīng)用軟件的工作方式是事件驅(qū)動。

許多工程科學(xué)計算都與圖形有關(guān),因此都可以開發(fā)相應(yīng)的可視化計算的應(yīng)用軟件??梢暬_發(fā)是軟件開發(fā)方式上的一場革命,它使得軟件專業(yè)開發(fā)人員從繁重的軟件開發(fā)過程中解放出來,對緩解20世紀(jì)80年代中后期爆發(fā)的應(yīng)用軟件危機(jī)有重大作用。

6)

ICASE方法

隨著軟件開發(fā)工具的積累和自動化工具的增多,軟件開發(fā)環(huán)境進(jìn)入了第三代ICASE(IntegratedComputer-AidedSoftwareEngineering)。ICASE的最終目標(biāo)是實現(xiàn)應(yīng)用軟件的全自動開發(fā),即開發(fā)人員只要寫好軟件的需求規(guī)格說明書,軟件開發(fā)環(huán)境就自動完成從需求分析開始的所有軟件開發(fā)工作,自動生成供用戶直接使用的軟件及有關(guān)文檔。

7)基于構(gòu)件的軟件開發(fā)方法—軟件重用和組件連接

軟件重用(Reuse)又稱軟件復(fù)用或軟件再用。軟件重用是利用已有的軟件成分來構(gòu)造新的軟件。它可以大大減少軟件開發(fā)所需的費(fèi)用和時間,且有利于提高軟件的可維護(hù)性和可靠性。目前軟件重用沿著下面三個方向發(fā)展:

(1)基于軟件復(fù)用庫的軟件重用;

(2)與面向?qū)ο蠹夹g(shù)結(jié)合;

(3)組件連接。

其中,組件連接方向是目前發(fā)展最快的軟件重用方式。最早的對象連接技術(shù)OLE(ObjectLinkingandEmbedding)1.0是Microsoft公司于1990年11月在COMDEX展覽會上推出的。OLE給出了軟件組件(ComponentObject)的接口標(biāo)準(zhǔn),這樣任何人都可以按此標(biāo)準(zhǔn)獨(dú)立地開發(fā)組件和增值組件(組件上添加一些功能構(gòu)成新的組件),或由若干組件集成軟件。在這種軟件開發(fā)方法中,應(yīng)用系統(tǒng)的開發(fā)人員可以把主要精力放在應(yīng)用系統(tǒng)本身的研究上,因為他們可在組件市場上購買所需的大部分組件。

綜上所述,今后的軟件開發(fā)將是以O(shè)O技術(shù)為基礎(chǔ)(指用它開發(fā)系統(tǒng)軟件和軟件開發(fā)環(huán)境),可視化開發(fā)、ICASE和軟件組件連接三種方式并駕齊驅(qū),四者將一起形成軟件界新一輪的熱點(diǎn)技術(shù)。

2.工具

軟件工具(SoftwareTools)是指為支持軟件的開發(fā)、維護(hù)、管理而專門研發(fā)的計算機(jī)程序系統(tǒng)。其目的是提高軟件開發(fā)的質(zhì)量和效率,降低軟件開發(fā)、維護(hù)和管理的成本,支持特定的軟件工程方法,減少手工方式管理的負(fù)擔(dān)。

軟件工具種類繁多、涉及面廣,可組成工具箱或集成工具,如編輯、編譯、正文格式處理、靜態(tài)分析、動態(tài)跟蹤、需求分析、設(shè)計分析、測試、模擬和圖形交互等。軟件工具按照應(yīng)用階段分為:計劃工具、分析工具、設(shè)計工具、測試工具等;按照功能分為:分析設(shè)計、Web開發(fā)、界面開發(fā)、項目管理、軟件配置、質(zhì)量保證、軟件維護(hù)等。

1)軟件工具的作用與功能

支持軟件工程的軟件工具,一般應(yīng)該具備認(rèn)識與描述客觀系統(tǒng)、存儲與管理開發(fā)過程的信息、代碼的編寫與生成、文檔的編輯或生成、軟件項目的管理等功能。

2)軟件工具的分類

軟件工具種類繁多且涉及軟件工程的各個開發(fā)階段以及支持不同的軟件工程方法,從不同的角度對軟件工具進(jìn)行分類,對幫助開發(fā)人員評價、選擇和使用軟件工具具有較現(xiàn)實的指導(dǎo)意義,可以按如下分類依據(jù)對軟件工具進(jìn)行分類。

(1)按照用途劃分。按照用途可以把軟件工具分為三類,即支持項目管理的工具:提供給項目管理人員使用,用于項目進(jìn)度控制、成本管理、資源分配、質(zhì)量控制等功能;支持軟件分析與設(shè)計的工具:支持需求分析、設(shè)計、編碼、測試、維護(hù)等軟件生命周期各個階段的開發(fā)工具和管理工具;支持程序設(shè)計的工具:操作系統(tǒng)、編譯程序、解釋程序和匯編程序等。

(2)按照界面劃分。按照界面可以把軟件工具劃分為支持字符界面的工具和支持圖形用戶界面(GraphicsUserInterface,GUI)的工具。

(3)按照軟件生存周期的階段劃分。按照軟件生存周期的階段可以把軟件工具劃分為以下幾類。

系統(tǒng)計劃工具,如版本管理軟件、項目進(jìn)度管理軟件等。

需求分析工具,如數(shù)據(jù)字典管理系統(tǒng)、繪制數(shù)據(jù)流程圖的專用工具、繪制系統(tǒng)結(jié)構(gòu)圖或E-R圖的工具等。

系統(tǒng)設(shè)計工具,如用于描述的工具有流程圖、判定表,程序描述語言(PDL)等。

支持編碼的工具,如編輯系統(tǒng)、匯編程序、解釋和編譯系統(tǒng)等。

測試和調(diào)試工具,如測試用例生成器、測試系統(tǒng)、調(diào)試診斷程序、跟蹤程序等。

運(yùn)行和維護(hù)工具,包括系統(tǒng)運(yùn)行配置工具以及支持系統(tǒng)維護(hù)的工具等。

文檔管理工具,生成和管理系統(tǒng)文檔的工具。

3.軟件開發(fā)環(huán)境

軟件開發(fā)環(huán)境(SoftwareDevelopmentEnvironment)是相關(guān)的一組軟件工具集合,它支持一定的軟件開發(fā)方法或按照一定的軟件開發(fā)模型組織而成,也稱為軟件工程環(huán)境(SoftwareEngineeringEnvironment),是包括方法、工具和管理等多種技術(shù)的綜合系統(tǒng)。其設(shè)計目標(biāo)是簡化軟件開發(fā)過程,提高軟件開發(fā)質(zhì)量和效率。

軟件開發(fā)環(huán)境應(yīng)具備以下特點(diǎn)。

(1)適應(yīng)性。適應(yīng)用戶要求,環(huán)境中的工具可修改、增加、減少和更新。

(2)堅定性。環(huán)境可自我保護(hù),不受用戶和系統(tǒng)影響,可進(jìn)行非預(yù)見性的環(huán)境恢復(fù)。

(3)緊密性。各種軟件工具可以密切配合工作,提高效率。

(4)可移植性。軟件工具可以根據(jù)需要進(jìn)行移植。

常用的軟件工程環(huán)境具有以下三級結(jié)構(gòu):

(1)核心級:主要包括核心工具組、數(shù)據(jù)庫、通訊工具、運(yùn)行支持、功能和與硬件無關(guān)的移植接口等。

(2)基本級:包括環(huán)境的用戶工具、編譯、編輯程序和作業(yè)控制語言的解釋程序等。

(3)應(yīng)用級:通常指應(yīng)用軟件的開發(fā)工具。

1.4.2軟件開發(fā)的基本策略

1.軟件復(fù)用

把復(fù)用的思想用于軟件開發(fā),稱為軟件復(fù)用。軟件復(fù)用就是通過對已有軟件的各種知識來更新或建立新的軟件,可以表述為:構(gòu)造新的軟件系統(tǒng)可以不必每次從零做起,直接使用已有的軟件構(gòu)件,即可組裝(或加以合理修改)成新的系統(tǒng)。軟件復(fù)用可以發(fā)生在一個系統(tǒng)內(nèi),也可以發(fā)生在相似的系統(tǒng)間,或者發(fā)生在完全不同的系統(tǒng)間。復(fù)用方法合理化并簡化了軟件開發(fā)過程,減少了總的開發(fā)工作量與維護(hù)代價,既降低了軟件的成本又提高了生產(chǎn)率。

大多數(shù)情況下所討論的軟件可復(fù)用性指軟件本身的可重用性,即軟件代碼實現(xiàn)的可重用性。而實際上,軟件復(fù)用遠(yuǎn)不止這些,軟件開發(fā)的全生命周期都有可重用的價值,包括項目的組織、軟件需求、設(shè)計、文檔、實現(xiàn)、測試方法和測試用例都是可以被重復(fù)利用或借鑒的有效資源。

2.分而治之

分而治之是指把一個復(fù)雜的問題分解成若干個簡單的問題,然后逐個解決,是軟件設(shè)計中的一種基本技術(shù)。如軟件的體系結(jié)構(gòu)設(shè)計、模塊化設(shè)計都是分而治之的具體表現(xiàn)。在劃分一個系統(tǒng)時,系統(tǒng)中的元素應(yīng)按高內(nèi)聚、低耦合的原則來分組,且其分組結(jié)果應(yīng)該最小化。

3.軟件優(yōu)化與折中

優(yōu)化是指為了提高軟件質(zhì)量,程序員不斷改進(jìn)軟件中的算法、數(shù)據(jù)結(jié)構(gòu)和程序組織。優(yōu)化工作是十分復(fù)雜的,有時很難實現(xiàn)所有目標(biāo)的優(yōu)化,這時就需要折中策略。軟件的折中策略是指通過協(xié)調(diào)各個質(zhì)量因素,實現(xiàn)整體質(zhì)量的最優(yōu)。軟件折中的重要原則是不能使某一方損失關(guān)鍵的職能,更不可以像舍魚而取熊掌那樣拋棄一方。例如,對軟件進(jìn)行時間優(yōu)化的實踐經(jīng)驗為:

(1)在先不考慮時間復(fù)雜度的情況下設(shè)計并精化軟件結(jié)構(gòu);

(2)借用CASE工具模擬分析運(yùn)行時的性能,定位出低效的部分;

(3)詳細(xì)設(shè)計時對最耗時的模塊仔細(xì)推敲,以便提高開發(fā)效率;

(4)使用高級程序設(shè)計語言編寫程序;

(5)對大量占用處理器資源的模塊必要時用低級語言重新編寫代碼,以便提高效率。

1.5軟件過程與軟件生命周期

1.5.1軟件過程

軟件過程是人們用以開發(fā)和維護(hù)軟件及其相關(guān)的軟件工作產(chǎn)品(如項目計劃、設(shè)計文檔、編程、測試、用戶手冊等)的一系列活動,包括軟件工程活動和軟件管理活動,其中必然會涉及有關(guān)的方法和技術(shù)等。它是為了獲得高質(zhì)量軟件所需要完成的一系列任務(wù)的框架,規(guī)定了完成各項任務(wù)的工作步驟。

軟件過程通常包括四類基本過程:

(1)軟件規(guī)格說明:規(guī)定軟件的功能、性能、可靠性及其運(yùn)行環(huán)境等;

(2)軟件開發(fā):研發(fā)滿足規(guī)格說明的具體軟件;

(3)軟件確認(rèn):確認(rèn)軟件能夠完成客戶提出的需求;

(4)軟件演進(jìn):為滿足用戶的變更要求,軟件必須在使用過程中引進(jìn)新技術(shù)、新方法,并根據(jù)新業(yè)務(wù)及時升級更新。

軟件過程具有可理解性、可見性(過程的進(jìn)展和結(jié)果可見)、可靠性、可支持性(易使用CASE工具支持)、可維護(hù)性、可接受性(為軟件工程師接受)、開發(fā)效率和健壯性(抵御外部意外錯誤的能力)等特性。

軟件工程最注重軟件過程中的開發(fā)過程,該過程主要包括項目啟動、需求調(diào)研、設(shè)計(概要設(shè)計及詳細(xì)設(shè)計)、編碼(實現(xiàn))、測試、程序部署、驗收評審和項目結(jié)束等過程。如圖1-2所示為軟件開發(fā)過程。圖1-2軟件開發(fā)過程

在工程實踐中,一般用軟件過程成熟度(SoftwareProcessMaturity)來衡量軟件開發(fā)過程的有效性。

軟件過程成熟度指軟件過程行為可被定義、預(yù)測和控制并被持續(xù)性提高的程度,主要用來表明不同項目所遵循的軟件過程的一致性。成熟度代表了軟件過程能力改善的潛力,成熟度級別用來描述某一成熟度等級上的組織特征,每一等級都為下一等級奠定基礎(chǔ),過程的潛力只有在一定的基礎(chǔ)之上才能夠被充分發(fā)揮。成熟級別的改善需要強(qiáng)有力的管理支持,改善包括管理者和軟件從業(yè)者基本工作方式的改變,組織成員依據(jù)建立的軟件過程標(biāo)準(zhǔn)執(zhí)行并監(jiān)控軟件過程,一旦來自組織和管理上的障礙被清除后,有關(guān)技術(shù)和過程的改善進(jìn)程就能迅速推進(jìn)。

1.5.2軟件生命周期的各個階段

軟件生命周期又稱作軟件生存周期、系統(tǒng)開發(fā)生命周期,是指從提出開發(fā)軟件產(chǎn)品開始,直到軟件報廢為止的全過程。軟件生命周期具體包括軟件定義、開發(fā)和運(yùn)行三個階段,每個階段又可進(jìn)一步劃分成若干個子階段,如圖1-3所示。

圖1-3軟件生命周期的各個階段

軟件生命周期采取工程設(shè)計的思想將軟件項目的開發(fā)過程劃分為若干階段,并規(guī)定各階段的主要任務(wù)和執(zhí)行順序,使軟件開發(fā)可以按階段逐步推進(jìn)。各階段描述如下。

1.定義階段

軟件定義階段的任務(wù)是確定軟件開發(fā)工程必須完成的總目標(biāo),確定工程的可行性,導(dǎo)出實現(xiàn)工程目標(biāo)應(yīng)該采用的策略及系統(tǒng)必須完成的功能,估計完成該項工程需要的資源和成本,并且制定工程進(jìn)度表,如圖1-4所示。這個時期的工作通常又稱為系統(tǒng)分析,由系統(tǒng)分析員負(fù)責(zé)完成。軟件定義階段通常進(jìn)一步劃分成兩個階段,即軟件開發(fā)計劃(包括問題定義、可行性研究)和需求分析。

圖1-4定義階段

定義階段是對軟件進(jìn)行一個初步的分析,確定軟件要完成的總目標(biāo),確切回答系統(tǒng)要解決的問題是什么這一問題。可行性研究是從技術(shù)、經(jīng)濟(jì)角度確定軟件系統(tǒng)的開發(fā)目標(biāo)是否可以實現(xiàn),即回答軟件系統(tǒng)是否有行得通的解決辦法,上一個階段所確定的問題是否可行這一問題。需求分析階段必須和用戶密切配合,充分交流信息,以得出經(jīng)過用戶確認(rèn)的系統(tǒng)需求。這個階段的另一項重要任務(wù)是用正式文檔準(zhǔn)確地記錄對目標(biāo)系統(tǒng)的需求,這份文檔稱為軟件規(guī)格說明書(Specification),它是軟件定義階段的最終輸出結(jié)果。

2.開發(fā)階段

開發(fā)階段具體設(shè)計和實現(xiàn)在前一個時期定義的軟件,它通常由四個階段組成:概要設(shè)計、詳細(xì)設(shè)計、編碼和測試。其中前兩個階段又稱為系統(tǒng)設(shè)計,后兩個階段又稱為系統(tǒng)實現(xiàn),如圖1-5所示。

圖1-5開發(fā)階段

概要設(shè)計又稱為初步設(shè)計、邏輯設(shè)計、高層設(shè)計或總體設(shè)計。在這一階段中,首先,應(yīng)該設(shè)計出實現(xiàn)目標(biāo)系統(tǒng)的幾種可能的方案;其次,在軟件需求規(guī)格說明書的基礎(chǔ)上,對軟件的總體結(jié)構(gòu)進(jìn)行規(guī)劃,主要完成軟件架構(gòu)設(shè)計、模塊分解、模塊功能定義和模塊接口描述等工作。詳細(xì)設(shè)計階段的任務(wù)就是在概要設(shè)計的基礎(chǔ)上,對模塊進(jìn)行具體、詳細(xì)的過程性描述,用各種工具表示模塊的結(jié)構(gòu)、過程、功能和對外接口,即把解法具體化,也就是回答應(yīng)該怎樣具體地實現(xiàn)這個系統(tǒng)的關(guān)鍵問題。編碼是對軟件設(shè)計方案的具體實現(xiàn),即為每一個模塊編寫正確的、易理解、易維護(hù)的程序代碼。

編碼實際上是一個翻譯過程,用程序設(shè)計語言對詳細(xì)設(shè)計進(jìn)行描述,編碼任務(wù)的成果是程序源代碼。測試階段的關(guān)鍵任務(wù)是通過各種類型的測試及相應(yīng)的調(diào)試,使軟件達(dá)到預(yù)定的要求。測試的目的是在軟件交付使用之前,盡可能多地發(fā)現(xiàn)軟件中的錯誤。

3.運(yùn)行階段—檢驗、交付與維護(hù)階段

檢驗、交付與維護(hù)階段的主要任務(wù)是使軟件持久地滿足用戶的需要,如圖1-6所示。

圖1-6檢驗、交付與維護(hù)階段

具體地說,當(dāng)軟件在使用過程中發(fā)現(xiàn)錯誤時應(yīng)該加以改正;當(dāng)環(huán)境改變時應(yīng)該修改軟件以適應(yīng)新的環(huán)境;當(dāng)用戶有新要求時應(yīng)該及時改進(jìn)軟件以滿足用戶的新需要。通常對維護(hù)時期不再進(jìn)一步劃分階段,但是每一次維護(hù)活動本質(zhì)上都是一次壓縮和簡化了的定義和開發(fā)過程。

與軟件開發(fā)階段的其他各項活動相比,這一階段是軟件生命周期的最后一個階段,也是軟件生命周期中占用時間和精力最多的一個階段。在軟件開發(fā)完成并投入使用后,軟件中隱藏的錯誤逐漸顯現(xiàn)出來,或者用戶又提出了對軟件進(jìn)行修改和擴(kuò)充的要求,這都需要對軟件進(jìn)行修改。大量的軟件開發(fā)實踐說明,如果在軟件定義、開發(fā)階段不注重質(zhì)量問題,維護(hù)問題往往會大于開發(fā)問題。為了減少軟件維護(hù)階段的工作量,應(yīng)該在開發(fā)周期的各個階段都重視軟件的質(zhì)量,采取相應(yīng)的質(zhì)量保證措施。

通常,一個階段的工作要在前一個階段工作完成并審查通過之后,才能夠開始進(jìn)行。而這一階段的工作也恰恰是為了能夠延續(xù)并具體實現(xiàn)前一個階段所提出的方案。例如,在軟件開發(fā)過程中,需求分析完成并通過審核之后,才能開始概要設(shè)計。軟件設(shè)計把需求分析階段得到的軟件需求轉(zhuǎn)化為現(xiàn)實軟件產(chǎn)品的體系結(jié)構(gòu)。所以,整個軟件生命周期是按照活動—成果—審查—再活動—再成果的規(guī)律循環(huán)往復(fù),直至獲得最終的軟件產(chǎn)品。

1.6常見的軟件過程模型

如前所述,軟件過程是指軟件工程人員為了獲得高質(zhì)量軟件產(chǎn)品而實施的一系列活動。這些活動可以是順序的、迭代的、并行的、嵌套的,或者是依據(jù)條件而發(fā)生的。軟件工程過程中每一個基本活動都是由過程模型來實現(xiàn)的。其定義可以描述為:項目管理+軟件開發(fā)方法=軟件過程。

軟件過程(Process)是一個將用戶需求轉(zhuǎn)換為軟件系統(tǒng)所需的活動的集合,通常用軟件過程模型來描述。

軟件過程模型是軟件開發(fā)的全部過程、活動和任務(wù)的結(jié)構(gòu)框架。

軟件過程模型能清晰、直觀地表達(dá)軟件開發(fā)全過程,明確規(guī)定了要完成的主要活動和任務(wù),用來作為軟件項目開發(fā)的基礎(chǔ)。

常見的軟件工程模型有瀑布模型、快速原型模型、演化模型、螺旋模型、噴泉模型等,下面詳細(xì)介紹這幾種模型。

1.6.1瀑布模型

瀑布模型又稱軟件生命周期模型,是最早被提出并使用的軟件開發(fā)模型。這個模型描述了軟件生命周期中的一些基本過程活動。這些活動從一個階段到另一個階段逐次下降,其工作流程形式上很像瀑布,因此人們把它稱為瀑布模型。該模型如圖1-3所示。

瀑布模型的優(yōu)點(diǎn)之一是文檔驅(qū)動,即在各階段都必須完成規(guī)定的文檔,并在每個階段結(jié)束前都要對所完成的文檔進(jìn)行評審。這種工作方式有利于軟件錯誤的盡早發(fā)現(xiàn)和解決,并且對軟件系統(tǒng)的后續(xù)維護(hù)帶來很大的便利。

該模型的另一個優(yōu)點(diǎn)是:它所提供的順序工作流程為軟件項目按規(guī)程管理提供了便利,如按階段制訂項目計劃、分階段進(jìn)行成本核算、進(jìn)行階段性評審等,對提高軟件產(chǎn)品質(zhì)量提供了有效保證。

瀑布模型是一種線性模型,要求項目嚴(yán)格按規(guī)程推進(jìn),必須等到所有開發(fā)工作全部完成以后才能獲得可以交付的軟件產(chǎn)品,這一過程可能延遲的很長。因此,通過瀑布模型并不能對軟件系統(tǒng)進(jìn)行快速創(chuàng)建,對于一些急于交付的軟件系統(tǒng)的開發(fā),瀑布模型并不合適。

瀑布模型主要適合于需求明確且無大的需求變更的軟件開發(fā)。例如系統(tǒng)軟件、實時控制軟件。瀑布模型與其他系統(tǒng)工程項目中應(yīng)用的模型是一致的,當(dāng)軟件項目僅是大型系統(tǒng)工程項目的一部分時,采用瀑布模型是非常合適的。

實踐證明,瀑布模型有許多的缺陷,可能對軟件項目產(chǎn)生負(fù)面影響。而這種模型又不能完全拋棄。在某些領(lǐng)域中,它是最合理的方法,比如嵌入式軟件和實時控制系統(tǒng)。但是,對更多的其他應(yīng)用領(lǐng)域,特別是對商業(yè)數(shù)據(jù)處理,瀑布模型并不適用。瀑布模型的缺點(diǎn)主要有以下幾點(diǎn)。

(1)不能處理含糊不清和不完整的用戶需求;

(2)由于開銷的逐步升級問題,它不希望存在早期階段的反饋;

(3)在一個系統(tǒng)完成以前,無法預(yù)測一個新系統(tǒng)引入一個機(jī)構(gòu)的影響;

(4)不能恰當(dāng)?shù)匮芯亢徒鉀Q使用系統(tǒng)時的人為因素。

綜上所述,這種模型的特點(diǎn)是階段間具有順序性和依賴性,按步驟進(jìn)行程序的物理實現(xiàn),便于分工合作,文檔便于修改,有復(fù)審質(zhì)量保證,但產(chǎn)品與用戶見面晚,糾錯慢,工期延期的可能性大,需求變化后引起的代價將很高。故該模型適合在軟件需求比較明確、開發(fā)技術(shù)比較成熟、工程管理比較嚴(yán)格的場合下使用。

1.6.2快速原型模型

原型法是為了克服瀑布模型的缺點(diǎn)而提出來的一種改進(jìn)方法。其基本思想是從用戶需求出發(fā),快速構(gòu)建起一個可以在計算機(jī)上運(yùn)行的原型系統(tǒng),用戶可通過這個原型初步表達(dá)出自己的要求,并通過反復(fù)修改、完善,逐步靠近用戶的全部需求,最終形成一個完全滿足用戶要求的新系統(tǒng)。

原型法中,原型即指模擬某種產(chǎn)品的原始模型。一般又把原型分為三種。第一種:拋棄式,目的達(dá)到即被拋棄,原型不作為最終產(chǎn)品;第二種:演化式,系統(tǒng)的形成和發(fā)展是逐步完成的,是高度動態(tài)迭代和高度動態(tài)的,每次迭代都要對系統(tǒng)重新進(jìn)行規(guī)格說明、重新設(shè)計、重新實現(xiàn)和重新評價,是處理變化最為有效的方法,也是與瀑布模型的主要不同點(diǎn);第三種:增量式,系統(tǒng)是一次一段地增量構(gòu)造,與演化式原型的最大區(qū)別在于增量式原型是在軟件總體設(shè)計基礎(chǔ)上進(jìn)行的。很顯然,其處理變化比演化式差。

1.快速原型模型的開發(fā)步驟

快速原型模型的開發(fā)步驟如圖1-7所示。

圖1-7快速原型模型的開發(fā)步驟

2.快速原型方法具有的特點(diǎn)

快速原型方法的特點(diǎn)主要有以下幾點(diǎn):

(1)快速原型是用來獲取用戶需求,或是用來試探設(shè)計是否有效的。一旦需求或設(shè)計確定下來,原型就將被拋棄。因此,快速原型要求快速構(gòu)建、容易修改,以節(jié)約原型創(chuàng)建成本、加快開發(fā)速度。快速原型往往采用一些快速生成工具創(chuàng)建,例如4GL語言。另外,為了盡快向用戶提供原型,開發(fā)原型系統(tǒng)時應(yīng)盡量使用能縮短開發(fā)周期的語言和工具。

(2)原型系統(tǒng)僅包括未來系統(tǒng)的主要功能以及系統(tǒng)的重要接口。

(3)快速原型是暫時使用的,因此并不要求完整。它往往針對某個局部問題建立專門原型,如界面原型、工作流原型、查詢原型等。

(4)快速原型不能貫穿軟件的整個生命周期,它需要和其他的過程模型相結(jié)合才能產(chǎn)生作用。例如,在瀑布模型中應(yīng)用快速原型,可以解決瀑布模型在需求分析時期存在的

不足。

對于小型和中型軟件項目最多達(dá)500000行代碼,采用快速原型模型應(yīng)該是最好的開發(fā)方法。對于大型的、復(fù)雜的系統(tǒng),由于需要不同的開發(fā)團(tuán)隊來開發(fā)系統(tǒng)的不同部分,而采用快速原型模型要建立一個穩(wěn)定成熟的系統(tǒng)體系結(jié)構(gòu)是很困難的,很難實現(xiàn)開發(fā)團(tuán)隊間的協(xié)調(diào)工作和系統(tǒng)集成。

對于大型系統(tǒng)軟件的開發(fā),可采用瀑布模型和快速原型模型的混合開發(fā)方法,將上述兩種模型的優(yōu)點(diǎn)結(jié)合起來。如用快速原型模型方法快速開發(fā)出一個軟件原型供用戶和開發(fā)人員評價,以此來解決軟件定義的不確定性問題;對于軟件需求明確的系統(tǒng)部分,用瀑布模型來開發(fā);其他部分,如用戶界面的設(shè)計,事先定義好是有困難的,這時可用快速原型模型進(jìn)行開發(fā)。

1.6.3演化模型

演化模型(EvolutionaryModel)是一種全局的軟件或產(chǎn)品生存周期模型,屬于迭代開發(fā)方法。該模型可以表示為:第一次迭代(需求→設(shè)計→實現(xiàn)→測試→集成)→反饋→第二次迭代(需求→設(shè)計→實現(xiàn)→測試→集成)→反饋→……,其模型如圖1-8所示。

圖1-8演化模型

演化模型主要針對事先不能完整定義需求的軟件開發(fā)。用戶可以給出待開發(fā)系統(tǒng)的核心需求,并且當(dāng)看到核心需求實現(xiàn)后,能夠有效地提出反饋,以支持系統(tǒng)的最終設(shè)計和實現(xiàn)。軟件開發(fā)人員根據(jù)用戶的需求,首先開發(fā)核心系統(tǒng)。當(dāng)該核心系統(tǒng)投入運(yùn)行后,用戶試用,并提出精化系統(tǒng)、增強(qiáng)系統(tǒng)能力的需求。軟件開發(fā)人員根據(jù)用戶的反饋,實施開發(fā)的迭代過程。每一迭代過程均由需求、設(shè)計、編碼、測試、集成等階段組成,并可為整個系統(tǒng)增加一個可定義的、可管理的子集。

演化模型在開發(fā)模式上采取分批循環(huán)開發(fā)的辦法,每循環(huán)開發(fā)一部分的功能,就讓這部分功能成為這個產(chǎn)品的原型的新增功能。于是,設(shè)計就不斷地演化出新的系統(tǒng)。實際上,這個模型可看作是重復(fù)執(zhí)行的多個瀑布模型。

演化模型要求開發(fā)人員有能力把項目的產(chǎn)品需求分解為不同組,以便分批循環(huán)開發(fā)。這種分組并不是絕對隨意性的,而是要根據(jù)功能的重要性及對總體設(shè)計的基礎(chǔ)結(jié)構(gòu)的影響而作出判斷。有經(jīng)驗指出,每個開發(fā)循環(huán)以六周到八周為適當(dāng)?shù)臅r間長度。

演化模型的特點(diǎn)是通過逐步迭代弄清軟件需求,再建立軟件系統(tǒng),這在一定程度上減少了軟件開發(fā)活動的盲目性。其適合場合為沒有需求或者難以完整定義需求的軟件。注意該模型與快速原型模型之間的區(qū)別。

1.6.4螺旋模型

螺旋模型是將瀑布模型與快速原型模型結(jié)合起來,并且加入風(fēng)險分析,構(gòu)成的具有特色的模型,這種模型彌補(bǔ)了前兩種模型的不足,是演化模型的一種具體形式。螺旋模型將工程劃分為四個主要活動:目標(biāo)、選擇和限制,風(fēng)險評估,開發(fā)和測試,計劃。四個活動螺旋式的重復(fù)執(zhí)行,直到最終得到用戶認(rèn)可的產(chǎn)品,如圖1-9所示。

圖1-9螺旋模型

螺旋模型的基本方法是,在各個階段創(chuàng)建原型進(jìn)行項目試驗,以降低各個階段可能遇到的項目風(fēng)險。例如,為了降低用戶對軟件界面不滿意的風(fēng)險,可以在需求分析階段建立界面原型;為了降低軟件不能按設(shè)計要求實現(xiàn)的風(fēng)險,可以在設(shè)計階段針對所采用的技術(shù)建立仿真試探原型。

在螺旋模型中,軟件開發(fā)過程是一系列的增量發(fā)布,即沿螺線自內(nèi)向外每旋轉(zhuǎn)一圈便開發(fā)出更為完善的一個新的軟件版本。在每一個迭代中,逐步產(chǎn)生系統(tǒng)更加完善的版本。螺旋模型被劃分為若干框架活動,也稱為任務(wù)區(qū)域或環(huán)路。在螺旋模型中,每一個環(huán)路都包括如下四個部分。

1.目標(biāo)、選擇和限制

確定項目的目標(biāo),制定軟件定義和詳細(xì)的項目管理計劃,確定項目的風(fēng)險。

2.風(fēng)險評估

對確定的風(fēng)險進(jìn)行詳細(xì)的分析評估,并采取適當(dāng)?shù)娘L(fēng)險規(guī)避措施。例如,如果風(fēng)險是軟件需求的不確定性,就可以利用快速原型模型開發(fā)一個原型系統(tǒng),通過對原型的評估來明確軟件的需求。

3.開發(fā)和測試

根據(jù)風(fēng)險評估的結(jié)論,確定合適的開發(fā)模型。例如,當(dāng)系統(tǒng)的安全性是主要風(fēng)險時,就采用瀑布模型開發(fā),以保證系統(tǒng)的安全性。

4.計劃

在螺旋模型的一個環(huán)路結(jié)束時,要對項目的計劃進(jìn)行回顧總結(jié),以決定是否進(jìn)入到下一個環(huán)路的開發(fā)中。如果繼續(xù)開發(fā),就要制定項目下一個階段的工作計劃。

螺旋模型是一種引入了風(fēng)險分析和規(guī)避機(jī)制的開發(fā)模型。螺旋模型在每個階段都創(chuàng)建一個原型進(jìn)行項目試驗,以降低各個階段可能遇到的風(fēng)險。但對項目的風(fēng)險進(jìn)行評估分析也是需要費(fèi)用的,因為只有較大型的項目才有較高的風(fēng)險。因此,螺旋模型主要用于大型軟件的開發(fā)。

1.6.5噴泉模型

噴泉模型(FountainModel)是一種以用戶需求為動力,以對象為驅(qū)動的迭代模型,主要用于描述面向?qū)ο蟮能浖_發(fā)過程,其模型如圖1-10所示。噴泉一詞用于形象地表達(dá)面向?qū)ο筌浖_發(fā)過程中的迭代和無縫過渡。

圖1-10噴泉模型

噴泉模型體現(xiàn)了面向?qū)ο筌浖_發(fā)過程的各階段自下而上相互

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論