第1章軟件工程概述2_第1頁
第1章軟件工程概述2_第2頁
第1章軟件工程概述2_第3頁
第1章軟件工程概述2_第4頁
第1章軟件工程概述2_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第1章 軟 件 工 程 概 述2§1.1 軟件工程的產(chǎn)生3§1.軟件工程及其基本原理4.軟件工程定義4.軟件工程的基本原理5§1.3軟件生存期6§1.4軟件工程方法學(xué)81.4.1軟件工程方法學(xué)91.4.2面向?qū)ο蠓椒?1§1.5軟件過程13§1.6軟件工程工具和環(huán)境17§1.7軟件工程學(xué)習(xí)指南19本章小結(jié)20習(xí)題20第1章 軟 件 工 程 概 述本章要點² 軟件工程產(chǎn)生的原因² 軟件工程的基本原理² 軟件工程方法學(xué)和面向?qū)ο蠓椒▽W(xué)基本原理² 軟件過程² 軟件工程有關(guān)工具和環(huán)境

2、本章學(xué)習(xí)目標(biāo)² 了解軟件工程產(chǎn)生的原因² 掌握軟件工程的基本原理² 了解軟件工程方法學(xué)和面向?qū)ο蠓椒▽W(xué)基本原理² 了解軟件過程² 了解軟件工程有關(guān)工具和環(huán)境§1.1 軟件工程的產(chǎn)生軟件工程(Software Engineering)是在克服60年代末所出現(xiàn)的“軟件危機”的過程中逐漸形成與發(fā)展的。在不到40年的時間里,在軟件工程的理論和實踐兩方面都取得了長足的進步。軟件工程是一門指導(dǎo)計算機軟件系統(tǒng)開發(fā)和維護的工程學(xué)科,是一門新興的邊緣學(xué)科,涉及到計算機科學(xué)、工程科學(xué)、管理科學(xué)、數(shù)學(xué)等多學(xué)科,研究的范圍廣,主要研究如何應(yīng)用軟件開

3、發(fā)的科學(xué)理論和工程技術(shù)來指導(dǎo)大型軟件系統(tǒng)的開發(fā)。例如現(xiàn)代操作系統(tǒng)的開發(fā),如果不采用軟件工程的方法是不可能的。在我國加入后,大力推廣、應(yīng)用軟件工程的開發(fā)技術(shù)及管理技術(shù),提高軟件工程的應(yīng)用水平,對促進我國軟件產(chǎn)業(yè)與國際接軌,推動我國軟件產(chǎn)業(yè)的迅速發(fā)展起著十分重要的關(guān)鍵作用。軟件工程的產(chǎn)生和發(fā)展是與軟件的發(fā)展緊密相關(guān)的。自從第一臺計算機誕生以來,就開始了軟件的生產(chǎn),到目前為止,軟件發(fā)展經(jīng)歷了三個階段: 1、程序設(shè)計時代(19461956年)采用“個體生產(chǎn)方式”,即軟件開發(fā)完全依賴于程序員個人的能力水平。2、程序系統(tǒng)時代(19561968年)由于軟件應(yīng)用范圍及規(guī)模的不斷擴大,個體生產(chǎn)已經(jīng)不能夠滿足軟件

4、生產(chǎn)的需要,一個軟件需要由幾個人協(xié)同完成,采用“生產(chǎn)作坊方式”。該階段的后期,隨著軟件需求量、規(guī)模及復(fù)雜度的增大,生產(chǎn)作坊的方式已經(jīng)不能夠適應(yīng)軟件生產(chǎn)的需要,出現(xiàn)所謂“軟件危機”。 3、軟件工程時代(1968年至今) 這階段的主要任務(wù)是為了克服軟件危機,適應(yīng)軟件發(fā)展的需要,而采用“工程化的生產(chǎn)” 方式?!败浖C”(Software  crisis)的出現(xiàn)是由于軟件的規(guī)模越來越大,復(fù)雜度不斷增加,軟件需求量增大。而軟件開發(fā)過程是一種高密集度的腦力勞動,軟件開發(fā)的模式及技術(shù)不能適應(yīng)軟件發(fā)展的需要。致使大量質(zhì)量低劣的軟件涌向市場,有的軟件花費了大量人力財力,卻在開發(fā)過程中就夭折

5、。 例如: IBM公司的OS/360,共約100萬條指令,花費了5000多個人年;經(jīng)費達數(shù)億美圓,而結(jié)果卻令人沮喪,錯誤多達2000個以上,系統(tǒng)根本無法正常運行。OS/360系統(tǒng)的負責(zé)人Brooks這樣描述開發(fā)過程的困難和混亂:“像巨獸在泥潭中作垂死掙扎,掙扎得越猛,泥漿就沾得越多,最后沒有一個野獸能夠逃脫淹沒在泥潭中的命運?!?963年,美國飛往火星的火箭因為一個軟件錯誤而爆炸。1967年8月23日,原蘇聯(lián)”結(jié)盟一號”載人宇宙飛船,也由于忽略了一個小數(shù)點,在進入大氣層時因打不開降落傘而燒毀。“軟件危機”主要表現(xiàn)在兩個方面:(1)軟件產(chǎn)品質(zhì)量低劣,甚至開發(fā)過程就夭折。(2)軟件生產(chǎn)率低,不能滿

6、足需要。軟件工程是一門新興的邊緣學(xué)科,涉及的學(xué)科多,研究的范圍廣。歸結(jié)起來軟件工程研究的主要內(nèi)容有以下兩個方面:1、軟件開發(fā)技術(shù),它包括軟件開發(fā)方法、技術(shù)和軟件開發(fā)工具及環(huán)境、軟件管理技術(shù)。2、軟件規(guī)范(國際規(guī)范)包括:(1)軟件開發(fā)技術(shù)(軟件結(jié)構(gòu)、開發(fā)方法、工具與軟件工程環(huán)境、軟件工程標(biāo)準(zhǔn)化) (2)軟件工程管理(質(zhì)量管理,軟件工程經(jīng)濟學(xué):成本估算,計劃安排) 軟件工程研究的目標(biāo)是“以較少的投資獲取較高質(zhì)量的軟件”。§1.軟件工程及其基本原理軟件工程就是將工程學(xué)原理應(yīng)用于軟件開發(fā)與維護的實踐中來,是人們?yōu)榻鉀Q60年代開始出現(xiàn)的軟件危機中逐步形成和發(fā)展起來的。隨著軟件產(chǎn)品的系列化,軟

7、件開發(fā)的工程化、標(biāo)準(zhǔn)化、產(chǎn)業(yè)化,軟件工程學(xué)成為軟件產(chǎn)業(yè)發(fā)展的重要理論技術(shù)基礎(chǔ)。.軟件工程定義軟件工程是指導(dǎo)計算機軟件開發(fā)和維護的工程學(xué)科。采用工程學(xué)的概念、原理、技術(shù)和方法,把經(jīng)過時間考驗而證明正確的管理技術(shù)和當(dāng)前能夠得到的最好的技術(shù)方法結(jié)合起來開發(fā)與維護軟件,這就是軟件工程。軟件開發(fā)方法的發(fā)展過程可分為3個階段,即程序設(shè)計時代、程序系統(tǒng)時代、軟件過程學(xué)時代。如表11所示,可從名稱、生產(chǎn)方式、質(zhì)量、設(shè)計對象、開發(fā)工具、維護等方面進行比較,了解3個階段各自的特點。從根本上說,軟件工程學(xué)時代擺脫了軟件“個體式”或“作坊式”的生產(chǎn)方法,把軟件作為一種社會產(chǎn)品,并進行批量生產(chǎn)。軟件工程學(xué)研究這種生產(chǎn)過

8、程的有關(guān)基礎(chǔ)理論、方法論和工具系統(tǒng)。下面先說明軟件工程學(xué)的一些主要概念:表11軟件開發(fā)方法的三個發(fā)展階段項 目程序設(shè)計時代程序系統(tǒng)時代軟件工程學(xué)時代名稱程序軟件軟件產(chǎn)品生產(chǎn)方式個人作坊式項目小組軟件組織質(zhì)量取決于個人水平取決于小集團水平生產(chǎn)管理可靠性評價和質(zhì)量控制設(shè)計對象以硬件為中心硬件軟件為中心以軟件為中心開發(fā)工具無無系統(tǒng)工具且個人所有軟件生成器等,為組織所公有維護無由開發(fā)者進行維護,且在設(shè)計中不重視設(shè)計維護問題。設(shè)計制作時均考慮維護問題,維護占成本主要部分,近年已達到80以上。設(shè)計方法沒有系統(tǒng)的方法自頂向下的方法結(jié)構(gòu)化程序設(shè)計及自頂向下和自底向上結(jié)合的方法程序:為了使計算機實現(xiàn)預(yù)期的目的(

9、如解某一算題或控制某一過程)而編排的一系列步驟稱為程序。程序可以用機器指令來編寫,也可以用程序設(shè)計語言來編寫。軟件:計算機的程序加上該程序的各種規(guī)格書或文檔。軟件方法是以大型程序為研究對象的。相應(yīng)文檔是軟件的核心之一。軟件工程:生產(chǎn)軟件的工程。研究軟件工程的學(xué)問叫軟件工程學(xué)(有時人們也把軟件工程學(xué)簡稱為軟件工程)。在某些書中,軟件工程也稱為軟件產(chǎn)品工程學(xué)和軟件生產(chǎn)管理法。軟件可靠性:軟件在所給條件下和規(guī)定時間內(nèi),能完成所要求的功能的性質(zhì)。軟件可靠度:軟件在所給條件下和規(guī)定時間中,能完成所要求功能的概率。很明顯軟件可靠性和硬件可靠性完全不同。對硬件而言,經(jīng)過早期的故障排除之后,它穩(wěn)定在一定的故障

10、頻率范圍內(nèi),這個期間的故障是隨機的。使用若干年后,故障率增大。但對軟件而言,不存在由于工作中的損耗而發(fā)生故障。軟件的故障差不多均是在設(shè)計、制作階段中已存在但未被發(fā)現(xiàn)的。因此,只有通過維護才可能使軟件可靠度隨時間增加而增加。.軟件工程的基本原理 自從1968年在聯(lián)邦德國召開的國際會議上正式提出并使用了“軟件工程”這個術(shù)語以來,研究軟件工程的專家學(xué)者們陸續(xù)提出了100多條關(guān)于軟件工程的準(zhǔn)則或“信條”。著名的軟件工程專家BWBoehm綜合這些學(xué)者們的意見并總結(jié)了TRW公司多年開發(fā)軟件的經(jīng)驗,于1983年在一篇論文中提出了軟件工程的七條基本原理。他認為這七條原理是確保軟件產(chǎn)品質(zhì)量和開發(fā)效率的原理的最小

11、集合。這七條原理是互相獨立的,其中任意六條原理的組合都不能代替另一條原理,因此,它們是缺一不可的最小集合,然而這七條原理又是相當(dāng)完備的,人們雖然不能用數(shù)學(xué)方法嚴(yán)格證明它們是一個完備的集合,但是,可以證明在此之前已經(jīng)提出的100多條軟件工程原理都可以由這七條原理的任意組合蘊含或派生。 下面簡要介紹軟件工程的七條基本原理: 1用分階段的生命周期計劃嚴(yán)格管理 有人經(jīng)統(tǒng)計發(fā)現(xiàn),在不成功的軟件項目中有一半左右是由于計劃不周造成的,可見把建立完善的計劃作為第一條基本原理是吸取了前人的教訓(xùn)而提出來的。在軟件開發(fā)與維護的漫長的生命周期中,需要完成許多性質(zhì)各異的工作。這條基本原理意味著,應(yīng)該把軟件生命周期劃分成

12、若干個階段,并相應(yīng)地制定出切實可行的計劃,然后嚴(yán)格按照計劃對軟件的開發(fā)與維護工作進行管理。Boehm認為,在軟件的整個生命周期中應(yīng)該制定并嚴(yán)格執(zhí)行六類計劃,它們是項目概要計劃,里程碑計劃,項目控制計劃,產(chǎn)品控制計劃,驗證計劃,運行維護計劃。 不同層次的管理人員都必須嚴(yán)格按照計劃各盡其職地管理軟件開發(fā)與維護工作,絕不能受客戶或上級人員的影響而擅自背離預(yù)定計劃。 2堅持進行階段評審 當(dāng)時已經(jīng)認識到,軟件的質(zhì)量保證工作不能等到編碼階段結(jié)束之后再進行。這樣說至少有兩個理由:第一,大部分錯誤是在編碼之前造成的,例如,根據(jù)Boehm等人的統(tǒng)計,設(shè)計錯誤占軟件錯誤的63,編碼錯誤僅占37;第二,錯誤發(fā)現(xiàn)與改

13、正得越晚,所需付出的代價也越高。因此,在每個階段都進行嚴(yán)格的評審,以便盡早發(fā)現(xiàn)在軟件開發(fā)過程中所犯的錯誤,是一條必須遵循的重要原則。 3實行嚴(yán)格的產(chǎn)品控制 在軟件開發(fā)過程中不應(yīng)隨意改變需求,因為改變一項需求往往需要付出較高的代價。但是,在軟件開發(fā)過程中改變需求又是難免的,由于外部環(huán)境的變化,相應(yīng)地改變用戶需求是一種客觀需要,顯然不能硬性禁止客戶提出改變需求的要求,而只能依靠科學(xué)的產(chǎn)品控制技術(shù)來順應(yīng)這種要求也就是說,當(dāng)需求改變時,為了保持軟件各個配置成分的一致性,必須實行嚴(yán)格的產(chǎn)品控制,其中主要是實行基準(zhǔn)配置管理。所謂基準(zhǔn)配置又稱為基線配置,它們是經(jīng)過階段評審后的軟件配置成分(各個階段產(chǎn)生的文檔

14、或程序代碼)?;鶞?zhǔn)配置管理也稱為變動控制:一切有關(guān)修改軟件的建議,特別是涉及到對基準(zhǔn)配置的修改建議,都必須按照嚴(yán)格的規(guī)程進行評審,獲得批準(zhǔn)以后才能實施修改。絕對不能誰想修改軟件(包括尚在開發(fā)過程中的軟件),就隨意進行修改。4采用現(xiàn)代程序設(shè)計技術(shù) 從提出軟件工程的概念開始,人們一直把主要精力用于研究各種新的程序設(shè)計技術(shù)。60年代末提出的結(jié)構(gòu)程序設(shè)計技術(shù),已經(jīng)成為絕大多數(shù)人公認的先進的程序設(shè)計技術(shù)。以后又進一步發(fā)展出各種結(jié)構(gòu)分析(SA)與結(jié)構(gòu)設(shè)計(SD)技術(shù)。實踐表明,采用先進的技術(shù)既可提高軟件開發(fā)的效率,又可提高軟件維護的效率。 5結(jié)果應(yīng)能清楚地審查 軟件產(chǎn)品不同于一般的物理產(chǎn)品,它是看不見摸不

15、著的邏輯產(chǎn)品。軟件開發(fā)人員(或開發(fā)小組)的工作進展情況可見性差,難以準(zhǔn)確度量,從而使得軟件產(chǎn)品的開發(fā)過程比一般產(chǎn)品的開發(fā)過程更難于評價和管理。為了提高軟件開發(fā)過程的可見性,更好地進行管理,應(yīng)該根據(jù)軟件開發(fā)項目的總目標(biāo)及完成期限,規(guī)定開發(fā)組織的責(zé)任和產(chǎn)品標(biāo)準(zhǔn),從而使得所得到的結(jié)果能夠清楚地審查。6開發(fā)小組的人員應(yīng)該少而精 這條基本原理的含義是,軟件開發(fā)小組的組成人員的素質(zhì)應(yīng)該好,而人數(shù)則不宜過多。開發(fā)小組人員的素質(zhì)和數(shù)量是影響軟件產(chǎn)品質(zhì)量和開發(fā)效率的重要因素。素質(zhì)高的人員的開發(fā)效率比素質(zhì)低的人員的開發(fā)效率可能高幾倍至幾十倍,而且素質(zhì)高的人員所開發(fā)的軟件中的錯誤明顯少于素質(zhì)低的人員所開發(fā)的軟件中的

16、錯誤。此外,隨著開發(fā)小組人員數(shù)目的增加,因為交流情況討論問題而造成的通信開銷也急劇增加。當(dāng)開發(fā)小組人員數(shù)為N時,可能的通信路徑有N(N一1)2條,可見隨著人數(shù)N的增大,通信開銷將急劇增加。因此,組成少而精的開發(fā)小組是軟件工程的一條基本原理。7承認不斷改進軟件工程實踐的必要性遵循上述六條基本原理,就能夠按照當(dāng)代軟件工程基本原理實現(xiàn)軟件的工程化生產(chǎn),但是,僅有上述六條原理并不能保證軟件開發(fā)與維護的過程能趕上時代前進的步伐,能跟上技術(shù)的不斷進步。因此,Boehm提出應(yīng)把承認不斷改進軟件工程實踐的必要性作為軟件工程的第七條基本原理。按照這條原理,不僅要積極主動地采納新的軟件技術(shù),而且要注意不斷總結(jié)經(jīng)驗

17、,例如,收集進度和資源耗費數(shù)據(jù),收集出錯類型和問題報告數(shù)據(jù)等等。這些數(shù)據(jù)不僅可以用來評價新的軟件技術(shù)的效果而且可以用來指明必須著重開發(fā)的軟件工具和應(yīng)該優(yōu)先研究的技術(shù)。§1.3軟件生存期軟件生存期又稱軟件生命周期,是指一個軟件系統(tǒng)從目標(biāo)提出到最后丟棄的整個過程。軟件工程基本原理強調(diào)軟件生命周期的階段性,其基本思想是各階段任務(wù)相對獨立,具有明確的完成標(biāo)志。階段的劃分使得人員分工職責(zé)清楚,項目進度控制和軟件質(zhì)量得到確認。原則上,前一階段任務(wù)的完成是后一階段工作的前提和基礎(chǔ);而后一階段的任務(wù)則是對于前一階段問題求解方法的具體化。為了描述軟件生存期的活動,提出了多種生存期模型: 例如:瀑布模型

18、、循環(huán)模型、演化模型、螺旋模型等。整個軟件生命周期可以劃分為三個階段,即軟件定義、系統(tǒng)實現(xiàn)和運行維護。一般用經(jīng)典的瀑布模型來描述。瀑布模型如圖所示。GB 8567中規(guī)定,軟件生命周期分為7個階段: 1、可行性研究和項目開發(fā)計劃 2、 需求分析3、概要設(shè)計 4、 詳細設(shè)計5、編碼 6、 測試7、維護在大部分文獻中將生存周期劃分為5個階段,即要求定義、設(shè)計、編碼、測試及維護。其中要求定義階段包括可行性研究和項目開發(fā)計劃、需求分析,設(shè)計階段包括概要設(shè)計和詳細設(shè)計。下面扼要地介紹一下軟件生存周期每個階段的基本任務(wù)和結(jié)束標(biāo)準(zhǔn)。 一、問題定義問題定義階段必須回答的關(guān)鍵問題是:“要解決的問題是什么?”因此,

19、分析員通過對系統(tǒng)的實際用戶和使用部門負責(zé)人的訪問調(diào)查,扼要地寫出他們對問題的理解,并在用戶和使用部門負責(zé)人的會議上認真討論這份書面報告,澄清含糊不清的地方,改正理解不正確的地(目標(biāo)與范圍說明書)(需求說明書)(設(shè)計文檔)(程序)(測試報告)(維護報告)(可行性論證報告)問題定義測試運行維護可行性分析需求分析設(shè)計編程設(shè)計時期開發(fā)時期運行時期圖1.1軟件生命周期的階段劃分方,最后得到一份雙方都滿意的文檔,此文檔中系統(tǒng)分析員應(yīng)該寫明問題的性質(zhì)、工程目標(biāo)和規(guī)模。問題定義階段是軟件生存周期中最簡短的階段,一般只需一天甚至更少的時間。二、可行性研究此階段的任務(wù)不是具體解決問題,而是研究問題的范圍,探索這個

20、問題是否值得去解決,是否有可行的解決辦法。在這個階段,系統(tǒng)分析員應(yīng)該導(dǎo)出系統(tǒng)的高層邏輯模型,并且在此基礎(chǔ)上更準(zhǔn)確、更具體地確定工程規(guī)模和目標(biāo)。然后分析員更準(zhǔn)確地估計系統(tǒng)的成本和效益,對建議的系統(tǒng)進行仔細的成本效益分析,這是這個階段的主要任務(wù)之一??尚行匝芯康慕Y(jié)果是使用部門負責(zé)人做出是否繼續(xù)進行這項工程的決定的重要依據(jù)。三、需求分析這個階段的任務(wù),主要是確定目標(biāo)系統(tǒng)必須具備哪些功能。因此,系統(tǒng)分析員在需求分析階段必須和用戶密切配合,充分交流信息,以得出經(jīng)過用戶確認的系統(tǒng)邏輯模型。通常用數(shù)據(jù)流圖根據(jù)字典和簡要的算法描述表示系統(tǒng)的邏輯模型。需求分析階段確定的系統(tǒng)邏輯模型,是以后設(shè)計和實現(xiàn)目標(biāo)系統(tǒng)的基

21、礎(chǔ),因此必須準(zhǔn)確完整地體現(xiàn)用戶的要求。四、總體設(shè)計這個階段必須回答的關(guān)鍵問題是:“應(yīng)該如何解決這個問題?” 首先應(yīng)該考慮幾種可能的解決方案,一般包括:1低成本的解決方案。系統(tǒng)只能完成最必要的工作,不能多做一點額外的工作。 2中等成本的解決方案,這樣的系統(tǒng)不僅能夠很好地完成預(yù)定的任務(wù),使用起來很方便,而且可能還具有用戶沒有具體指定的某些功能和特點。 3高成本的“十全十美”的系統(tǒng)。這樣的系統(tǒng)具有用戶可能希望有的所有功能和特點。系統(tǒng)分析員應(yīng)該使用系統(tǒng)流程圖或其他工具描述每種可能的系統(tǒng),估計每種方案的成本和效益;還應(yīng)該在充分權(quán)衡各種方案利弊的基礎(chǔ)上,推薦一個較好的系統(tǒng),并且制定實現(xiàn)所推薦的系統(tǒng)的詳細計

22、劃。 要完成上述任務(wù),通常采用結(jié)構(gòu)設(shè)計的一條基本原理就是程序應(yīng)該模塊化,因此,總體設(shè)計還應(yīng)設(shè)計軟件的結(jié)構(gòu),通常用軟件結(jié)構(gòu)圖表示。五、詳細設(shè)計 詳細設(shè)計階段的任務(wù)就是把解法具體化,設(shè)計出程序的詳細規(guī)格說明,包括必要的細節(jié),程序員可以根據(jù)它們寫出實際的程序代碼。 通常用程序流程圖,NS圖,PAD圖,IPO圖或PDI_語言描述詳細設(shè)計的結(jié)果。六、編碼和單元測試 這個階段的任務(wù)是程序員根據(jù)目標(biāo)系統(tǒng)的性質(zhì)和實際環(huán)境,選取一種適當(dāng)?shù)母呒壋绦蛟O(shè)計語言(必要時用匯編語言),把詳細設(shè)計的結(jié)果翻譯成用選定的語言書寫的程序,并且仔細測試編寫出的每一個模塊。 程序員在書寫程序模塊時,應(yīng)使它的可讀性、可理解性和可維護性

23、良好。七、綜合測試 這個階段的任務(wù)是通過各種類型的測試,使軟件達到預(yù)定的要求。 最基本的測試是集成測試和驗收測試。集成測試是根據(jù)設(shè)計的軟件結(jié)構(gòu),把經(jīng)單元測試的模塊按某種選定的策略裝配起來,在裝配過程中對程序進行必要的測試。驗收測試是按照需求規(guī)格說明書的規(guī)定,由用戶對目標(biāo)系統(tǒng)進行驗收。 通過對軟件測試結(jié)果的分析可以預(yù)測軟件的可靠性;反之,根據(jù)對軟件可靠性的要求也可以決定測試和調(diào)試過程什么時候可以結(jié)束。 在進行測試的過程中,應(yīng)該用正式的文檔把測試計劃、詳細測試方案以及實際測試結(jié)果保存下來,作為軟件配置的一部分。八、軟件維護 維護階段的任務(wù),是通過各種必要的維護活動使系統(tǒng)持久地滿足用戶的需要。 通常

24、維護活動有四類:改正性維護,即診斷和改正在系統(tǒng)使用過程中發(fā)現(xiàn)的軟件錯誤;適應(yīng)性維護,即修改軟件以適應(yīng)環(huán)境的變化;完善性維護,即根據(jù)用戶的要求改進或擴充軟件使它更完善;預(yù)防性維護,即修改軟件為將來的維護活動預(yù)先做準(zhǔn)備。 每一項維護活動都應(yīng)該準(zhǔn)確地記錄下來,作為正式的文檔資料加以保存。 軟件的生存周期劃分為上述8個階段,前3個階段稱為軟件的定義階段,第4至第7個階段稱為軟件的開發(fā)階段,最后一個階段稱為軟件的維護階段。在軟件開發(fā)期間,測試的工作量最大,約占總開發(fā)量的40;而軟件的維護階段周期最長,工作量非常大。 軟件系統(tǒng)的研制工作,不可能是直線進行,研制人員常常需從后面階段回復(fù)到前面。為了減少返工現(xiàn)

25、象,研制人員通常在各個階段進行階段復(fù)審,以確保研制工作順序進行。 在軟件生存周期的各個階段完成研制任務(wù)后,應(yīng)提交各階段的格式文檔資料。§1.4軟件工程方法學(xué)軟件開發(fā)的目標(biāo)就是在規(guī)定的投資和時間限制內(nèi),開發(fā)出符合用戶需求的高質(zhì)量軟件。軟件開發(fā)是一種高智能的活動,必須用軟件工程的方法和技術(shù)指導(dǎo)軟件開發(fā)的全過程。1.4.1軟件工程方法學(xué)已經(jīng)提出的各種軟件開發(fā)方法和技術(shù),對軟件工程的發(fā)展和軟件產(chǎn)業(yè)的進步,起到了不可估量的積極作用。各種的開發(fā)方法和技術(shù)可歸納為三大類:瀑布型模型、原型化模型和變換型。一、軟件開發(fā)的瀑布型模型嚴(yán)格按照軟件生命周期的階段劃分,順序執(zhí)行各階段構(gòu)成軟件開發(fā)的瀑布型模型,

26、。瀑布模型的特點是:1階段間具有順序性和依賴性順序性要求每個階段工作開始的前提是其上一階段工作結(jié)束。因此前一階段輸出的文檔就是其后一階段的輸入文檔。依賴性是指各階段工作正確性依賴與上一階段工作的正確性。因此當(dāng)某一階段的工作出現(xiàn)問題時不僅要考察本階段的工作,還必須追溯前面階段的工作。2推遲實現(xiàn)的觀點軟件開發(fā)失敗的許多實例都是軟件人員急于系統(tǒng)編碼實現(xiàn)。編碼開始的越早,項目完成的時間很可能越長。這是因為過早進入編碼往往意味著大量的返工。因此瀑布型模型明確要求在項目前期,即需求分析和總體設(shè)計階段只考慮系統(tǒng)的邏輯模型,不涉及系統(tǒng)物理實現(xiàn)。即詳細設(shè)計,其重點也是數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計,要求僅僅用圖形或者偽碼描

27、述。因此,直到設(shè)計結(jié)束,軟件開發(fā)人員考慮的主要是系統(tǒng)邏輯實現(xiàn)模型。將系統(tǒng)邏輯設(shè)計與物理實現(xiàn)嚴(yán)格分開,盡可能的推遲物理實現(xiàn),這是瀑布型模型的一個重要指導(dǎo)思想。3質(zhì)量保證的觀點為保證軟件開發(fā)質(zhì)量,瀑布型模型在生命周期的各階段強調(diào):第一,制作規(guī)定的文檔是各階段完成的里程碑,沒有交出合格的文檔也就沒有完成該階段的任務(wù)。完整、準(zhǔn)確的文檔即是軟件開發(fā)過程中各類人員之間相互通信的媒介,也是將來軟件維護的重要依據(jù)。進度管理和軟件管理也是階段評審的對象和依據(jù)。第二,每個階段結(jié)束之前都必須對完成的文檔進行評審,以便及早發(fā)現(xiàn)問題,改正錯誤。愈是早期潛伏的故障,暴露的時間愈晚,則排除該故障付出的代價愈高。對每階段文檔

28、的評審,是保證軟件質(zhì)量,降低軟件成本的重要措施。隱含在瀑布型模型各階段任務(wù)后面的指導(dǎo)思想和觀點是軟件工程的根本性質(zhì)。只要在軟件開發(fā)中明確這些觀點,才能將軟件開發(fā)與程序設(shè)計區(qū)別開來,才能在軟件開發(fā)中發(fā)揮主動性和自覺性,使軟件工程方法得到恰當(dāng)?shù)膽?yīng)用。瀑布型模型是6070年代為克服軟件危機提出的主要軟件開發(fā)模型,它在糾正軟件開發(fā)人員的錯誤觀點,認識軟件開發(fā)與程序設(shè)計的本質(zhì)區(qū)別,在克服軟件危機方面能起到一定作用。對于技術(shù)成熟的項目開發(fā)應(yīng)用瀑布型模型是十分有效的。但是對于有一定技術(shù)風(fēng)險的項目,人們的認識不可能在項目早期階段就完全符合客觀實際。軟件生命周期的每個階段都可能犯錯誤,完全按照瀑布型模型的階段劃

29、分進行軟件開發(fā),前一階段遺留的錯誤必然導(dǎo)致后一階段工作結(jié)果中也存在相應(yīng)錯誤。在軟件生命周期的各階段中的錯誤會積累放大。所謂“瀑布”即是指錯誤傳遞的“瀑布”,為發(fā)現(xiàn)和改正錯誤必須向前的追溯。因此,在工程實踐中,許多嚴(yán)格按照瀑布型模型開發(fā)的項目常常交付的是“遺憾的”系統(tǒng)。二、原型化開發(fā)模型瀑布型模型的缺陷在于軟件開發(fā)階段推進是直線型的,工程實踐說明這是一個“理想化”模型,不完全符合人們認識問題的規(guī)律。只有當(dāng)分析員能夠做出完整準(zhǔn)確的需求分析時軟件 開發(fā)才可能少走彎路。不幸的是,在軟件計劃時期定義的用戶需求常常是不完全和不準(zhǔn)確的。軟件開發(fā)初期,分析員對用戶業(yè)務(wù)領(lǐng)域的了解往往并不深入。許多用戶對于“計算

30、機可以做什么?目標(biāo)系統(tǒng)應(yīng)該實現(xiàn)那些功能?”通常只有一個總體的,輪廓并不分明的要求。有人斷言:“對軟件產(chǎn)品的某個版本試用之前,要求用戶(即使有軟件工程師配合)完全,精確和正確地對該產(chǎn)品提出確切地需求,在實際上是不可能的。”在硬件產(chǎn)品開發(fā)中,常常先設(shè)計實現(xiàn)一個產(chǎn)品原型(即所謂“樣機”)。這樣可以對“樣機”的各功能、性能進行評價,測試。通過對“樣機”的不斷修改完善,成功后再投人批量生產(chǎn)。借助這種產(chǎn)品開發(fā)模式,在事先不能完整準(zhǔn)確定義需求的軟件開發(fā)時,提出了軟件產(chǎn)品的原型化開發(fā)方法。其主要思想是:先建立一個能夠反映用戶需求的原型系統(tǒng)(“樣機”),使得用戶和開發(fā)者可以對目標(biāo)系統(tǒng)的概貌進行評價、判斷。然后對

31、原型進行若干輪反復(fù)的擴充、改進、求精,最終建立完全符合用戶需求的目標(biāo)系統(tǒng)。原型化開發(fā)過程如圖1.2所示。原始用戶需求初始原型快速生成評價確認實驗性原型進化最終確認目標(biāo)系統(tǒng)實現(xiàn)目標(biāo)系統(tǒng)測試系統(tǒng)交付展示理解溝通補充確認優(yōu)化圖1.2 原型開發(fā)過程初始原型可以非常簡單,它只實現(xiàn)未來系統(tǒng)的主要功能,系統(tǒng)主要模塊之間的重要接口。初始原型主要用于向用戶展示系統(tǒng)功能概貌。確認開發(fā)人員對系統(tǒng)主要功能的理解。對系統(tǒng)應(yīng)該具備的功能的演示運行通常可以對用戶與開發(fā)人員之間的溝通起到催化劑作用,確立用戶對項目開發(fā)的信心。 基于初始原型的評價可以建立實驗性進化原型。利用實驗性進化原型可以不斷激發(fā)好的設(shè)計思想,對用戶具體需求

32、進行確認和補充,對系統(tǒng)的關(guān)鍵性能細節(jié)(如數(shù)據(jù)采樣的精度與實時性能,數(shù)據(jù)通信的可靠性,資源沖突的處理策略等)進行評價優(yōu)化。實驗性進化原型的建立是一個逐步迭代的增量過程,每次迭代的新版本應(yīng)該具有更強的功能,更優(yōu)的性能。 當(dāng)實驗性進化原型得到最終確認以后,開發(fā)進入目標(biāo)系統(tǒng)的實現(xiàn)階段:將原型轉(zhuǎn)換為完全符合系統(tǒng)運行環(huán)境要求的目標(biāo)系統(tǒng),并進行最終集成和驗收測試。 一個項目的原型系統(tǒng)與目標(biāo)系統(tǒng)主要區(qū)別是:原型的每次實現(xiàn)要求“快”,成本要低。原型通常是用適當(dāng)?shù)能浖ぞ?例如第四代語言)快速實現(xiàn)的。對于系統(tǒng)實現(xiàn)的枝節(jié)問題,例如系統(tǒng)的出錯處理,系統(tǒng)支持、運行資源開銷優(yōu)化問題等在原型中可以不作過多考慮。而目標(biāo)系統(tǒng)可

33、能要求精雕細刻,反復(fù)求精。由原型轉(zhuǎn)化為目標(biāo)系統(tǒng)的途徑有: (1)拋棄原型法:建立原型系統(tǒng)的目的主要是準(zhǔn)確定義系統(tǒng)需求,嚴(yán)格驗證方案設(shè)計。原型使用完畢后拋棄,然后在重新建立目標(biāo)系統(tǒng)。應(yīng)用拋棄原型法建立原型的過程相當(dāng)于瀑布型模型的需求分析和總體設(shè)計過程。(2)演化原型法:目標(biāo)系統(tǒng)是對實驗性原型不斷擴充、完善迭代的結(jié)果。每次迭代都要求再分析、再設(shè)計、再實現(xiàn)以及再測試評價。當(dāng)認為問題求解基本滿意時就可以交付系統(tǒng)的初始版本了。演化原型法的實施要求用戶和開發(fā)人員在一個相當(dāng)長的時期中對信息交流和系統(tǒng)修改持一種開放的態(tài)度。許多面向市場的軟件產(chǎn)品采用所謂版發(fā)布,就是施行演化原型法開發(fā)的一種策略。瀑布型模型中推遲

34、實現(xiàn)的觀點要求軟件開發(fā)人員與用戶之間反復(fù)地“紙上談兵”。相比之下,“快速”原型實現(xiàn)的要求則是“真槍實彈”。通過原型運行,用戶能夠容易地判斷它是否真正滿足自己的要求,同時軟件開發(fā)人員也可以實際的評價系統(tǒng)設(shè)計,迅速做出“需求反饋”,盡可能早地發(fā)現(xiàn)需求確認、系統(tǒng)結(jié)構(gòu)中存在的問題,及時予以改進。這是原型化開發(fā)模型的最大優(yōu)點。實施原型方法的前提是必須要求適當(dāng)?shù)能浖ぞ呋蛘哕浖_發(fā)環(huán)境的支持。因為原型迭代頻繁,相應(yīng)文檔配置必須一致。沒有能夠快速實現(xiàn)原型和文檔生成的支持系統(tǒng),原型化開發(fā)過程極可能蛻化為“史前時期”無序、低效、成本失控的軟件開發(fā)過程。 三、變換型 變換型開發(fā)方法是一種形式化軟件開發(fā)方法。它從軟

35、件需求的形式化規(guī)格說明出發(fā),經(jīng)過一系列的程序變換,得到最終的程序系統(tǒng)。軟件需求形式化規(guī)格說明,也往往經(jīng)過原型檢查和確認。如能保證形式化規(guī)格說明是正確的,在逐級變換中所使用的變換規(guī)則是保持正確性的變換規(guī)則,那么就可確認,變換最后所得到的程序系統(tǒng)一定是正確的。 變換型開發(fā)方法必須有嚴(yán)格的數(shù)學(xué)理論和形式化技術(shù)的支持,目前這種開發(fā)方法尚處于研究和實驗階段。1.4.2面向?qū)ο蠓椒▊鹘y(tǒng)的瀑布型模型和原型化模型中,關(guān)于問題求解的基本策略是以“自上而下,逐步求精,單人單出”為核心的結(jié)構(gòu)化方法。結(jié)構(gòu)化方法在控制問題求解的規(guī)模和復(fù)雜度,提高軟件系統(tǒng)的易理解性方面起到了重要作用。但是結(jié)構(gòu)化方法必須將現(xiàn)實世界問題進行

36、“結(jié)構(gòu)化”,不能解決軟件重用問題。不同人員開發(fā)的軟件產(chǎn)品,即使運行環(huán)境相同,功能彼此類似,除少數(shù)標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)和輸入輸出過程外,其大部分代碼必須編寫。大量軟件技術(shù)人員在從事著基本重復(fù)的勞動;對同一問題,“結(jié)構(gòu)化”的結(jié)果可能并不相同。這是軟件生產(chǎn)效率低下,質(zhì)量難以保證的重要原因。數(shù)據(jù)分量集方法實現(xiàn)方法消息圖1.3對象的基本概念面向?qū)ο蠓椒▽W(xué)的基本思想是,在問題求解過程中,應(yīng)該盡可能符合人類習(xí)慣的思維方式。軟件開發(fā)的方法應(yīng)該過程與人類認識世界解決問題習(xí)慣的方法與過程接近,也就是使描述問題的問題空間與問題求解的解空間在結(jié)構(gòu)上盡可能一致。其基本思想如圖1.3所示。 客觀世界的問題都是由客觀世界中的實體和

37、實體之間的相互聯(lián)系構(gòu)成的。對象(Object)是客觀世界中的實體在問題域中的抽象。因此對象可以是一個公司,一個職員,或者銀行柜臺的一次交易,圖書館中的一本書籍。應(yīng)該將什么抽象為問題域中的對象,由要求解決的問題決定。 對象的概念是抽象數(shù)據(jù)類型概念的發(fā)展。傳統(tǒng)的結(jié)構(gòu)化設(shè)計中,客觀世界中的實體在計算機世界中的抽象是各種基類型變量(如整型,實型,布爾等)、數(shù)組、記錄、文件等。在程序中,通過對于這些數(shù)據(jù)對象施加外部操作來模擬實體行為以及實體之間的相互作用,即數(shù)據(jù)和對數(shù)據(jù)的操作是相對獨立的。面向?qū)ο蟮姆椒ǖ幕境霭l(fā)點是,將描述實體對象靜態(tài)屬性的數(shù)據(jù)與描述實體動態(tài)行為的操作統(tǒng)一為一個不可分割的整體。具體地說

38、,對象與傳統(tǒng)數(shù)據(jù)類型的區(qū)別在于: (1)對象不是被動地等待外部對其施加操作。對象是進行操作的主體,通過消息發(fā)送請求對象主動地執(zhí)行某些操作,處理其私有數(shù)據(jù)。 (2)傳統(tǒng)程序系統(tǒng)是工作在數(shù)據(jù)集上的一組函數(shù)、過程集合。面向?qū)ο蠓椒ㄌ岢龅摹皩ο蟆备拍?,要求將軟件系統(tǒng)看作一組離散的對象集合,對象之間通過消息發(fā)送相互作用來實現(xiàn)問題求解。對象的任何私有成分,外部不得訪問。 面向?qū)ο蟮姆椒▽W(xué)可以概括為:面向?qū)ο蟮姆椒?對象+類+繼承+消息通信(1)客觀世界是由各種對象組成的。對象是可以分解的:復(fù)雜對象可以由比較簡單的對象組合構(gòu)成。因此面向?qū)ο蟮能浖到y(tǒng)是若干對象的有機集合。(2)所有對象按其結(jié)構(gòu)成分,可以劃分

39、為各種對象類。一個基本對象類由一組數(shù)據(jù)類型分量和一組方法組成(如圖1.3)。對象的數(shù)據(jù)分量描述了對象的靜態(tài)屬性(狀態(tài)信息),方法則描述對象的動態(tài)行為。程序中的每個對象都是已定義對象類的一個對象實例(Instance)。例如一個圓對象由圓心坐標(biāo)、圓半徑做為其數(shù)據(jù)分量,而畫圓可以作為其方法。(3)一個對象類可以從已定義的其他對象類中繼承(Inheritance)某些成分或者整個對象類。這種繼承了其他對象類的類稱為派生類,而被繼承的類稱為該類的基類。由此,一個程序系統(tǒng)的對象類集合構(gòu)成一個對象層次結(jié)構(gòu)。(4)局部于一個對象的私有成分都被“封裝”在對象內(nèi)部,外部不能訪問。對象之間僅能通過消息傳遞互相作用

40、。一切局部于該對象的私有信息,都被封裝在該對象類的定義中,就好像裝在一個不透明的黑盒子中一樣,在外界是看不見的更不能直接使用,這就是“封裝性”。 為快速建立原型,需要適當(dāng)?shù)能浖ぞ?。目前支持快速原型生成的流行工具是第四代語言。實際上許多第四代語言都是基于面向?qū)ο蟮姆椒▽W(xué)的。 無論使用什么方法學(xué)開發(fā)軟件,必須完成的工作要素是:“做什么”,“怎么做”,“實現(xiàn)”,“確認”。不同開發(fā)模式安排這些工作要素的順序和相對重要性可能不同,但不能忽略其中的任何一個要素。面向?qū)ο蟮姆椒▽W(xué)的工作重點放在生命周期的分析階段。在分析階段定義一系列面向問題的對象,并且在整個開發(fā)中以這些對象為中心,其他概念(如功能,關(guān)系,

41、事件等)都圍繞“對象”組織。分析階段得到的對象模型也適用于設(shè)計和實現(xiàn)階段。由于這個階段使用統(tǒng)一的概念、符號,從而實現(xiàn)了軟件開發(fā)各階段的“無縫”連接,保證了目標(biāo)系統(tǒng)的一致性。因此“面向?qū)ο蟆笔且环N對問題分析定義和軟件系統(tǒng)構(gòu)造的方法學(xué),它可以用于瀑布型模型,但更適用于原型化開發(fā)模型。 面向?qū)ο蠓椒ǖ闹饕獌?yōu)點是: (1)使用現(xiàn)實世界的概念抽象地思考問題從而自然地解決問題。面向?qū)ο蠓椒◤娬{(diào)使用對象模擬現(xiàn)實世界中的概念而不是算法,鼓勵人們在軟件開發(fā)的絕大部分過程中用應(yīng)用領(lǐng)域的概念去思考。開發(fā)過程始終圍繞建立問題的對象模型進行,使得問題求解結(jié)構(gòu)盡可能地是問題定義結(jié)構(gòu)“自然延伸”。這種問題定義與求解的一致性

42、從根本上保證了軟件系統(tǒng)的易理解性,這是軟件質(zhì)量保證的前提。 人們認識客觀世界求解問題的過程是在繼承以前有關(guān)知識基礎(chǔ)上,經(jīng)過一般到特殊,特殊到一般的多次反復(fù),逐步深化。面向?qū)ο蠓椒ㄖ械睦脤ο箢惗x對象實例的過程反映了一般到特殊的演繹過程;從基類到派生類的層次等級框架,則反映了從特殊到一般的類型抽象的實現(xiàn)。 (2)保證軟件系統(tǒng)的穩(wěn)定性。傳統(tǒng)軟件開發(fā)以算法為核心,開發(fā)過程基于功能分析。因此所建立的軟件系統(tǒng)的結(jié)構(gòu)緊密依賴于系統(tǒng)的功能需求,當(dāng)功能需求發(fā)生變化時可能要求軟件結(jié)構(gòu)的整體變動。因此這樣的軟件系統(tǒng)缺乏穩(wěn)定性。 面向?qū)ο蠓椒ɑ跇?gòu)造問題的對象模型,以對象為中心構(gòu)造軟件系統(tǒng)。當(dāng)系統(tǒng)功能需求發(fā)生變化

43、時往往僅需要修改與之相關(guān)的對象類。這通常只需要從已有的對象類派生出新的子類或者修改、刪除某些對象等等。由于現(xiàn)實世界的實體是相對穩(wěn)定的,因此以對象為中心構(gòu)造的軟件系統(tǒng)也比較穩(wěn)定 (3)軟件系統(tǒng)具有可重用性。機械工程中采用已有的預(yù)制部件裝配新的產(chǎn)品是典型的重用技術(shù)。傳統(tǒng)軟件重用技術(shù)主要是利用標(biāo)準(zhǔn)函數(shù)庫。實踐說明標(biāo)準(zhǔn)函數(shù)庫缺乏靈活性,往往難以適應(yīng)不同應(yīng)用場合的不同要求。對象具有的“封裝性”較好地實現(xiàn)了模塊獨立和信息隱蔽要求,是比較理想的可重用軟件預(yù)制件。面向?qū)ο蟮能浖赜猛緩桨ǎ翰粩鄤?chuàng)建對象類的對象實例,從已有對象類派生新的對象類。派生類即可以繼承其父類的代碼、方法,也可以添加新的數(shù)據(jù)對象和方法。

44、對象繼承與封裝使得在構(gòu)造新的軟件系統(tǒng)時可以重復(fù)使用已有的對象資源。面向?qū)ο髮崿F(xiàn)的軟件可重用性極大地提高了軟件開發(fā)的效率。 (4)軟件系統(tǒng)具有良好的可維護性。軟件系統(tǒng)的維護困難是軟件危機的突出表現(xiàn)之一。面向?qū)ο蠓椒ㄩ_發(fā)的軟件穩(wěn)定性好,使得軟件需求發(fā)生變化時軟件要求修改的工作量較?。挥捎趯ο缶哂械牧己媚K獨立機制和繼承機制,使得以后的擴充與修改相對容易;由于面向?qū)ο蠓椒ㄊ宫F(xiàn)實世界的問題結(jié)構(gòu)與計算機內(nèi)的問題求解結(jié)構(gòu)保持一致,使得軟件較容易理解、測試。§1.5軟件過程軟件工程技術(shù)中的“軟件過程”及“軟件過程工程”概念及其基本結(jié)構(gòu),是軟件工程發(fā)展到一定階段,傳統(tǒng)的軟件工程難以解決愈發(fā)復(fù)雜的軟件

45、開發(fā)問題時提出的新的解決辦法,它使軟件工程環(huán)境進入了過程驅(qū)動的時代。我們知道,“軟件工程”技術(shù)的形成和發(fā)展的基本原動力就是提高軟件的質(zhì)量和軟件開發(fā)的生產(chǎn)效率,這也是軟件開發(fā)活動中所一直追求的兩個主要目標(biāo)。長期以來,軟件工程學(xué)所研究的內(nèi)容,就是圍繞著這兩個目標(biāo)而進行的。為了達到這樣的目標(biāo),軟件人員很自然地將注意力集中到軟件開發(fā)的過程中所使用的方法、技術(shù)、工具和環(huán)境等問題上。這種以探究軟件開發(fā)過程中的方法、機制等內(nèi)容為基礎(chǔ)的思維方式,便是原始的“過程觀”,也是“軟件過程”概念的基本雛形。從20世紀(jì)70年代初開始,各種軟件開發(fā)模型相繼提出,如瀑布模型、演化模型和螺旋模型等。這些軟件開發(fā)模型的提出,為

46、最初形成的原始的“過程觀”注入了具體的內(nèi)容,即開發(fā)人員注重于需求分析、概要設(shè)計、詳細設(shè)計、編碼、質(zhì)量保證、配置管理、維護等若干個活動步驟這樣的思維方式和以這種思維方式為基礎(chǔ)的軟件開發(fā)活動,把軟件的開發(fā)納入了工程化的軌道。軟件工程的這些研究所帶來的結(jié)果是令人欣慰的:大量有效的方法與工具被開發(fā)出來,軟件質(zhì)量得到了改善,軟件開發(fā)與維護的費用大為減少,用戶的滿意率提高等?!败浖^程”概念就是在這樣的形勢下,被提出和發(fā)展起來。1984年10月召開的第一屆國際軟件過程討論會,正式提出了“軟件過程”的概念并賦予明確定義,就是:軟件過程(SoftwareProcess)是在軟件生存周期中所實施的一系列活動(A

47、ctivity)的集合,且每個活動可由一些任務(wù)(Task)組成。這是“軟件工程”史上又一次認識上的飛躍,它標(biāo)志著軟件界已經(jīng)認識到軟件過程因素對軟件開發(fā)的重要影響,它促使人們把注意力從對抽象的軟件生存周期模型的研究,轉(zhuǎn)向那些對軟件項目的成功起著關(guān)鍵作用的過程細節(jié)的研究。這一飛躍標(biāo)志著“軟件過程”時代的到來。進入20世紀(jì)90年代以來,對“軟件過程工程”技術(shù)研究的步伐日益加快,“過程建?!薄ⅰ斑^程實施”、“過程度量”、“過程改進”以及其他的諸多相關(guān)內(nèi)容,紛紛納入“軟件過程工程”技術(shù)研究的重點范圍之中,這些研究成果的推廣應(yīng)用,有效地推動了軟件開發(fā)的高速發(fā)展。1、軟件過程定義國際標(biāo)準(zhǔn)化組織(ISO)和國

48、際電器與電子工程師學(xué)會(IEEE)分別推出軟件過程標(biāo)準(zhǔn),將軟件過程的概念進一步擴展為多視面(multiview)的過程,其定義為:軟件過程(Software Processes)也稱為軟件生存周期過程或軟件過程組,是指軟件生存周期中的一系列相關(guān)過程(Process)。過程就是活動的集合,活動是任務(wù)的集合,任務(wù)則起到把輸入加工成輸出的作用?;顒拥膱?zhí)行可以是順序的、迭代的(重復(fù)的)、并行的、嵌套的或者是有條件地引發(fā)的。擴展后的軟件過程概念所涵蓋的范圍,已不再僅限于傳統(tǒng)意義上的軟件開發(fā)及管理問題,它從合同、工程、運作、管理等視面對軟件生存期中所涉及的各種過程、活動進行了探討。根據(jù)IEEE對軟件過程概

49、念的解釋,軟件過程涵蓋了軟件采購、軟件開發(fā)、軟件維護、軟件運作、軟件獲取、軟件管理、軟件支持等七大類的軟件活動;而ISO 12207則分別將這七大類活動劃歸到基本過程、支持過程和組織過程等三大類中。不論軟件過程的概念如何解釋、如何劃分,軟件過程應(yīng)當(dāng)包含以下3個含義:·個體含義:即指軟件或系統(tǒng)在生存周期中的某一類活動的集合,如獲取過程、供應(yīng)過程、開發(fā)過程、管理過程等。·整體含義:即指軟件或系統(tǒng)在所有上述含義下的軟件過程的總體。·工程含義:即指解決軟件過程的工程,它應(yīng)用軟件工程的原則、方法來構(gòu)造軟件過程模型,并結(jié)合軟件的具體要求進行細化,以及在用戶環(huán)境中運作,以此進一

50、步提高軟件開發(fā)率、降低成本。在上述3個含義中,軟件過程的工程含義還可以包含如下幾個方面:(1)軟件過程不僅要有工程視面,也要有合同視面(包括系統(tǒng)視面和用戶視面)。任何軟件的開發(fā)必然涉及供需雙方,從合同視面考慮相關(guān)的活動必要而且可行;同時,由于軟件復(fù)用技術(shù)已經(jīng)較為成熟,對已有構(gòu)件或子系統(tǒng)的復(fù)用需求也需涉及供需活動,對供需活動的良好定義能夠從客戶接口方面保證軟件的質(zhì)量。為此軟件過程應(yīng)當(dāng)涉及獲取過程和供應(yīng)過程。(2)軟件過程包含管理視面。提高生產(chǎn)率和軟件質(zhì)量這兩個目標(biāo)能否實現(xiàn),其關(guān)鍵還在于管理和支持能力,就管理與被管理、管理與支持等命題已出現(xiàn)越來越多的研究結(jié)果,它貫穿于軟件生存周期,又同軟件開發(fā)相對

51、獨立,為此軟件過程應(yīng)當(dāng)涉及管理過程和支持過程。(3)軟件過程應(yīng)包含運作視面。由于區(qū)分了軟件開發(fā)環(huán)境和業(yè)務(wù)運作環(huán)境,并且系統(tǒng)或軟件也不一定全部自行開發(fā),可以從獲取過程得到所需的部分軟件并投入使用,因而需要考慮與軟件運作相關(guān)的問題,運作過程便從工程過程中獨立出來,形成相對獨立的過程。(4)不同角色由于其視面不同,所參與的軟件過程亦不相同。如管理者按其管理視面參與的是管理過程;用戶和操作人員按其運作視面參與的是運作過程;開發(fā)人員和維護人員按其工程視面參與的是開發(fā)過程和維護過程;獲取者(如設(shè)備、系統(tǒng)軟件采購人員)或供應(yīng)者(如軟件銷售人員)按其合同視面參與的是獲取過程或供應(yīng)過程;介入支持活動的人員(如培

52、訓(xùn)工程師、設(shè)備管理員等)按他們支持的目標(biāo)負責(zé)支持過程的某些工作。軟件過程研究的對象因而擴展到從事軟件活動的各類人員上。2、軟件過程的基本成分軟件過程涉及軟件生存周期中相關(guān)的過程與活動,其中“活動”是構(gòu)成軟件過程的最基本的成分之一。此外,軟件開發(fā)是由多人分工協(xié)作、并使用不同的硬件環(huán)境和軟件環(huán)境來完成的,因此軟件過程還包括支持人與人之間進行協(xié)調(diào)與通信的組織結(jié)構(gòu)、資源及約束等因素。因而,過程活動、活動中所涉及的人員、軟件產(chǎn)品、所用資源和各種約束條件是軟件過程的基本成分。3、軟件過程標(biāo)準(zhǔn)軟件過程概念提出不久,國際標(biāo)準(zhǔn)化組織紛紛開始將軟件過程概念納入有關(guān)的軟件開發(fā)標(biāo)準(zhǔn)之中。1991年9月,IEEE標(biāo)準(zhǔn)化

53、委員會制定“軟件生存周期過程開展標(biāo)準(zhǔn)”;1994年,ISOIEC制定“軟件生存周期過程”標(biāo)準(zhǔn)草案,而我國則根據(jù)該草案于1995年頒布GBT 8566一1995信息技術(shù)軟件生存周期過程國家標(biāo)準(zhǔn);1995年8月1日,ISOIEC經(jīng)過多次討論和修改后,正式發(fā)布了ISOIEC12207第一版“信息技術(shù)軟件生存周期過程”國際標(biāo)準(zhǔn)。ISOIEC 12207國際標(biāo)準(zhǔn)集各種相關(guān)標(biāo)準(zhǔn)的優(yōu)點于一體,把軟件生存周期的各個過程分成三類,即主要生存周期過程、支持生存周期過程和組織的生存周期過程,軟件人員可以根據(jù)具體的軟件項目進行剪裁。主要生存周期過程包括5個過程,供各當(dāng)事方在軟件生存周期期間使用。相關(guān)的當(dāng)事方有軟件的需

54、方、供方、開發(fā)者、操作者和維護者。主要生存周期過程包括:(1)獲取過程:確定需方和組織向供方獲取系統(tǒng)、軟件或軟件服務(wù)的活動。(2)供應(yīng)過程:確定供方和組織向需方提供系統(tǒng)、軟件或軟件服務(wù)的活動。(3)開發(fā)過程:確定開發(fā)者和組織定義并開發(fā)軟件的活動。(4)操作過程:確定操作者和組織在規(guī)定的環(huán)境中為其用戶提供運行計算機系統(tǒng)服務(wù)的活動。(5)維護過程:確定維護者和組織提供維護軟件服務(wù)的活動。 支持生存周期過程包括8個過程,其目的是支持其他過程,作為其組成部分,它們有助于軟件項目的成功和質(zhì)量提高。它包括:(1)文檔編制過程:確定記錄生存周期過程產(chǎn)生的信息所需的活動。(2)配置管理過程:確定配置管理活動。

55、(3)質(zhì)量保證過程:確定客觀地保證軟件和過程符合規(guī)定的要求以及已建立的計劃所需的活動。(4)驗證過程:根據(jù)軟件項目要求,按不同深度確定驗證軟件所需的活動。(5)確認過程:確定確認軟件所需的活動。(6)聯(lián)合評審過程:確定評價一項活動的狀態(tài)和產(chǎn)品所需的活動。(7)審核過程:確定為判斷符合要求、計劃和合同所需的活動。(8)問題解決過程:確定一個用于分析和解決問題的過程(包括不合格)。組織的生存周期過程包括4個過程,它們被一個軟件組織用來建立和實現(xiàn)構(gòu)成相關(guān)生存周期的基礎(chǔ)結(jié)構(gòu)和人事制度,并不斷改進這種結(jié)構(gòu)和過程。具體包括:(1)管理過程:確定生存周期過程中的基本管理活動。(2)建立過程:確定建立生存周期

56、過程基礎(chǔ)結(jié)構(gòu)的基本活動。(3)改進過程:確定一個組織為建立、測量、控制和改進其生存周期過程所需開展的基本活動。(4)培訓(xùn)過程:確定提供經(jīng)適當(dāng)培訓(xùn)的人員所需的活動。4、軟件過程工程的定義對一個特定的軟件項目而言,軟件過程可被視為開展與軟件開發(fā)相關(guān)的一切活動的指導(dǎo)性的綱領(lǐng)和方案,因而軟件過程的優(yōu)劣對軟件的成功開發(fā)起決定作用。那么,如何建立(或稱編制、制訂、構(gòu)造或生產(chǎn)等)那些對軟件項目的開發(fā)具有積極意義的軟件過程,便是“軟件過程工程”所涉及和研究的內(nèi)容。因此,“軟件過程工程”定義為:軟件過程工程就是為建立軟件過程所必須實施的一系列工程化的活動。它涉及與此有關(guān)的方法、工具和環(huán)境的研究?!败浖^程工程”是“軟件工程”理論中新形成的一個重要內(nèi)容,而“軟件過程”則是“軟件過程工程”的基本概念。因此,以工程化的思維方式,去理解“軟件過程”概念及其他相關(guān)概念、構(gòu)成軟件過程的各項內(nèi)容以及構(gòu)造一個軟件過程的各項活動等,對了解和理解“軟件過程工程”并進而對“軟件過程工程”理論進行研究尤為重要。5、軟件過程工程和軟件項目工程如果說軟件過程工程是以軟件過程為中心的工程活動,那么在這種理念形成之前的軟件工程所進行的是以軟件開發(fā)為中心的工程活動,因而被稱之為軟件項目工程。軟件過程工程和軟件項目工程共同構(gòu)成了現(xiàn)代軟件工程的概念框架。軟件過程工程與軟件項目工程由于所圍繞的中心的不同

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論