登錄

軟件復(fù)用

百科 > 計(jì)算機(jī) > 軟件復(fù)用

1.什么是軟件復(fù)用

  軟件復(fù)用是指在構(gòu)造新的軟件系統(tǒng)的過程中,對已存在的軟件產(chǎn)品(設(shè)計(jì)結(jié)構(gòu)、源代碼、文檔等)重復(fù)使用的技術(shù)。

2.軟件復(fù)用的發(fā)展歷史[1]

  軟件復(fù)用并不是一個(gè)新概念,它的首次提出可以追溯到20世紀(jì)60年代末期。截至目前,共經(jīng)歷了4個(gè)標(biāo)志性的研究、發(fā)展階段。

  1.1968--1978年:萌芽、潛伏期

  在1968年德國Garmish舉行的NATO(北大西洋公約組織)軟件工程會議上,Dough Mcilroy在其論文Mass Produce Software Components中提出軟件復(fù)用的概念,希望通過代碼復(fù)用實(shí)現(xiàn)軟件開發(fā)的大規(guī)模生產(chǎn)。Mcilroy設(shè)想軟件構(gòu)件可根據(jù)它們的通用性、性能、應(yīng)用平臺進(jìn)行分類,使復(fù)雜的軟件系統(tǒng)可以像硬件設(shè)計(jì)一樣,通過標(biāo)準(zhǔn)的構(gòu)件進(jìn)行識別、組裝,這也是類構(gòu)件軟件復(fù)用思想的雛形,但是在以后的10年中,軟件復(fù)用研究并未取得實(shí)質(zhì)進(jìn)展。

  2.1979——1983年:再發(fā)現(xiàn)期

  1979年,Lanergan發(fā)表論文,對其在Rayther Missice Divison中的一項(xiàng)軟件復(fù)用項(xiàng)目進(jìn)行總結(jié),使得軟件復(fù)用技術(shù)重新引起人們的關(guān)注。Lanergan項(xiàng)目小組分析了5000個(gè)COBOL源程序,發(fā)現(xiàn)設(shè)計(jì)和代碼中有60%的冗余,因此可標(biāo)準(zhǔn)化并被復(fù)用。在此后的幾年里,其他軟件工程師也通過研究發(fā)現(xiàn)商業(yè)金融等系統(tǒng)的大部分邏輯結(jié)構(gòu)和設(shè)計(jì)模式都屬于編輯、維護(hù)、報(bào)表等類型的模塊,可通過對這些模塊重新設(shè)計(jì)和標(biāo)準(zhǔn)化而得到較高的復(fù)用率。

  3.1983——1994年:發(fā)展期

  1983年,Hed BiggerstuffA和Alan Petis在美國的NewPort組織了第一次有關(guān)軟件復(fù)用的研討會。隨后在1984年和1987年,美國IEEE Transaction on Software Engineering和IEEE Software分別出版了有關(guān)軟件復(fù)用的專輯。1991年,第一屆軟件復(fù)用國際研討會(IWSR)在德國舉行,之后在1993年又舉行了第二次研討會。在此期間,歐洲實(shí)施了幾個(gè)有關(guān)軟件復(fù)用的重點(diǎn)項(xiàng)目,如ESF(Eureka Software Factory),其主要目標(biāo)是提供軟件復(fù)用的工具支持。

  4.1994年至今:成熟期

  1994年的軟件復(fù)用國際研討會議改稱軟件復(fù)用國際會議,此時(shí)軟件復(fù)用技術(shù)已引起了計(jì)算機(jī)科學(xué)界的廣泛重視,越來越多的人投入到這一技術(shù)的研究中。面向?qū)ο蠹夹g(shù)的崛起給軟件復(fù)用技術(shù)以新的希望,出現(xiàn)了類庫、構(gòu)件等新的復(fù)用方式,微軟的ActiveX是其典型代表。軟件復(fù)用研究重新成為熱點(diǎn),被視為解決軟件危機(jī)、提高軟件生產(chǎn)效率和質(zhì)量的現(xiàn)實(shí)可行的途徑。軟件的構(gòu)件化開發(fā)和軟件復(fù)用已經(jīng)成為互聯(lián)網(wǎng)時(shí)代軟件開發(fā)的大趨勢。軟件復(fù)用是解決“軟件危機(jī)”的重要手段之一。無論是早期的結(jié)構(gòu)化軟件設(shè)計(jì)方法還是后來的面向?qū)ο蟮?a href="/wiki/%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1" title="軟件設(shè)計(jì)">軟件設(shè)計(jì)方法都在朝著這個(gè)方向努力。

3.軟件復(fù)用的分類[2]

  (1)代碼的復(fù)用

  代碼復(fù)用是軟件復(fù)用中最為常見的一種形式,包括目標(biāo)代碼和源代碼的復(fù)用。其中目標(biāo)代碼的復(fù)用級別最低,歷史最久,大部分編程語言的運(yùn)行支持環(huán)境都提供了連接、綁定等功能來支持這種復(fù)用。源代碼的復(fù)用級別略高于目標(biāo)代碼的復(fù)用,程序員在編程時(shí)把一些想復(fù)用的代碼段復(fù)制到程序中,但這樣做往往會產(chǎn)生一些新舊代碼不匹配的錯(cuò)誤。要大規(guī)模地實(shí)現(xiàn)源程序的復(fù)用,只有依靠含有大量可復(fù)用構(gòu)件的構(gòu)件庫,如“對象鏈接與嵌入”技術(shù),既支持在源程序級上定義構(gòu)件以構(gòu)造新的系統(tǒng),又使這些構(gòu)件在目標(biāo)代碼級上仍然是一些獨(dú)立的可復(fù)用構(gòu)件,能夠在運(yùn)行時(shí)被靈活地重新組合為各種應(yīng)用系統(tǒng)。

  (2)設(shè)計(jì)的復(fù)用

  設(shè)計(jì)結(jié)果比源程序的抽象級別更高,因此它的復(fù)用受實(shí)現(xiàn)環(huán)境的影響較少,從而使可復(fù)用構(gòu)件被復(fù)用的機(jī)會更多,并且所需修改更少。這種復(fù)用有3種途徑,第一種途徑是從現(xiàn)有系統(tǒng)的設(shè)計(jì)結(jié)果中提取一些可復(fù)用的設(shè)計(jì)構(gòu)件,并把這些構(gòu)件應(yīng)用于新系統(tǒng)的設(shè)計(jì)中;第二種途徑是把一個(gè)現(xiàn)有系統(tǒng)的全部設(shè)計(jì)文檔在新的軟硬件平臺上重新實(shí)現(xiàn),也就是把一個(gè)設(shè)計(jì)運(yùn)用于多個(gè)具體的實(shí)現(xiàn);第三種途徑是獨(dú)立于任何具體的應(yīng)用,有計(jì)劃地開發(fā)一些可復(fù)用的設(shè)計(jì)構(gòu)件。

  (3)分析的復(fù)用

  這是比設(shè)計(jì)結(jié)果更高級別的復(fù)用??蓮?fù)用的分析構(gòu)件是針對問題域的某些事物或某些問題的抽象程度更高的方法,受設(shè)計(jì)技術(shù)及實(shí)現(xiàn)條件的影響更小,所以可復(fù)用的機(jī)會更大。這種復(fù)用也有3種途徑,第一種途徑是從現(xiàn)有系統(tǒng)的分析結(jié)果中提取可復(fù)用構(gòu)件并用于新系統(tǒng)的分析;第二種途徑是用一份完整的分析文檔作為輸入,產(chǎn)生針對不同軟硬件平臺和其他實(shí)現(xiàn)條件的多項(xiàng)設(shè)計(jì);第三種途徑是獨(dú)立于具體應(yīng)用,專門開發(fā)一些可復(fù)用的分析構(gòu)件。

  (4)測試信息的復(fù)用

  測試信息的復(fù)用主要包括測試用例的復(fù)用和測試過程的復(fù)用。前者是把一個(gè)軟件的測試用例應(yīng)用于新的軟件測試中,或者在軟件作出修改時(shí)使用在新一輪的測試中。后者是在測試過程中通過軟件工具自動記錄測試的過程信息,包括測試員的每一個(gè)操作、輸人參數(shù)、測試用例及運(yùn)行環(huán)境等信息,并將這些過程信息應(yīng)用于新的軟件測試或新一輪的軟件測試中。測試信息的復(fù)用級別不易同分析、設(shè)計(jì)、編程的復(fù)用級別進(jìn)行準(zhǔn)確地比較,因?yàn)楸粡?fù)用的不是同一事物的不同抽象層次,而是另一種信息,但從這些信息的形態(tài)來看,大體處于與程序代碼相當(dāng)?shù)募墑e。

  從軟件的發(fā)展歷史來看,在軟件發(fā)展初期,所有人都必須從頭開始編寫程序。現(xiàn)在,軟件系統(tǒng)的種類越來越多,規(guī)模越來越大,在已有的軟件中,很多功能被重復(fù)寫了成千上萬次,這些重復(fù)的代碼在當(dāng)今軟件的開發(fā)中可以不斷被拿來使用。AT&T、愛立信、惠普IBM、摩托羅拉NEC東芝等公司的經(jīng)驗(yàn)表明,非正式的代碼復(fù)用率為15%~20%,結(jié)合其他系統(tǒng)復(fù)用,使得軟件開發(fā)的成本大大降低,開發(fā)時(shí)間得到有效縮短。

  日本的一些軟件公司還建立了適合使用標(biāo)準(zhǔn)部件的工程組織,一直追求更正式的復(fù)用。20世紀(jì)80年代中期,日本軟件工程的復(fù)用率已經(jīng)接近50%。美國的惠普公司從1984年初開始之后的10年里,在儀表和打印機(jī)固件方面的復(fù)用率達(dá)到25%~50%,其中有一條儀表生產(chǎn)線達(dá)到了83%。

  由此可見,使用軟件復(fù)用技術(shù)可以減少軟件開發(fā)活動中大量的重復(fù)性勞動,提高軟件生產(chǎn)效率,降低開發(fā)成本,縮短開發(fā)周期。同時(shí),由于軟件構(gòu)件大都在實(shí)際運(yùn)行環(huán)境中得到了多次校驗(yàn),并經(jīng)過了嚴(yán)格的質(zhì)量認(rèn)證,因此,復(fù)用這些構(gòu)件有助于改善軟件質(zhì)量。此外,大量使用軟件構(gòu)件,還有助于提高軟件的靈活性和標(biāo)準(zhǔn)化程度。而且,由于軟件生產(chǎn)過程主要是正向過程,即大部分軟件的生產(chǎn)過程是使軟件產(chǎn)品從抽象級別較高的形態(tài)向抽象級別較低的形態(tài)演化,級別較高的復(fù)用容易帶動級別較低的復(fù)用,因而復(fù)用的級別越高,可得到的回報(bào)也就越大,因此分析結(jié)果和設(shè)計(jì)結(jié)果在目前很受重視。用戶可購買生產(chǎn)商的分析構(gòu)件和設(shè)計(jì)構(gòu)件,自己設(shè)計(jì)或編程,掌握系統(tǒng)的剪裁、擴(kuò)充、維護(hù)和演化等活動。

4.軟件復(fù)用的層次[3]

  軟件復(fù)用有三個(gè)層次:知識的復(fù)用、方法的復(fù)用和軟件成分的復(fù)用,前兩個(gè)屬于知識工程的范疇,這里只討論軟件成分的復(fù)用。軟件成分的復(fù)用包括

  (1)代碼的復(fù)用,可以采用源代碼剪貼、源代碼包含和繼承來實(shí)現(xiàn)。

  (2)設(shè)計(jì)結(jié)果的復(fù)用,是指復(fù)用某個(gè)軟件系統(tǒng)的設(shè)計(jì)模型,適用于軟件系統(tǒng)的移植。

  (3)分析結(jié)果的復(fù)用,是指復(fù)用某個(gè)軟件系統(tǒng)的分析模型,適用于用戶需求未改變,而系統(tǒng)體系結(jié)構(gòu)變化的場合。

5.軟件復(fù)用的意義[4]

  軟件復(fù)用的意義是降低軟件開發(fā)和維護(hù)的成本,提高軟件開發(fā)效率,提高軟件的質(zhì)量。

評論  |   0條評論