(無錫商業(yè)職業(yè)技術(shù)學(xué)院信息工程學(xué)院, 江蘇 無錫 214153)
隨著軟件需求的激增、軟件規(guī)模和復(fù)雜度的不斷增大,大量資源被浪費(fèi)在重復(fù)開發(fā)上,傳統(tǒng)的開發(fā)方法無法適應(yīng)用戶在質(zhì)量、效率等方面對軟件的需求。軟件復(fù)用又稱軟件重用或軟件再用,是指重復(fù)使用“為了復(fù)用目的而設(shè)計(jì)的軟件”的過程,是利用現(xiàn)有的軟件成分來構(gòu)造新的軟件系統(tǒng)的過程。近十年來軟件復(fù)用被認(rèn)為是解決軟件危機(jī)、提高軟件生產(chǎn)率和質(zhì)量的最有效和最具潛力的手段。
軟件復(fù)用不僅僅是對程序的復(fù)用,還包括對軟件生產(chǎn)過程中任何活動所產(chǎn)生的制成品的復(fù)用,如項(xiàng)目計(jì)劃書、可行性報(bào)告、需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼 (源程序)、測試用例、文檔與使用手冊等等。按抽象程度的從低到高,軟件復(fù)用可以被劃分為如下5個(gè)級別[1]:
(1)代碼的復(fù)用,包括目標(biāo)代碼和源代碼的復(fù)用。當(dāng)前大部分編程語言的運(yùn)行支持系統(tǒng)都提供了連接(Link)、綁定(Binding)等功能來支持目標(biāo)代碼的復(fù)用。源代碼的復(fù)用級別略高于目標(biāo)代碼的復(fù)用,程序員在編程時(shí)把一些想復(fù)用的代碼段復(fù)制到自己的程序中,但這樣往往會產(chǎn)生一些新舊代碼不匹配的錯誤。大規(guī)模的實(shí)現(xiàn)源代碼的復(fù)用只有依靠含有大量可復(fù)用構(gòu)件的構(gòu)件庫,如”對象鏈接及嵌入”(OLE)技術(shù)。
(2)設(shè)計(jì)的復(fù)用。這種復(fù)用有三種途徑,第一種途徑是從現(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ù)用??蓮?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)件。
(4)測試信息的復(fù)用,主要包括測試用例的復(fù)用和測試過程信息的復(fù)用。前者是把一個(gè)軟件的測試用例在新的軟件測試中使用,或者在軟件作出修改時(shí)在新的一輪測試中使用。后者是在測試過程中通過軟件工具自動地記錄測試的過程信息,包括測試員的每一個(gè)操作、輸入?yún)?shù)、測試用例及運(yùn)行環(huán)境等一切信息。
因?yàn)檐浖拈_發(fā)過程主要是從抽象級別較高的形態(tài)向抽象級別較低的形態(tài)演化的正向過程,所以較高級別的復(fù)用容易帶動較低級別的復(fù)用。開發(fā)者可充分利用其它已有的分析件和設(shè)計(jì)件,自己設(shè)計(jì)或編程,完成系統(tǒng)的剪裁、擴(kuò)充、維護(hù)、演化等活動。
軟件復(fù)用的過程實(shí)際上是一系列的相關(guān)技術(shù)的綜合運(yùn)用過程。這些技術(shù)包括軟件構(gòu)件技術(shù)、領(lǐng)域工程、軟件構(gòu)架技術(shù)、軟件再工程、開放系統(tǒng)技術(shù)、軟件過程、CASE技術(shù)以及一些非技術(shù)因素。實(shí)現(xiàn)軟件復(fù)用的各種技術(shù)因素和非技術(shù)因素是互相聯(lián)系的, 它們互相結(jié)合共同影響軟件復(fù)用的實(shí)現(xiàn)。
可復(fù)用信息依賴于特定的問題和特定的問題解決方法,具有領(lǐng)域特定性。為此,在識別、獲取和表示可復(fù)用信息時(shí),應(yīng)采用面向領(lǐng)域的策略。領(lǐng)域的需求具有一定的穩(wěn)定性,使得獲取的信息可以在較長時(shí)間內(nèi)多次復(fù)用。領(lǐng)域工程是一組相似或相近系統(tǒng)的應(yīng)用工程建立基本能力和必備基礎(chǔ)的過程,覆蓋了建立可復(fù)用軟件構(gòu)件的所有活動,可劃分為以下三個(gè)階段[2]:
(1)領(lǐng)域分析。這個(gè)階段的主要目標(biāo)是獲得領(lǐng)域模型。領(lǐng)域模型描述領(lǐng)域中系統(tǒng)之間的共同需求。這個(gè)階段的主要活動包括確定領(lǐng)域邊界,識別信息源,分析領(lǐng)域中系統(tǒng)的需求,確定哪些需求是被領(lǐng)域中的系統(tǒng)廣泛共享的,哪些是可變的,從而建立領(lǐng)域模型。
(2)領(lǐng)域設(shè)計(jì)。這個(gè)階段的目標(biāo)是獲得領(lǐng)域構(gòu)架(Domain-Specific Software Architecture,簡稱 DSSA)。DSSA描述了領(lǐng)域模型中表示需求的解決方案,它不是單個(gè)系統(tǒng)的表示,而是能夠適應(yīng)領(lǐng)域中多個(gè)系統(tǒng)需求的一個(gè)高層次的設(shè)計(jì)。建立了領(lǐng)域模型之后,就可以派生出滿足這些被建模的領(lǐng)域需求的DSSA。由于領(lǐng)域模型中的領(lǐng)域需求具有一定的變化性,DSSA也要相應(yīng)地具有變化性。
(3)領(lǐng)域?qū)崿F(xiàn)。這個(gè)階段的主要行為是定義將需求翻譯到由可復(fù)用構(gòu)件創(chuàng)建系統(tǒng)的機(jī)制。根據(jù)所采用的復(fù)用策略和領(lǐng)域的成熟和穩(wěn)定程度,這種機(jī)制可能是一組與領(lǐng)域模型和DSSA相聯(lián)系的可復(fù)用構(gòu)件,也可能是應(yīng)用系統(tǒng)的生成器。
這些活動的產(chǎn)品(可復(fù)用的軟件構(gòu)件)包括:領(lǐng)域模型、領(lǐng)域構(gòu)架、領(lǐng)域特定的語言、代碼生成器和代碼構(gòu)件等。
研究實(shí)踐表明,軟件復(fù)用在特定領(lǐng)域內(nèi)更容易獲得成功。因此,領(lǐng)域工程受到高度重視,已有許多研究成果。有代表性的工作包括卡耐基梅隆大學(xué)的軟件工程研究所(CMU/SEI)提出的面向特征的領(lǐng)域分析方法(Feature Oriented Domain Analysis method,簡稱FODA),它支持對某領(lǐng)域中系統(tǒng)共性和個(gè)性的發(fā)現(xiàn)、分析和文檔記錄。
對于軟件架構(gòu),目前還沒有一個(gè)統(tǒng)一的定義。典型定義是,軟件架構(gòu)是對構(gòu)成系統(tǒng)的構(gòu)件接口、行為模式、協(xié)作關(guān)系等體系問題的決策總和。研究軟件構(gòu)架有利于發(fā)現(xiàn)不同系統(tǒng)的高層共性,保證靈活和正確的系統(tǒng)設(shè)計(jì),對系統(tǒng)的整體結(jié)構(gòu)和全局屬性進(jìn)行規(guī)約、分析、驗(yàn)證和管理。
這樣,在基于復(fù)用的軟件開發(fā)中,為復(fù)用而開發(fā)的軟件構(gòu)架可以作為一種大粒度的、抽象級別較高的軟件構(gòu)件進(jìn)行復(fù)用,而且軟件構(gòu)架還為構(gòu)件的組裝提供了基礎(chǔ)和上下文。構(gòu)架描繪的是系統(tǒng)的藍(lán)圖,是溝通軟件需求與軟件設(shè)計(jì)的一座橋梁,使軟件復(fù)用從代碼復(fù)用發(fā)展到設(shè)計(jì)復(fù)用和過程復(fù)用。
現(xiàn)存大量的遺產(chǎn)軟件系統(tǒng)由于技術(shù)的發(fā)展,正逐漸退出使用,如何對這些系統(tǒng)進(jìn)行挖掘和整理,得到有用的構(gòu)件;己有的構(gòu)件隨著時(shí)間的流逝會逐漸變得不可使用,如何對它們進(jìn)行維護(hù),以延長其生命期等等。軟件再工程正是解決這些問題的主要技術(shù)手段。軟件再工程是一個(gè)工程過程,它將逆向工程、重構(gòu)和正向工程組合起來,將現(xiàn)存系統(tǒng)重新構(gòu)造為新的形式[3]。再工程的基礎(chǔ)是系統(tǒng)理解,包括對運(yùn)行系統(tǒng)、源代碼、設(shè)計(jì)、分析、文檔等的全面理解。但在很多情況下,由于各類文檔的丟失,只能對源代碼進(jìn)行理解,即程序理解。
開放系統(tǒng)技術(shù)的基本原則是在系統(tǒng)的開發(fā)中使用接口標(biāo)準(zhǔn),同時(shí)使用符合接口標(biāo)準(zhǔn)的實(shí)現(xiàn)。 開放系統(tǒng)技術(shù)為軟件復(fù)用提供了良好的支持。特別是分布對象技術(shù)使得符合接口標(biāo)準(zhǔn)的構(gòu)件可以方便地以“即插即用”的方式組裝到系統(tǒng)中,從而實(shí)現(xiàn)黑盒復(fù)用。這樣,在符合接口標(biāo)準(zhǔn)的前提下,構(gòu)件就可以獨(dú)立地進(jìn)行開發(fā),從而形成獨(dú)立的構(gòu)件制造業(yè)。
軟件過程又稱軟件生存周期過程,是軟件生存周期內(nèi)為達(dá)到一定目標(biāo)而必須實(shí)施的一系列相關(guān)過程的集合。一個(gè)良好定義的軟件過程對軟件開發(fā)的質(zhì)量和效率有著重要影響。然而,基于構(gòu)件復(fù)用的軟件開發(fā)過程和傳統(tǒng)的一切從頭開始的軟件開發(fā)過程有著實(shí)質(zhì)性的不同,探討適應(yīng)于軟件復(fù)用的軟件過程自然就成為一個(gè)迫切的問題。
計(jì)算機(jī)輔助軟件工程(Computer Aided Software Engineering,簡稱 CASE)可使系統(tǒng)按照開發(fā)商規(guī)定的應(yīng)用規(guī)則,由計(jì)算機(jī)自動生成合適的計(jì)算機(jī)程序。軟件復(fù)用同樣需要CASE技術(shù)的支持。CASE技術(shù)中與軟件復(fù)用相關(guān)的主要研究內(nèi)容包括:可復(fù)用構(gòu)件的抽取、描述、分類和存儲;可復(fù)用構(gòu)件的檢索、提取和組裝;可復(fù)用構(gòu)件的度量等等。
除了上述的技術(shù)因素外,軟件復(fù)用還涉及人的素質(zhì)、教育、法律等非技術(shù)因素問題,如:知識產(chǎn)權(quán)問題;保守商業(yè)秘密的問題;復(fù)用前期投入的經(jīng)濟(jì)考慮;標(biāo)準(zhǔn)化問題;機(jī)構(gòu)組織如何適應(yīng)復(fù)用的需求;管理方法如何適應(yīng)復(fù)用的需求;開發(fā)人員知識的更新;創(chuàng)造性和工程化的關(guān)系;開發(fā)人員的心理障礙等等。
基于構(gòu)件的軟件復(fù)用是迄今為止最優(yōu)秀的軟件復(fù)用手段,是支持軟件復(fù)用的核心技術(shù),并在近幾年迅速發(fā)展成為受到高度重視的一門學(xué)科分支。構(gòu)件技術(shù)的應(yīng)用必須遵循一些共同的規(guī)范,當(dāng)前流行的有OMG的CORBA、SUN的EJB和微軟的DCOM。
構(gòu)件是具有內(nèi)部結(jié)構(gòu)和功能的軟件構(gòu)成元素,可通過標(biāo)準(zhǔn)接口獨(dú)立提供特定服務(wù),并且可由一些連接器及相關(guān)規(guī)則與其它構(gòu)件組裝成符合要求的新軟件或構(gòu)件。從抽象程度來看,面向?qū)ο蠹夹g(shù)已達(dá)到了類級復(fù)用,因?yàn)樗且灶悶榉庋b單位的。但這樣的復(fù)用粒度還太小,不足以解決異構(gòu)互操作和效率更高的復(fù)用。構(gòu)件將抽象的程度提到一個(gè)更高的層次,它是對一組類的組合進(jìn)行封裝,并代表完成一個(gè)或多個(gè)功能的特定服務(wù),也為用戶提供了多個(gè)接口。整個(gè)構(gòu)件隱藏了具體的實(shí)現(xiàn),只用接口對外提供服務(wù)。
因此,在基于構(gòu)件的軟件開發(fā)方法下,程序開發(fā)模式也相應(yīng)地發(fā)生了根本變化,不再是“算法+數(shù)據(jù)結(jié)構(gòu)”,而是“構(gòu)件開發(fā)+基于構(gòu)架指導(dǎo)的構(gòu)件組裝”?;跇?gòu)件的軟件開發(fā)過程(Component-based Software Development,簡稱CBSD)有五個(gè)主要的組成部分:需求分析、構(gòu)件庫、構(gòu)件的獲取、構(gòu)件的復(fù)用、構(gòu)件的組裝。計(jì)算機(jī)軟件開發(fā)技術(shù)從面向?qū)ο蠹夹g(shù)(OO)和分布式面向?qū)ο蠹夹g(shù)(DOO)發(fā)展到軟件構(gòu)件技術(shù),并向構(gòu)件技術(shù)方向演變,軟件構(gòu)件以至組件技術(shù)為應(yīng)用軟件產(chǎn)品化提供了理論基礎(chǔ),這是應(yīng)用軟件產(chǎn)業(yè)化發(fā)展的基本方向。
國際上,軟件復(fù)用在領(lǐng)域工程、構(gòu)件及構(gòu)件庫的標(biāo)準(zhǔn)化、構(gòu)件組裝技術(shù)、基于復(fù)用的軟件開發(fā)過程和復(fù)用成熟度模型等方面已經(jīng)取得了重大成功。國內(nèi)的相關(guān)研究也較多,如北京大學(xué)軟件工程研究所提出的青鳥構(gòu)件模型,它的目標(biāo)是致力于軟件復(fù)用,以構(gòu)件作為軟件復(fù)用的基本單位,提供一種有效的管理和檢索構(gòu)件的工具。
[1]張韌志,田麗芳,葛文庚.軟件復(fù)用探討[J].電腦知識與技術(shù),2009,5(23):6452-6453.
[2]張友生,等.軟件體系結(jié)構(gòu)[M].清華大學(xué)出版社, 2006.11:6.
[3]楊芙清,梅宏,李克勤.軟件復(fù)用與軟件構(gòu)件技術(shù)[J].電子學(xué)報(bào),1999,27(2):68-75.