潘中奎,廉士弟,趙 琪
(1.平邑縣科學(xué)技術(shù)局科學(xué)技術(shù)信息中心,山東 臨沂 273300;2.臨沂市科學(xué)技術(shù)局科學(xué)技術(shù)開發(fā)中心,山東 臨沂 276000)
隨著對軟件復(fù)用及應(yīng)用研究的深入,可復(fù)用的軟件構(gòu)件作為軟件復(fù)用的核心和基礎(chǔ)已越來越得到產(chǎn)業(yè)界和學(xué)術(shù)界的重視[1]。分析構(gòu)件、設(shè)計構(gòu)件、代碼構(gòu)件是程序開發(fā)中經(jīng)常用到的構(gòu)件。代碼構(gòu)件是其中很重要的一種形式,但代碼構(gòu)件多年來一直發(fā)展得很緩慢。
現(xiàn)有的構(gòu)件模型主要關(guān)注構(gòu)件的交互接口、交互時序關(guān)系、構(gòu)件之間的連接信息等,封裝構(gòu)件的內(nèi)部實現(xiàn)細節(jié),但缺乏對應(yīng)用變化的描述和支持[2],致使在代碼構(gòu)件(以下簡稱構(gòu)件)的開發(fā)中,構(gòu)件的粒度大小難以控制。
基于軟件開發(fā)中通常使用的樹形程序的結(jié)構(gòu)特點,在《基于青鳥JBCOM/E的柔性構(gòu)件模型的研究與實現(xiàn)》的基礎(chǔ)上[3],進一步研究,提出一種針對樹形程序的基于青鳥接口規(guī)約的全領(lǐng)域構(gòu)件模型系統(tǒng),整個系統(tǒng)由全領(lǐng)域構(gòu)件模型及相應(yīng)的二次加工工具系統(tǒng)組成,用以開發(fā)能滿足不同業(yè)務(wù)需要、粒度適中的構(gòu)件。
按程序中模塊的組織情況可分為:樹形結(jié)構(gòu)、網(wǎng)格結(jié)構(gòu)、網(wǎng)狀結(jié)構(gòu)。
如圖1所示,在樹形結(jié)構(gòu)中,只有一個根模塊,對任一子模塊,只有一個父模塊,同一層的模塊間沒有任何關(guān)系。
圖1 樹形結(jié)構(gòu)
網(wǎng)格結(jié)構(gòu)是一個半序的連通有向圖[4]。如圖2所示,具有這種結(jié)構(gòu)的程序,可以通過共享模塊的重用轉(zhuǎn)化為樹形結(jié)構(gòu)。這種網(wǎng)格結(jié)構(gòu)的樹形轉(zhuǎn)化不影響程序的可靠性。
圖2 網(wǎng)格結(jié)構(gòu)轉(zhuǎn)換成樹形結(jié)構(gòu)
如圖3所示,在網(wǎng)狀結(jié)構(gòu)中,模塊間沒有上下級關(guān)系,任何模塊間都可能發(fā)生相互關(guān)系,無法分出層次。
因為網(wǎng)狀結(jié)構(gòu)會使整個程序錯綜復(fù)雜,所以在客戶應(yīng)用系統(tǒng)的開發(fā)中,通常使用樹形結(jié)構(gòu),而不是網(wǎng)狀結(jié)構(gòu)[5]。
圖3 網(wǎng)狀結(jié)構(gòu)
領(lǐng)域是一組具有相似或相近軟件需求的應(yīng)用系統(tǒng)所覆蓋的功能區(qū)域[6]。在整個領(lǐng)域的范圍內(nèi),有些特征是所有系統(tǒng)都具有的特征,有些特征是部分系統(tǒng)和個別系統(tǒng)所具有的特征,體現(xiàn)為領(lǐng)域中系統(tǒng)的本質(zhì)特征和變化特征。根據(jù)在不同系統(tǒng)中呈現(xiàn)出的狀況,可以將變化特性分為以下3類[7]:
1)單個可選的:有些系統(tǒng)具有這類特性,不是每個系統(tǒng)都有。將來開發(fā)的系統(tǒng)可能有此特性,也可能沒有此特性。
2)成組可選的:以成組的形式出現(xiàn)的可選的變化性。
3)多選一的:一組特性之間存在互斥關(guān)系,一個特定系統(tǒng)只能選其中的一項特性。
UniCon[8]、Wright[9]、C2[10]、CORBA[11]、青鳥 JBCOM、EJB[12]等為常用的構(gòu)件模型。它們都從組裝方式、接口時序關(guān)系、動態(tài)系統(tǒng)配置等方面對構(gòu)件的特性進行了描述,但沒有對領(lǐng)域的變化性進行描述。
為了對領(lǐng)域的變化性進行描述,并把領(lǐng)域的共性與變化性的描述實現(xiàn)為構(gòu)件的子模塊,為此,本文對青鳥接口規(guī)約進行了擴充,在青鳥構(gòu)件模型接口規(guī)約的基礎(chǔ)上添加對子模塊的描述,提出全領(lǐng)域構(gòu)件模型系統(tǒng)的概念。
構(gòu)件模型是對現(xiàn)實構(gòu)件世界(問題空間和設(shè)計空間)的抽象,是實現(xiàn)系統(tǒng)化復(fù)用的第一個關(guān)鍵因素[13]。全領(lǐng)域構(gòu)件模型系統(tǒng)由全領(lǐng)域構(gòu)件模型和二次加工工具系統(tǒng)組成。
全領(lǐng)域構(gòu)件模型以青鳥構(gòu)件模型為藍本,適當修改而成。全領(lǐng)域構(gòu)件模型能對領(lǐng)域中共同的特征和變化的特征進行描述。按該模型開發(fā)的構(gòu)件,首先把同一領(lǐng)域中一族共同的特征和變化的特征進行代碼實現(xiàn),然后把這些代碼實現(xiàn)作為子模塊按“并聯(lián)”的方式組合成構(gòu)件。構(gòu)件使用范圍的拓展和粒度的增大及構(gòu)件總數(shù)量的減少是以子模塊的冗余來實現(xiàn)的。這種以“并聯(lián)”方式組建的構(gòu)件可以方便地添加還沒有實現(xiàn)或升級的子模塊,也就是把子模塊實現(xiàn)后再按“并聯(lián)”的方式組合到構(gòu)件中。
使用此構(gòu)件組裝客戶應(yīng)用系統(tǒng)時,能利用篩選出的客戶數(shù)據(jù)精確地標識出該客戶的應(yīng)用系統(tǒng)所需要的全部子模塊。
二次加工工具系統(tǒng)是一種能依據(jù)標識出的客戶的應(yīng)用系統(tǒng)實際所需要的全部子模塊,來對全領(lǐng)域構(gòu)件進行二次加工的系統(tǒng),剔除構(gòu)件中冗余的子模塊,重新生成特定客戶的專用構(gòu)件。
為了使構(gòu)件能夠被較為廣泛地復(fù)用,構(gòu)件應(yīng)該具有較強的通用性和靈活性[14]?;诖?,模型結(jié)構(gòu)如下。
該模型由外部接口、內(nèi)部子模塊結(jié)構(gòu)及臨時記錄調(diào)用模塊3個部分組成,如圖4所示。
圖4 全領(lǐng)域構(gòu)件模型
接口是構(gòu)件的唯一訪問入口,它僅定義了一系列操作的集合,而不提供任何實現(xiàn)的方法[15]。全領(lǐng)域構(gòu)件模型的接口采用與青鳥構(gòu)件模型相同的接口,即“接口連接式體系結(jié)構(gòu)”中的接口和“插頭插座式體系結(jié)構(gòu)”中的接口[16]。它們在構(gòu)件集成時,不用關(guān)注構(gòu)件內(nèi)部的具體實現(xiàn),能在規(guī)約層面上進行集成。對于復(fù)雜的構(gòu)件可由簡單的構(gòu)件組合而成,這些相應(yīng)的簡單構(gòu)件理應(yīng)被看作子模塊。
對青鳥構(gòu)件模型的接口規(guī)約略做擴充,添加對子模塊(sub-module)的描述,即得到全領(lǐng)域構(gòu)件模型相應(yīng)的接口規(guī)約如下:
模型中的記錄調(diào)用模塊是臨時模塊,在接口規(guī)約中不進行描述。
其作用是在進行測試(構(gòu)件測試、組裝測試、確認測試、系統(tǒng)測試)及用戶試運行時,在庫文件RecordId中記錄哪些子模塊已被使用過。算法如下:
記錄調(diào)用模塊是一個臨時模塊,當客戶系統(tǒng)正式生成時,它會被剔除。
模型的子模塊就是對接口的代碼實現(xiàn),既可以是方法,也可以是小構(gòu)件。這些子模塊也是對領(lǐng)域中共性和變化性的代碼實現(xiàn)。
記錄調(diào)用模塊的方法Record()用來記錄構(gòu)件中被調(diào)用子模塊的標識符,因此在每個子模塊的開始部分首先調(diào)用Record()。也就是如果該子模塊是客戶應(yīng)用系統(tǒng)實際需要的,Record()就會被調(diào)用,記錄下此子模塊的標識符。算法如下:
當客戶應(yīng)用系統(tǒng)由上述構(gòu)件組裝時,系統(tǒng)中會有很多的子模塊冗余,致使系統(tǒng)過于臃腫。軟件規(guī)模的龐大不可避免地導(dǎo)致軟件產(chǎn)品質(zhì)量低下、缺乏適應(yīng)性和可擴展性,難于維護和演化[17]。
因此,對冗余子模塊的剔除是必需要解決的問題。
數(shù)據(jù)的選擇是標識子模塊最關(guān)鍵的一環(huán)。構(gòu)件所要執(zhí)行數(shù)據(jù)范圍的確定要完全依據(jù)客戶需求規(guī)格說明書。首先采取等價類劃分的方法,把需要構(gòu)件執(zhí)行的輸入數(shù)據(jù)按功能需求分成幾個部分,從各部分中篩選出有代表性的數(shù)據(jù)執(zhí)行黑盒測試;然后,把需要構(gòu)件執(zhí)行的數(shù)據(jù)按接口中的子模塊分成幾個部分,篩選出有代表性的數(shù)據(jù)執(zhí)行白盒測試;隨后,用通過檢測的構(gòu)件組裝成客戶系統(tǒng),進行系統(tǒng)測試;最后讓客戶試用幾個月。那么,通過這一系列檢測、試用,對該客戶系統(tǒng)來說,此客戶在處理業(yè)務(wù)時,能用到的子模塊會被全部執(zhí)行到,凡被執(zhí)行到的子模塊就會被記錄下來。未被記錄到的冗余的子模塊可由下面的二次加工工具系統(tǒng)進行剔除。
該系統(tǒng)的結(jié)構(gòu)如圖5所示。
圖5 二次加工工具系統(tǒng)
在構(gòu)件二次加工過程中,先把待加工的構(gòu)件實體讀入加工系統(tǒng),讀取構(gòu)件中的全部子模塊的標識符和RecordId文件中記錄到的子模塊的標識符,將構(gòu)件中的冗余子模塊確定下來,然后進行剔除,生成特定用戶的具體構(gòu)件,再由二次生成的構(gòu)件的實體組裝成用戶系統(tǒng),最后進行系統(tǒng)測試。
構(gòu)件開發(fā)的基礎(chǔ)是構(gòu)件模型,全領(lǐng)域構(gòu)件模型可以很好地解決代碼構(gòu)件開發(fā)中的復(fù)用問題及粒度問題;二次加工工具系統(tǒng)可以對相應(yīng)的構(gòu)件進行二次加工,生成特定客戶的專用構(gòu)件。由以上論述可知,基于青鳥接口規(guī)約的全領(lǐng)域構(gòu)件模型系統(tǒng)與現(xiàn)有的青鳥構(gòu)件系統(tǒng)相兼容,不影響已開發(fā)構(gòu)件在實際中的應(yīng)用。
[1] 陳文宇,向濤,王曉斌,等.實時可信服務(wù)的構(gòu)件設(shè)計與形式化描述[J].電子科技大學(xué)學(xué)報,2011,40(1):122-127.
[2] 張瀟元,韓國強,鄒昆,等.基于構(gòu)件的服務(wù)可擴展電子政務(wù)平臺研究[J].計算機應(yīng)用,2008,28(7):1875-1877.
[3] 潘中奎.基于青鳥JBCOM/E的柔性構(gòu)件模型的研究與實現(xiàn)[D].蘭州:蘭州理工大學(xué),2007.
[4] 邵維忠,楊芙清.面向?qū)ο蟮南到y(tǒng)分析[M].北京:清華大學(xué)出版社,2004:89.
[5] 鄭人杰,殷人昆.實用軟件工程[M].第2版.北京:清華大學(xué)出版社,2002:82.
[6] 楊芙清,王千樣,梅宏,等.基于復(fù)用的軟件生產(chǎn)技術(shù)[J].中國科學(xué)(E 輯),2001,31(4):363-371.
[7] 陳兆良,王千祥,梅宏,等.面向?qū)ο箢I(lǐng)域設(shè)計中的變化性處理[J].電子學(xué)報,2001,29(11):1486-1490.
[8] Zelesnik G.The UniCon Language Reference Manual[R].School of Computer Science,Carnegie Mellon University,1996.
[9] Allen R J.A Formal Approach to Software Architecture[R].Technical Report CMU-CS-97-144,School of Computer Science,Carnegie Mellon University,1997.
[10] Medvidovic N.Formal Definition of the Chiron-2 Software Architectural Style[R].Technical Report UCI-ICS-95-24,Department of Information and Computer Science,University of California,1995.
[11] Object Management Group.CORBA Component Model Version 3.0[Z].Object Management Group,2002.
[12] Monson-Haefel R.Enterprise JavaBeans[M].3rd Edition.O'Reilly Media,2001.
[13] 《信息技術(shù)與標準化》編輯部.SJ/T 11409-2009《軟件構(gòu)件模型》概要[J].信息技術(shù)與標準化,2010(9):45-46.
[14] 霍霄華,韓雪燕,谷彥國.網(wǎng)絡(luò)化指揮信息系統(tǒng)建設(shè)的軟件構(gòu)件技術(shù)[J].火力與指揮控制,2011,36(10):33-36.
[15] 孫昌愛,金茂忠,劉超.軟件體系結(jié)構(gòu)研究綜述[J].軟件學(xué)報,2002,13(7):1228-1237.
[16] 張世琨,張文娟,常欣,等.基于軟件體系結(jié)構(gòu)的可復(fù)用構(gòu)件制作和組裝[J].軟件學(xué)報,2001,12(9):1351-1359.
[17] 張俊,劉淑芬,姚志林.一種基于角色的特征模型構(gòu)件化方法[J].電子學(xué)報,2011,39(2):304-308.