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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rè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章 軟 件 工 程 概 述本章要點(diǎn)² 軟件工程產(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)的“軟件危機(jī)”的過程中逐漸形成與發(fā)展的。在不到40年的時(shí)間里,在軟件工程的理論和實(shí)踐兩方面都取得了長足的進(jìn)步。軟件工程是一門指導(dǎo)計(jì)算機(jī)軟件系統(tǒng)開發(fā)和維護(hù)的工程學(xué)科,是一門新興的邊緣學(xué)科,涉及到計(jì)算機(jī)科學(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)用水平,對促進(jìn)我國軟件產(chǎn)業(yè)與國際接軌,推動(dòng)我國軟件產(chǎn)業(yè)的迅速發(fā)展起著十分重要的關(guān)鍵作用。軟件工程的產(chǎn)生和發(fā)展是與軟件的發(fā)展緊密相關(guān)的。自從第一臺計(jì)算機(jī)誕生以來,就開始了軟件的生產(chǎn),到目前為止,軟件發(fā)展經(jīng)歷了三個(gè)階段: 1、程序設(shè)計(jì)時(shí)代(19461956年)采用“個(gè)體生產(chǎn)方式”,即軟件開發(fā)完全依賴于程序員個(gè)人的能力水平。2、程序系統(tǒng)時(shí)代(19561968年)由于軟件應(yīng)用范圍及規(guī)模的不斷擴(kuò)大,個(gè)體生產(chǎn)已經(jīng)不能夠滿足軟件

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

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

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

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

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

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

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

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

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

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

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

15、著的邏輯產(chǎn)品。軟件開發(fā)人員(或開發(fā)小組)的工作進(jìn)展情況可見性差,難以準(zhǔn)確度量,從而使得軟件產(chǎn)品的開發(fā)過程比一般產(chǎn)品的開發(fā)過程更難于評價(jià)和管理。為了提高軟件開發(fā)過程的可見性,更好地進(jìn)行管理,應(yīng)該根據(jù)軟件開發(fā)項(xiàng)目的總目標(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ā)的軟件中的錯(cuò)誤明顯少于素質(zhì)低的人員所開發(fā)的軟件中的

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

52、訓(xùn)工程師、設(shè)備管理員等)按他們支持的目標(biāo)負(fù)責(zé)支持過程的某些工作。軟件過程研究的對象因而擴(kuò)展到從事軟件活動(dòng)的各類人員上。2、軟件過程的基本成分軟件過程涉及軟件生存周期中相關(guān)的過程與活動(dòng),其中“活動(dòng)”是構(gòu)成軟件過程的最基本的成分之一。此外,軟件開發(fā)是由多人分工協(xié)作、并使用不同的硬件環(huán)境和軟件環(huán)境來完成的,因此軟件過程還包括支持人與人之間進(jìn)行協(xié)調(diào)與通信的組織結(jié)構(gòu)、資源及約束等因素。因而,過程活動(dòng)、活動(dòng)中所涉及的人員、軟件產(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)點(diǎn)于一體,把軟件生存周期的各個(gè)過程分成三類,即主要生存周期過程、支持生存周期過程和組織的生存周期過程,軟件人員可以根據(jù)具體的軟件項(xiàng)目進(jìn)行剪裁。主要生存周期過程包括5個(gè)過程,供各當(dāng)事方在軟件生存周期期間使用。相關(guān)的當(dāng)事方有軟件的需

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

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

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

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論