摘要:軟件復(fù)用是將已有的軟件及其有效成分用于構(gòu)造新的軟件或系統(tǒng)軟件,是提高軟件質(zhì)量和生產(chǎn)效率的的基本途徑。本文主要介紹軟件復(fù)用的基本概念、分類,軟件復(fù)用技術(shù)以及基于復(fù)用的軟件開發(fā)過程。
關(guān)鍵詞:軟件復(fù)用;軟件復(fù)用技術(shù);基于復(fù)用的軟件開發(fā)過程
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2008)14-20940-02
1 軟件復(fù)用的概念
所謂軟件復(fù)用是指重復(fù)使用“為了復(fù)用目的而設(shè)計(jì)的軟件”的過程。而可復(fù)用軟件則是指為了復(fù)用目的而設(shè)計(jì)的軟件。軟件復(fù)用更強(qiáng)調(diào)的是復(fù)用的目的。它是一種系統(tǒng)化的方法,為了復(fù)用而進(jìn)行設(shè)計(jì)。為了復(fù)用而開發(fā)。并且要有效地組織和管理這些復(fù)用產(chǎn)品。方便人們查找和使用。基于復(fù)用產(chǎn)品進(jìn)行開發(fā)。由此可見。并非所有重復(fù)使用軟件的行為都是軟件復(fù)用過程。例如:重復(fù)使用“并非為了復(fù)用目的而設(shè)計(jì)的軟件”或在一個應(yīng)用系統(tǒng)的不同版本間重復(fù)使用代碼。這兩類行為都不屬于嚴(yán)格意義上的軟件復(fù)用。軟件復(fù)用一定要有積累。首先要為了復(fù)用目的設(shè)計(jì)很多的復(fù)用產(chǎn)品,有了一定的積累后才能進(jìn)行軟件復(fù)用。
2 軟件復(fù)用的分類
軟件復(fù)用就是將已有的軟件成分用于構(gòu)造新的軟件系統(tǒng),它不僅僅是對程序的復(fù)用,它還包括對軟件生產(chǎn)過程中任何活動所產(chǎn)生的成品的復(fù)用。按抽象程度的高低,可以劃分為如下的復(fù)用級別:
2.1 代碼的復(fù)用
包括目標(biāo)代碼和源代碼的復(fù)用。當(dāng)前大部分編程語言的運(yùn)行支持系統(tǒng)都提供了連接、綁定等功能來支持目標(biāo)代碼的復(fù)用。源代碼的復(fù)用級別略高于目標(biāo)代碼的復(fù)用,程序員在編程時把一些代碼段復(fù)制到自己的程序中,但這樣往往會產(chǎn)生一些新舊代碼不匹配的錯誤。要想大規(guī)模的實(shí)現(xiàn)源程序的復(fù)用只有依靠含有大量可復(fù)用構(gòu)件的構(gòu)件庫。比如“對象鏈接及嵌入”(0LE)技術(shù),既支持在源程序級定義構(gòu)件并用以構(gòu)造新的系統(tǒng),又使這些構(gòu)件在目標(biāo)代碼的級別上仍然是一些獨(dú)立的可復(fù)用構(gòu)件,能夠在運(yùn)行時被靈活的重新組合為各種不同的應(yīng)用。
2.2 設(shè)計(jì)的復(fù)用
設(shè)計(jì)結(jié)果比源程序的抽象級別更高,因此它的復(fù)用受實(shí)現(xiàn)環(huán)境的影響較少,從而使可復(fù)用構(gòu)件被復(fù)用的機(jī)會更多,并且所需的修改更少。這種復(fù)用有三種途徑:第一種途徑是從現(xiàn)有系統(tǒng)的設(shè)計(jì)結(jié)果中提取一些可復(fù)用的設(shè)計(jì)構(gòu)件,并把這些構(gòu)件應(yīng)用于新系統(tǒng)的設(shè)計(jì);第二種途徑是把一個現(xiàn)有系統(tǒng)的全部設(shè)計(jì)文檔在新的軟硬件平臺上重新實(shí)現(xiàn),也就是把一個設(shè)計(jì)運(yùn)用于多個具體的實(shí)現(xiàn);第三種途徑是獨(dú)立于任何具體的應(yīng)用,有計(jì)劃地開發(fā)一些可復(fù)用的設(shè)計(jì)構(gòu)件。
2.3 分析的復(fù)用
這是比設(shè)計(jì)結(jié)果更高級別的復(fù)用,可復(fù)用的分析構(gòu)件是針對問題域的某些事物或某些問題的抽象程度更高的解法,受設(shè)計(jì)技術(shù)及實(shí)現(xiàn)條件的影響很少,所以可復(fù)用的機(jī)會更大。復(fù)用的途徑也有三種:①從現(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)件。
2.4 測試信息的復(fù)用
主要包括測試用例的復(fù)用和測試過程信息的復(fù)用。前者是把一個軟件的測試用例在新的軟件測試中使用,或者在軟件作出修改時在新的一輪測試中使用。后者是在測試過程中通過軟件工具自動地記錄測試的過程信息,包括測試員的每一個操作、輸入?yún)?shù)、測試用例及運(yùn)行環(huán)境等一切信息。這種復(fù)用的級別,不便和分析、設(shè)計(jì)、編程的復(fù)用級別作準(zhǔn)確的比較,因?yàn)楸粡?fù)用的不是同一事物的不同抽象層次,而是另一種信息,但從這些信息的形態(tài)看,大體處于與程序代碼相當(dāng)?shù)募墑e。由于軟件生產(chǎn)過程主要是正向過程,即大部分軟件的生產(chǎn)過程是使軟件產(chǎn)品從抽象級別較高的形態(tài)向抽象級別較低的形態(tài)演化,所以較高級別的復(fù)用容易帶動較低級別的復(fù)用,因而復(fù)用的級別越高,可得到的回報也越大,因此分析結(jié)果和設(shè)計(jì)結(jié)果在目前很受重視。
3 軟件復(fù)用技術(shù)
軟件復(fù)用技術(shù)可分為合成技術(shù)和生成技術(shù)兩大類:
3.1 合成技術(shù)
在合成技術(shù)中,構(gòu)件(Building blocks)是復(fù)用的基石。其軟件方法以抽象數(shù)據(jù)類型為理論基礎(chǔ),借用了硬件中集成電路芯片的思想,即將功能細(xì)節(jié)與數(shù)據(jù)結(jié)構(gòu)隱藏封裝在構(gòu)件內(nèi)部,并有精心設(shè)計(jì)的接口。構(gòu)件在開發(fā)中就類似于芯片的使用,可組裝成更大的構(gòu)件。構(gòu)件是對某一函數(shù)、過程、子程序、數(shù)據(jù)類型、算法等可復(fù)用軟件成份的抽象,利用構(gòu)件構(gòu)造軟件系統(tǒng),可提高生產(chǎn)率、縮短開發(fā)周期。構(gòu)件完全不需修改的情況只是一種理想的情形,在實(shí)際工作中,修改和增刪是難免的。構(gòu)件組合成更大的構(gòu)件的方式有三種:⑴連接:通常標(biāo)準(zhǔn)庫中的標(biāo)準(zhǔn)函數(shù)是靠編譯和連接程序與其它模塊一并合成系統(tǒng)的。⑵ 消息傳遞和繼承:例如Smalltalk面向?qū)ο蟮某绦蚪Y(jié)構(gòu)體系,就是通過消息傳遞和繼承機(jī)制把對象與相關(guān)的其它對象類聯(lián)系起來合成一個系統(tǒng)的。⑶管道機(jī)制:例如UNIX中用管道(Pipe)連接Shell命令,使用前一命令的輸出作為后一命令的輸入,用管道機(jī)制把多個Shell命令連接在一起完成一個更復(fù)雜的功能。
3.2 生成技術(shù)
生成技術(shù)利用可復(fù)用的模式,通過生成程序產(chǎn)生一個新的程序或程序段,產(chǎn)生的程序即是模式的實(shí)例。可復(fù)用的模式分為:代碼模式和規(guī)則模式。前者的一個示例是應(yīng)用生成器,可復(fù)用的代碼模式就存在于生成器自身,通過特定的參數(shù)替換,生成抽象軟件模塊的具體實(shí)例。后者的一個示例是變換系統(tǒng),它是變換規(guī)則的集合;在其變換方法中通常采用超高級的規(guī)格說明語言,形式化地給出軟件需求規(guī)格說明,利用程序變換系統(tǒng),把用超高級規(guī)格說明語言編寫的程序轉(zhuǎn)化成某種可執(zhí)行語言的程序。此種超高級語言抽象能力高,邏輯性強(qiáng),形式化好,便于軟件使用者維護(hù)。與構(gòu)件的復(fù)用相比,模式復(fù)用主要用于某些具體的應(yīng)用領(lǐng)域。一般說來,構(gòu)件的描述應(yīng)選用一種不依賴于具體機(jī)器、具體語言的較抽象的語言,否則會受機(jī)器和語言的限制而降低可復(fù)用性。例如,用某種高級語言編寫的構(gòu)件將受到該語言中的數(shù)據(jù)結(jié)構(gòu)和控制結(jié)構(gòu)的限制,有時在其它語言中不易找到相應(yīng)的概念和結(jié)構(gòu)。另外,大批構(gòu)件必須用一個數(shù)據(jù)庫進(jìn)行管理。總之,構(gòu)件方法支持自底向上的軟件開發(fā)方法,相應(yīng)的構(gòu)件應(yīng)具有硬件獨(dú)立性、軟件獨(dú)立性、可讀性、可理解性、可修改性和正確性。而變換方法側(cè)重于程序的推導(dǎo)方式,推理規(guī)則,支持自頂向下的軟件開發(fā)技術(shù);因其形式化程度高,抽象性強(qiáng),一般軟件開發(fā)者不易掌握,在描述某些實(shí)際問題時也有困難;再者,經(jīng)過多次變換得到的可執(zhí)行程序的效率較低,對時間和存儲空間的需求較高,這都是需要解決的問題。在實(shí)際應(yīng)用中可將這兩種方法結(jié)合使用,取長補(bǔ)短,再吸收人工智能的研究成果,以知識庫為輔助工具,可促進(jìn)復(fù)用技術(shù)的成熟、拓展和深化。
4 基于復(fù)用的軟件開發(fā)過程
應(yīng)用系統(tǒng)的軟件復(fù)用由可復(fù)用資產(chǎn)的開發(fā)、管理、支持和復(fù)用四個過程組成。
4.1 可復(fù)用資產(chǎn)的開發(fā)
此開發(fā)過程要界定并提供可復(fù)用資產(chǎn),以滿足應(yīng)用工程師的需要。可復(fù)用資產(chǎn)的來源可以是新開發(fā)的、再建設(shè)的、購置的。可復(fù)用資產(chǎn)有多種類型,如代碼、接口、體系結(jié)構(gòu)、測試、工具、規(guī)范等。此開發(fā)過程的活動包括:清理現(xiàn)有的應(yīng)用軟件和資產(chǎn),列出其詳細(xì)清單,并進(jìn)行分析;進(jìn)行領(lǐng)域分析;體系結(jié)構(gòu)定義;評估應(yīng)用工程師的需求;進(jìn)行技術(shù)改革;可復(fù)用資產(chǎn)的設(shè)計(jì)、實(shí)現(xiàn)、測試和打包等。
4.2 復(fù)用
復(fù)用過程是使用可復(fù)用資產(chǎn)來生產(chǎn)客戶合同應(yīng)用軟件的過程。此過程的活動包括:檢驗(yàn)領(lǐng)域模型;收集和分析最終用戶的需求;從可復(fù)用資產(chǎn)中挑選合適的構(gòu)件,并進(jìn)行必要的客戶化調(diào)節(jié);設(shè)計(jì)和實(shí)現(xiàn)可復(fù)用資產(chǎn)未覆蓋到的部分;組裝出完整的應(yīng)用軟件,對之進(jìn)行測試。
4.3 支持
支持過程的任務(wù)是全面支持可復(fù)用資產(chǎn)的獲取、管理、維護(hù)工作。此過程的活動包括:對所提供的可復(fù)用資產(chǎn)進(jìn)行確認(rèn);對構(gòu)件庫進(jìn)行分類綴目;通告和分發(fā)可復(fù)用資產(chǎn);提供必要的文檔;從應(yīng)用工程師收集反饋信息和缺陷報告。
4.4 管理
管理過程從事計(jì)劃、啟動、資源、跟蹤。并協(xié)調(diào)這幾個過程。管理過程的活動包括:對新資產(chǎn)的獲取工作優(yōu)先性排隊(duì);安排其施工日程;分析其影響;解決有關(guān)的矛盾;進(jìn)行培訓(xùn);進(jìn)行指揮。
5 結(jié)束語
使用成熟的軟件復(fù)用技術(shù)可以提高軟件開發(fā)效率,改善軟件質(zhì)量,縮短軟件開發(fā)周期,降低軟件開發(fā)成本,同時還可促進(jìn)軟件復(fù)用技術(shù)自身的進(jìn)一步發(fā)展與完善。
參考文獻(xiàn):
[1] 張海藩. 軟件工程導(dǎo)論(第3版)[M]. 北京:清華大學(xué)出版社,1998.
[2] 黃柏素, 梅宏 譯. 軟件工程實(shí)踐者的研究方法[M]. 機(jī)械工業(yè)出版社,1999.