文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2011)04-0040-05
現(xiàn)有的軟件系統(tǒng)多采用傳統(tǒng)開發(fā)方法且只針對某個具體應(yīng)用開發(fā),,軟件與設(shè)備及軟件內(nèi)部各模塊間耦合緊密,軟件可復(fù)用性低,、可擴(kuò)展性差,。
基于構(gòu)件的軟件開發(fā)方法[1],其思想是使軟件能夠像硬件那樣,,通過各部分的動態(tài)組裝完成整個應(yīng)用系統(tǒng)的功能,。基于構(gòu)件的軟件工程CBSE(Component Based Software Engineering)逐漸成為軟件開發(fā)的主流模式[2],,已成為近幾年學(xué)術(shù)界和產(chǎn)業(yè)界共同關(guān)注和研究的熱點(diǎn)。
1 構(gòu)件模型
相對于傳統(tǒng)對象而言,,構(gòu)件將抽象程度提到一個更高的層次,,整個構(gòu)件隱藏了具體的實(shí)現(xiàn),只用接口提供服務(wù),。這樣,,構(gòu)件可以將底層的多個邏輯組合成高層次上的粒度更大的新構(gòu)件,甚至直接封裝到一個系統(tǒng)中,,使模塊的重用從代碼級,、對象級,、架構(gòu)級到系統(tǒng)級都可能實(shí)現(xiàn)[3-5]。
1.1 構(gòu)件模型
為了在后期使用構(gòu)件時能夠快速檢索到需要的構(gòu)件,,必須對構(gòu)件進(jìn)行分類,。構(gòu)件可以使用多種分類方法。本系統(tǒng)先將構(gòu)件分為原子構(gòu)件Ca和復(fù)合構(gòu)件Cc兩大類,,原子構(gòu)件是不能再分的構(gòu)件,,復(fù)合構(gòu)件是由原子構(gòu)件或復(fù)合構(gòu)件組成的構(gòu)件。
原子構(gòu)件可表示為Ca=(IDa,,Na,,Ta,Ia,,Oa,,Ma,Da),,其中,,IDa為原子構(gòu)件唯一標(biāo)識;Na為原子構(gòu)件名稱,;Ta為原子構(gòu)件類型集合(包括子類型集合),,父類型和子類型用樹形結(jié)構(gòu)表示;Ia為原子構(gòu)件輸入接口集合(包括各接口的名稱,、參數(shù),、參數(shù)類型);Oa為原子構(gòu)件輸出接口集合(包括各接口的名稱,、參數(shù),、參數(shù)類型);Ma為原子構(gòu)件消息集合,;Da為原子構(gòu)件描述信息(包括構(gòu)件存儲路徑,、索引關(guān)鍵字、功能描述,、編寫語言,、作者、制作日期,、版本),。
復(fù)合構(gòu)件可表示為Cc=(IDc,Nc,,Tc,,Ic,Oc,Mc,,Dc,,IDas,Ras),,其中,,IDc為復(fù)合構(gòu)件唯一標(biāo)識;Nc為復(fù)合構(gòu)件名稱,;Tc為復(fù)合構(gòu)件類型集合(包括子類型集合),,父類型和子類用樹形結(jié)構(gòu)表示;Ic為復(fù)合構(gòu)件輸入接口指針集合,,該指針指向組成復(fù)合構(gòu)件的原子構(gòu)件對應(yīng)輸入接口,;Oc為復(fù)合構(gòu)件輸出接口指針集合,該指針指向組成復(fù)合構(gòu)件的原子構(gòu)件對應(yīng)輸出接口,;Mc為復(fù)合構(gòu)件消息集合,;Dc為復(fù)合構(gòu)件描述信息(包括構(gòu)件存儲路徑、索引關(guān)鍵字,、功能描述,、編寫語言、作者,、制作日期,、版本);IDas為組成復(fù)合構(gòu)件的原子構(gòu)件IDa集合,;Ras為組成復(fù)合構(gòu)件的原子構(gòu)件的連接關(guān)系,。
原子構(gòu)件和復(fù)合構(gòu)件又可以根據(jù)功能劃分為界面構(gòu)件、通信構(gòu)件,、數(shù)據(jù)庫構(gòu)件,、業(yè)務(wù)構(gòu)件等。其中,,每一類構(gòu)件又可細(xì)分為很多子類,。構(gòu)件粒度越小,復(fù)用度越高,,構(gòu)件耦合度越低,,但構(gòu)件庫中構(gòu)件的數(shù)量也會隨著粒度的變小而劇增,這會給構(gòu)件的檢索帶來不便,。因此,,應(yīng)根據(jù)具體需求,把握好構(gòu)件的粒度,。可參考式(1)[6]:
1.2 基于構(gòu)件的軟件開發(fā)過程
面向構(gòu)件的軟件開發(fā)過程如圖1所示。具體描述如下:
(1)總體設(shè)計者對業(yè)務(wù)系統(tǒng)進(jìn)行需求分析后得到功能需求和框架需求,。
(2)構(gòu)件分析者根據(jù)功能需求進(jìn)行構(gòu)件需求分析后得到構(gòu)件需求,;同時框架實(shí)現(xiàn)者根據(jù)框架需求對系統(tǒng)框架進(jìn)行實(shí)現(xiàn)。
(3)構(gòu)件實(shí)現(xiàn)者根據(jù)構(gòu)件需求對構(gòu)件進(jìn)行實(shí)現(xiàn),,并經(jīng)過嚴(yán)格測試和修改后得到合格的構(gòu)件,。
(4)構(gòu)件庫管理者可以將新制作的構(gòu)件注冊入庫,為了能快速檢索到構(gòu)件,,構(gòu)件入庫時必須對其信息進(jìn)行精確全面的描述,。本文使用XML描述構(gòu)件信息,并使用XML Schema對構(gòu)件描述文檔進(jìn)行合法性檢驗(yàn),,只有描述合法的構(gòu)件才可以入庫,,從而確保構(gòu)件描述信息的一致性和完整性。構(gòu)件庫管理者可以對構(gòu)件庫中的構(gòu)件進(jìn)行刪除,、注銷,、檢索等操作。
(5)構(gòu)件組裝者根據(jù)具體需要從構(gòu)件庫中檢索需要的構(gòu)件,,并在系統(tǒng)框架下進(jìn)行組裝后形成應(yīng)用系統(tǒng),,構(gòu)件組裝者還負(fù)責(zé)對應(yīng)用系統(tǒng)的測試與維護(hù)。
(6)應(yīng)用系統(tǒng)交付用戶使用并提出修改意見與建議,,構(gòu)件組裝者再根據(jù)用戶需求進(jìn)行修改,。
2 基于構(gòu)件的軟件框架
面向構(gòu)件的軟件開發(fā)過程中,構(gòu)件組裝和運(yùn)行需要特殊的環(huán)境,,這種特殊的運(yùn)行環(huán)境稱為框架,。一個框架由一些規(guī)則、建議和習(xí)慣組成,,它們從構(gòu)件的角度定義了一個系統(tǒng)結(jié)構(gòu),,并定義了系統(tǒng)的各組成部分之間是如何通信和實(shí)現(xiàn)互操作的。因此,,設(shè)計框架時,,必須自己定義構(gòu)件及框架的規(guī)范,使用者只有遵循這些規(guī)范,,才能將構(gòu)件集成到框架中,。本系統(tǒng)框架包括構(gòu)件組裝框架和構(gòu)件運(yùn)行框架兩部分,這兩個框架由系統(tǒng)框架管理器管理,,以確保系統(tǒng)在某一時刻,,只能處于其中一個框架下。系統(tǒng)處于構(gòu)件組裝框架時,,可實(shí)現(xiàn)構(gòu)件組裝,、功能模塊組裝、應(yīng)用系統(tǒng)集成、應(yīng)用系統(tǒng)修改,、應(yīng)用系統(tǒng)功能擴(kuò)展等功能,。系統(tǒng)處于運(yùn)行框架時,能夠完成相應(yīng)的業(yè)務(wù)處理功能,,但不能對其進(jìn)行配置,。基于構(gòu)件的軟件框架結(jié)構(gòu)如圖2所示,。
2.1 構(gòu)件組裝框架
傳統(tǒng)的構(gòu)件組裝大多使用代碼方式調(diào)用構(gòu)件接口,,此方式比較復(fù)雜。本框架提供一種圖形化的構(gòu)件組裝界面,,開發(fā)者可以輕松高效地集成新的應(yīng)用系統(tǒng)或?qū)σ延邢到y(tǒng)進(jìn)行擴(kuò)展,。
如圖2所示,構(gòu)件組裝框架主要包括構(gòu)件制作工具,、構(gòu)件測試工具,、構(gòu)件庫管理工具、構(gòu)件組裝工具,、模塊管理工具,、模塊組裝工具。其中,,制作工具,、構(gòu)件測試工具只提供簡單的構(gòu)件制作和測試功能,構(gòu)件實(shí)現(xiàn)者可以選擇市場上其他工具進(jìn)行構(gòu)件制作及測試,;構(gòu)件庫管理工具具有構(gòu)件注冊,、注銷、刪除,、檢索等功能,,模塊管理工具具有模塊注冊、修改,、刪除,、檢索等功能,這兩個工具實(shí)現(xiàn)起來相對簡單,;構(gòu)件組裝和模塊組裝時生成對應(yīng)的XML配置文檔,,通過這些XML配置文檔將構(gòu)件粘合成應(yīng)用系統(tǒng)。本文使用的XML配置文檔主要包括:(1)構(gòu)件描述文檔:對構(gòu)件信息進(jìn)行描述,,以便使用構(gòu)件時能方便獲取構(gòu)件信息,;(2)構(gòu)件適配文檔:對構(gòu)件接口連接關(guān)系進(jìn)行描述;(3)模塊適配文檔:對模塊之間以及構(gòu)件和模塊之間連接關(guān)系的描述,;(4)菜單適配文檔:將菜單與對應(yīng)業(yè)務(wù)模塊綁定,,以便用戶點(diǎn)擊對應(yīng)的菜單時,,觸發(fā)該功能模塊運(yùn)行。組裝時,,通過這些XML配置文檔,,將構(gòu)件組裝成子模塊、功能模塊直至整個綜合測試系統(tǒng),,需要時查找模型中相應(yīng)的標(biāo)簽位置并靈活插入,這樣在對系統(tǒng)修改時,,只需要修改相應(yīng)的構(gòu)件,,其他部分不受影響。此方法支持系統(tǒng)的快速開發(fā)和修改,,具有較高的靈活性和較好的可擴(kuò)展性,,達(dá)到了令人滿意的伸縮性。
在組裝時,,構(gòu)件組裝者根據(jù)應(yīng)用系統(tǒng)的需求檢索相關(guān)構(gòu)件,,如果構(gòu)件庫中無此構(gòu)件,則必須制作相關(guān)構(gòu)件并放入構(gòu)件庫中,,再將檢索到的構(gòu)件通過構(gòu)件組裝工具進(jìn)行組裝,。為了不使應(yīng)用系統(tǒng)在組裝過程中太復(fù)雜,先將構(gòu)件組裝成業(yè)務(wù)構(gòu)件,,再將業(yè)務(wù)構(gòu)件組裝成功能模塊,,最后將功能模塊組裝成應(yīng)用系統(tǒng)。
2.1.1 構(gòu)件組裝
構(gòu)件組裝工具的核心是解決構(gòu)件適配問題,。大多數(shù)情況下,,使用不同語言制作的構(gòu)件都需要做某種方式的修改以便與其他構(gòu)件相匹配,這個過程稱為構(gòu)件適配,,適配方法有白盒法,、黑盒法和灰盒法。文獻(xiàn)[7]對三種方法的技術(shù),、特點(diǎn)和實(shí)現(xiàn)的難易程度進(jìn)行了分析,,結(jié)論是采用灰盒法既可以實(shí)現(xiàn)構(gòu)件組裝的靈活性,又不至于使適配技術(shù)過于復(fù)雜,。本文在對各種灰盒法的適配技術(shù)進(jìn)行比較后,,采用基于連接器的適配技術(shù)。此方法將構(gòu)件功能的實(shí)現(xiàn)與其交互作用的實(shí)現(xiàn)相分離,,從而增加構(gòu)件組裝的可配置性,,在現(xiàn)有技術(shù)條件下,它是實(shí)現(xiàn)構(gòu)件動態(tài)組裝的有效途徑之一,。
構(gòu)件連接器可以表示為CL=(IDcl,,Ncl,,Rcls),其中,,IDcl為連接器唯一標(biāo)識,;Ncl為連接器名稱;Rcls為連接關(guān)系集合,,包含有多個接口連接關(guān)系,,每個連接關(guān)系Rcl可表示為Rcl=(IDsc,IDdc,,DTc,,Dc,MSc),,其中,,IDsc表示源構(gòu)件唯一標(biāo)識,IDdc表示目標(biāo)構(gòu)件唯一標(biāo)識,,DTc表示數(shù)據(jù)類型,,Dc為數(shù)據(jù)的值,MSc表示消息,。
2.1.2 模塊組裝
通過模塊組裝工具可以將業(yè)務(wù)模塊組裝成功能模塊,。本文使用類似連接器的方法設(shè)計模塊連接器。
模塊連接器可以表示為:ML=(IDml,,Nml,,Rmls),其中,,IDml為模塊連接器唯一標(biāo)識,;Nml為模塊連接器名稱;Rmls為連接關(guān)系集合,,包含有多個模塊接口連接關(guān)系,,每個連接關(guān)系Rml可表示為Rml=(IDsm,IDdm,,DTm,,Dm,MSm),其中,,IDsm表示源模塊唯一標(biāo)識,,IDdm表示目標(biāo)模塊唯一標(biāo)識,DTm表示數(shù)據(jù)類型,,Dm為數(shù)據(jù)的值,,MSm表示消息。
模塊連接器信息用XML適配文檔進(jìn)行描述,,其XML schema源碼如下:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XML
Schema">
<xsd:element name=" IDml " type="xsd:string"/>
<xsd:element name=" Nml ">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="Rml"type="xsd:string" maxOccurs=
"unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
2.1.3 菜單配置
菜單描述工具的主要功能是將菜單與對應(yīng)功能的模塊進(jìn)行綁定,,生成菜單適配文檔,。本系統(tǒng)菜單嵌套最多為三級,菜單適配文檔可表示為FL=(IDm,,IDf1,,IDf2,IDf3),,其中IDm表示功能模塊ID,,IDfi為第i級菜單ID,i=1,,2,,3。其源碼可參考前文給出的模塊適配文檔XML schema源碼,。
2.2 構(gòu)件運(yùn)行框架
構(gòu)件運(yùn)行框架主要包括:構(gòu)件調(diào)度器、構(gòu)件實(shí)例化工具以及各種XML配置文檔解析器,。其中,,配置文檔解析器的功能是解析對應(yīng)的XML配置文檔,其實(shí)現(xiàn)相對簡單,,在此不作介紹,。下面重點(diǎn)介紹構(gòu)件調(diào)度器和構(gòu)件實(shí)例化工具。
2.2.1 基于工作流控制的構(gòu)件調(diào)度模型
構(gòu)件調(diào)度是一個動態(tài)過程,,調(diào)度之前難以知道構(gòu)件運(yùn)行所需要的全部信息,,因此很難一次性建立構(gòu)件調(diào)度模型。即使建立了模型,,隨著構(gòu)件調(diào)度的執(zhí)行,,各種因素發(fā)生變化,也會使模型不能反應(yīng)信息的動態(tài)變化而導(dǎo)致構(gòu)件調(diào)度失敗,。
工作流技術(shù)[7,,8]最初被廣泛應(yīng)用于解決企業(yè)的項(xiàng)目調(diào)度問題,現(xiàn)已逐漸擴(kuò)展到許多領(lǐng)域,。工作流技術(shù)可以全面描述過程的信息,,在運(yùn)行時能夠動態(tài)監(jiān)視業(yè)務(wù)過程的執(zhí)行情況,因此可得到過程執(zhí)行的實(shí)時信息,,如:過程執(zhí)行,、資源利用、時間計劃情況等,,并能根據(jù)這些信息生成新的調(diào)度方案,。因此,工作流技術(shù)可以應(yīng)用于解決構(gòu)件調(diào)度問題,。
本文提出一種基于工作流技術(shù)的構(gòu)件調(diào)度模型,,模塊包括:過程控制模型,、公共資源服務(wù)模型、消息處理模型,、工作流數(shù)據(jù)模型,。各模型之間的調(diào)用關(guān)系如圖3所示。
過程控制模型是構(gòu)件調(diào)度模型的核心和骨架,,定義應(yīng)用系統(tǒng)所有構(gòu)件的處理流程,,描述構(gòu)件調(diào)度問題的約束,包括模塊之間以及組成模塊的構(gòu)件之間的邏輯關(guān)系,、詳細(xì)描述(執(zhí)行所需的信息,、資源)等。這些信息可以在構(gòu)件調(diào)度過程中通過各種XML配置文檔解析器解析對應(yīng)的XML配置文檔獲取,。利用這些信息可以預(yù)測并找出工作流所管理的全部過程實(shí)例之間存在的資源沖突情況,。通過把產(chǎn)生資源沖突的過程實(shí)例按照一定的規(guī)則抽取出來就可以得到項(xiàng)目調(diào)度的動態(tài)模型。由于過程實(shí)例的執(zhí)行情況不斷變化,,如某些過程實(shí)例執(zhí)行結(jié)束,、某些實(shí)例被終止、某些活動被掛起,、某些異常出現(xiàn)等,,因此按照一定的周期動態(tài)地從這些過程實(shí)例中所得到的過程模型也會隨之不斷更新,得到“最新”的調(diào)度模型,,這解決了調(diào)度模型不能反映信息動態(tài)變化的問題,。
公共資源服務(wù)模型定義構(gòu)件調(diào)度過程中需要的公共服務(wù)資源,如數(shù)據(jù)庫服務(wù),、打印服務(wù)等,。
消息處理模型定義構(gòu)件調(diào)度過程中的事件屬性,它是一個構(gòu)件向另一個構(gòu)件發(fā)出的某種通知,。
工作流數(shù)據(jù)模型定義了與構(gòu)件調(diào)度模型執(zhí)行密切相關(guān)的數(shù)據(jù),。從某種意義上講,它確定構(gòu)件執(zhí)行過程狀態(tài)轉(zhuǎn)換的條件,。
2.2.2 構(gòu)件實(shí)例化
構(gòu)件是動態(tài)調(diào)用的,,即應(yīng)用系統(tǒng)運(yùn)行前構(gòu)件都沒有實(shí)例化,只有在執(zhí)行過程中調(diào)用時才實(shí)例化,??梢越柚瓷錂C(jī)制實(shí)現(xiàn)構(gòu)件動態(tài)實(shí)例化。本文的構(gòu)件實(shí)例化工具是在.NET平臺下用C#語言實(shí)現(xiàn),,其關(guān)鍵代碼如下:
private void CreateInstanceAndInvoke()
{
ParseXML(),;//解析相關(guān)XML文檔
SourceComXMLPath=COMSchedule();//構(gòu)件調(diào)度器
Assembly curAssm=Assembly.LoadFile(SourceComXMLPath),;
Type[] types=curAssm.GetTypes(),;
if (isInterface)
{
foreach (Type type in types)
{
MethodInfo[] methodInfos=type.GetMethods(),;
foreach (MethodInfo methodInfo in methodInfos)
{
ParameterInfo[] paras=
methodInfo.GetParameters();
object[] objSourceParas=
new object[paras.Length];
object[] objTargetParas;
if (methodInfo.Name==strSourceComInter-
faceName)
{
objTargetParas=methodInfo.Invoke(curAssm.CreateInstance
(type.FullName),
out objSourceParas);
InvokeTarget();//調(diào)用目標(biāo)構(gòu)件的接口
}
}
}
}
else
{
……
}
…
}
3 應(yīng)用實(shí)例
本文設(shè)計的基于工作流控制的構(gòu)件化軟件框架已經(jīng)在某型設(shè)備接口測試系統(tǒng)中得到應(yīng)用,。某型設(shè)備有多種待測接口,,下面以其A/D接口測試為例說明本系統(tǒng)的有效性。
圖4為對某型設(shè)備A/D,、D/A接口構(gòu)件劃分結(jié)果圖,。構(gòu)件通過構(gòu)件連接器組裝成業(yè)務(wù)模塊,業(yè)務(wù)模塊通過模塊連接器組裝成功能模塊,。組裝后的某型設(shè)備接口測試系統(tǒng)對A/D接口測試結(jié)果如圖5所示,。測試中,A/D接口的通道13測試誤差大于設(shè)定誤差的最大值,,未通過測試,;其他接口各通道的測試誤差均小于其最大誤差要求,通過測試,。
實(shí)踐應(yīng)用證明,,該軟件框架可以實(shí)現(xiàn)基于構(gòu)件的應(yīng)用系統(tǒng)的插座式組裝,使其能從原子構(gòu)件集成子模塊,、功能模塊直至整個應(yīng)用系統(tǒng)。此方法支持系統(tǒng)的快速開發(fā)和修改,,具有較高的靈活性和較好的可擴(kuò)展性,,達(dá)到了令人滿意的伸縮性。
針對目前大多數(shù)軟件模塊間耦合緊密,、軟件可復(fù)用性低,、可擴(kuò)展性差等問題。將XML,、工作流和構(gòu)件技術(shù)相結(jié)合,,設(shè)計了圖形化方式構(gòu)件組裝框架和構(gòu)件運(yùn)行框架。用戶可以在構(gòu)件組裝框架下集成應(yīng)用系統(tǒng),,在構(gòu)件運(yùn)行框架下運(yùn)行組裝的系統(tǒng)可以實(shí)現(xiàn)相應(yīng)的業(yè)務(wù)功能,。實(shí)踐證明,該軟件框架可以實(shí)現(xiàn)基于構(gòu)件的應(yīng)用系統(tǒng)的插座式組裝,,使其能從原子構(gòu)件集成子模塊,、功能模塊直至整個應(yīng)用系統(tǒng)。此方法支持系統(tǒng)的快速開發(fā)和修改,,具有較高的靈活性和較好的可擴(kuò)展性,,避免了軟件的重復(fù)開發(fā),節(jié)省了大量費(fèi)用,,達(dá)到了令人滿意的伸縮性效果,。
參考文獻(xiàn)
[1] 楊芙清,,王千祥,梅宏,,等.基于復(fù)用的軟件生產(chǎn)技術(shù)[J].中國科學(xué),,2001,31(4):363-371.
[2] 任洪敏,,錢樂秋.構(gòu)件組裝及其形式化推導(dǎo)研究[JJ.軟件學(xué)報,,2003,l4(6):1066-1074.
[3] 王強(qiáng),,何克清,,李兵,等.基于MMF的互操作性軟構(gòu)件庫管理模型的研究[J].計算機(jī)工程,,2005,,31(16):57-58.
[4] 吳信永,宋東,,劉飛.基于構(gòu)件技術(shù)的通用ATS框架設(shè)計[J].計算機(jī)測量與控制,,2008,16(2):141-143.
[5] 王忠杰,,徐曉飛,,戰(zhàn)德臣.基于特征的構(gòu)件模型及其規(guī)范化設(shè)計過程[J].軟件學(xué)報,2006,,17(1):39-47.
[6] 徐瑋,,保林,李昭原.企業(yè)信息系統(tǒng)業(yè)務(wù)構(gòu)件研究[J]. 軟件學(xué)報,,2003,,14(7):1213-1220.
[7] 王志堅(jiān),費(fèi)玉奎,,婁淵清.軟件構(gòu)件技術(shù)及其應(yīng)用[M]. 北京:科學(xué)出版社,,2005.
[8] 李偉平,范玉順.基于工作流的資源受限項(xiàng)目調(diào)度研 究[J].清華大學(xué)學(xué)報(自然科學(xué)版),,2004,,44(10):
1384-138.