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