摘要:本文介紹了一個CORBA服務(wù)器接口測試工具CTester的設(shè)計和實(shí)現(xiàn)。CTester具有平臺無關(guān)性、采用圖形化GUI界面、支持腳本定義、采用動態(tài)調(diào)用DII等特點(diǎn),為分布式系統(tǒng)的開發(fā)提供測試手段。
關(guān)鍵詞:CORBA; DII; Java
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2008)06-11010-02
The Design and Implementation of the CORBA Server Interfaces Test Tool
BI Xue-jun,XIAO Qing,HAO Na
(Department of Information Engineering of Academy of Armored Force Engineering,Beijing 100072,China)
Abstract: The paper introduces the design and implementation of the CORBA server interfaces test tool CTester. It is independent of platform, providing a graphic user interface,supporting for script definition and dynamic invocation. It provides an easy way to test distribute system.
Key words: CORBA(Common Object Request Broker Architecture); DII (Dynamic Invocation Interface); Java
1 引言
隨著Internet的廣泛運(yùn)用,將應(yīng)用擴(kuò)展到局域網(wǎng)、廣域網(wǎng)甚至Internet上已成為用戶的普遍需求,為此分布式計算成了新的熱點(diǎn)。在分布式計算環(huán)境中,異構(gòu)性是一個十分明顯的特點(diǎn)。一個典型的分布環(huán)境包括有大型主機(jī)、UNIX工作站和PC機(jī),各種機(jī)器所采用的操作系統(tǒng)和網(wǎng)絡(luò)通信協(xié)議也是千差萬別,在這樣的異構(gòu)環(huán)境下實(shí)現(xiàn)信息和軟件資源的共享將十分困難,而一個健壯的分布計算框架將為分布應(yīng)用軟件的開發(fā)帶來極大的好處。為了實(shí)現(xiàn)這一目標(biāo),OMG組織于1991年提出了公用對象請求代理程序結(jié)構(gòu)的技術(shù)規(guī)范CORBA[1](Common Object Request Broker Architecture,通用對象請求代理體系結(jié)構(gòu))。CORBA規(guī)范充分利用了現(xiàn)今軟件技術(shù)發(fā)展的最新成果,在基于網(wǎng)絡(luò)的分布式應(yīng)用環(huán)境下實(shí)現(xiàn)應(yīng)用軟件的集成,使得面向?qū)ο蟮能浖诜植?、異?gòu)環(huán)境下實(shí)現(xiàn)可重用、可移植和互操作。
要想編寫一個良好健壯的CORBA應(yīng)用程序,首先需要進(jìn)行有效的測試。一般的測試過程是,開發(fā)人員編寫完CORBA服務(wù)器程序后,首先花費(fèi)一定的時間開發(fā)客戶程序來調(diào)用CORBA服務(wù)器對象。如果要針對大量的各種輸入數(shù)據(jù)進(jìn)行測試,那么客戶端測試程序的開發(fā)工作量將會很大。因此需要研制開發(fā)CORBA服務(wù)器接口測試工具,進(jìn)行有效的CORBA對象接口測試,驗(yàn)證CORBA接口實(shí)現(xiàn)的正確性。
2 系統(tǒng)設(shè)計
該CORBA服務(wù)器接口測試工具以下簡稱為CTester,它能夠向CORBA對象調(diào)用指定的操作,獲取或設(shè)置CORBA對象的屬性,驗(yàn)證CORBA接口的實(shí)現(xiàn),其參數(shù)設(shè)置方便,測試結(jié)果顯示直觀。支持測試腳本定義,用戶熟悉IDL就可以編寫測試腳本,測試腳本建立簡便,可重復(fù)使用。該工具完全采用java編寫,遵從CORBA2.3規(guī)范[2],工作平臺為IONA公司的orbix2000[3]。
2.1 設(shè)計原則
Ctester測試工具在開發(fā)過程中,遵循以下幾個原則:
1)平臺無關(guān)性:測試工具的運(yùn)行應(yīng)保證與操作系統(tǒng)無關(guān),因此系統(tǒng)采用JAVA語言實(shí)現(xiàn);
2)使用簡便靈活:采用圖形化GUI界面,使用簡便靈活,顯示結(jié)果直觀,操作易于掌握;
3)支持腳本定義:用戶熟悉IDL就可以編寫測試腳本,測試腳本建立簡便,可重復(fù)使用;
4)采用動態(tài)調(diào)用DII:動態(tài)方式允許對任意對象進(jìn)行操作,借助接口庫,動態(tài)方式可以在運(yùn)行時刻查詢各對象所支持的操作,無論是操作的對象、發(fā)起調(diào)用的參數(shù),還是發(fā)起調(diào)用的次數(shù)等等都可以由客戶程序在運(yùn)行時刻視當(dāng)時環(huán)境和需要而決定。因此,采用動態(tài)方式相對靜態(tài)方式而言靈活性大大增強(qiáng)。
2.2 系統(tǒng)結(jié)構(gòu)
整個系統(tǒng)結(jié)構(gòu)按功能劃分為六個模塊,分別是測試控制模塊、腳本定制模塊、腳本解釋模塊、測試驅(qū)動模塊、動態(tài)調(diào)用模塊、結(jié)果處理模塊。其中測試控制模塊提供了一個總的控制界面,進(jìn)行測試過程的控制和管理,測試人員輸入指令,進(jìn)行任意指定參數(shù)的操作或?qū)傩哉{(diào)用。在調(diào)用結(jié)束后,由測試結(jié)果處理模塊處理并顯示返回值及輸入/輸出參數(shù),結(jié)果也可以保存在文件中。
腳本定制模塊采用IDL格式定義測試腳本,能夠編輯、管理測試腳本文件。用戶熟悉IDL就可以編寫測試腳本,測試腳本的解釋由腳本解釋模塊進(jìn)行。通過測試腳本可以向CORBA對象調(diào)用指定的操作,也可以獲取或設(shè)置CORBA對象的屬性。
在測試執(zhí)行過程中,測試驅(qū)動模塊和動態(tài)調(diào)用模塊從接口存儲庫載入被測CORBA對象IDL細(xì)節(jié)。為了保持測試工具的靈活性,采用動態(tài)調(diào)用方式。系統(tǒng)結(jié)構(gòu)如圖1所示:
3 CTester工具實(shí)現(xiàn)的關(guān)鍵技術(shù)
3.1 動態(tài)調(diào)用技術(shù)DII
CORBA服務(wù)器接口測試工具CTester從Client/Server模式看,實(shí)際上相當(dāng)于客戶端,客戶程序?qū)h(yuǎn)端對象的調(diào)用,有兩種方式:靜態(tài)方式和動態(tài)方式。本測試工具需要對任意CORBA服務(wù)器的屬性/操作進(jìn)行調(diào)用,因此采用動態(tài)調(diào)用DII[4]的方式,相對靜態(tài)方式而言,該種方式有以下幾個優(yōu)點(diǎn):
(1)靈活。動態(tài)方式允許對任意對象進(jìn)行操作,所需要的只是目標(biāo)對象的對象引用。借助接口庫,動態(tài)方式可以在運(yùn)行時刻查詢對象所支持的屬性/操作信息,大大提高了程序的靈活性。
(2)客戶程序的可移植性增強(qiáng)。由于DII與客戶之間的接口是標(biāo)準(zhǔn)的,因此由動態(tài)方式實(shí)現(xiàn)的代碼具有良好的可移植性。
(3)可執(zhí)行程序的“體積”小。與靜態(tài)方式不同,DII不需要為每個接口生成碼根和框架,無論程序中使用多少接口,所需要的只是一套支持DII的接口庫,這樣可執(zhí)行程序的“體積”會相對較小。
當(dāng)然,與靜態(tài)方式相比,動態(tài)方式有以下的缺點(diǎn):
(1)使用復(fù)雜。使用靜態(tài)方式時,對目標(biāo)對象的操作都施加在一個本地的代理對象上,相應(yīng)對象支持的所有操作及格式都已經(jīng)預(yù)先定義在這個代理對象中,因而使用方便。在動態(tài)方式下,程序員需要自己動手,“臨時”構(gòu)建一個請求并發(fā)送,同時程序還需要查詢接口庫以獲得屬性/操作必要描述信息,這些過程都較靜態(tài)方式復(fù)雜。
(2)速度緩慢。由于靜態(tài)方式下類型信息都是確定的,因此速度較快;而動態(tài)方式實(shí)現(xiàn)時,類型信息都是動態(tài)獲知,速度不可避免要慢一些。此外,程序要花去大量時間來查詢接口庫,尤其當(dāng)被查詢的接口定義存放在遠(yuǎn)端時,這些查詢還會引發(fā)遠(yuǎn)端調(diào)用,致使動態(tài)方式的速度變得更慢。
鑒于上述動態(tài)調(diào)用速度緩慢的缺點(diǎn),為避免程序每次調(diào)用都去查詢接口庫來獲得屬性/操作的描述信息,我們采用預(yù)先將接口庫中所有數(shù)據(jù)類型的接口定義對象轉(zhuǎn)化為本地用java實(shí)現(xiàn)的類對象,這樣程序就不必花費(fèi)大量的時間來查詢接口庫,而只需調(diào)用所需類的屬性或方法即可,大大提高了調(diào)用執(zhí)行的效率。
動態(tài)調(diào)用的過程簡要?dú)w納如下:
(1)獲得接口名,將目標(biāo)對象接口信息注冊到接口庫中;
(2)從接口庫的對象中,找到所要調(diào)用的操作(或方法)的描述;
(3)建立調(diào)用參數(shù)表,并逐一填入?yún)?shù);
(4)創(chuàng)建請求,請求中應(yīng)包括目標(biāo)對象的引用、方法名、參數(shù)表和返回值;
(5)調(diào)用請求,并作結(jié)果處理。
3.2 采用面向?qū)ο蟮南到y(tǒng)實(shí)現(xiàn)系統(tǒng)采用面向?qū)ο蟮乃枷?,將接口庫中各種數(shù)據(jù)類型對象一一轉(zhuǎn)化為用java類實(shí)現(xiàn)的對象,對CORBA服務(wù)器屬性/操作的調(diào)用變成了對相應(yīng)java類的屬性方法調(diào)用,提高了接口庫查詢效率,使得程序結(jié)構(gòu)更加合理,易于維護(hù)。啟動CTester工具后首先要執(zhí)行“Load-ifr”命令,將接口庫中所有IDL文件詳細(xì)描述信息裝入CorbaRepository類[5],其中也包括要測試的CORBA服務(wù)器IDL描述文件信息,然后再調(diào)用“attribute”或“operation”命令對CORBA服務(wù)器中的屬性、參數(shù)進(jìn)行設(shè)置/獲取,對CORBA服務(wù)器中的操作進(jìn)行調(diào)用,獲得inout/out參數(shù)結(jié)果和返回值,驗(yàn)證結(jié)果返回值是否正確。
4 總結(jié)
本課題在對CORBA服務(wù)器接口測試技術(shù)經(jīng)過大量的研究后,開發(fā)了相應(yīng)的測試工具來驗(yàn)證CORBA接口的實(shí)現(xiàn),該工具可以為分布式系統(tǒng)的開發(fā)提供測試手段。
參考文獻(xiàn):
[1] 汪蕓.CORBA技術(shù)及其應(yīng)用[M].江蘇:東南大學(xué)出版社,1999.1-12.
[2] 朱其亮,鄭斌.CORBA 原理及應(yīng)用[M].北京:北京郵電大學(xué)出版社,2001.15-37.
[3] Orbix 2000 Programmer’s Guide Java Edition[EB/OL].www.iona.com.2004-09-16.
[4] Orbix 2000 Programmer’s Reference Java Edition[EB/OL] .www.iona.com.2005-06-07.
[5] IONA Orbix 2000 Administrator’s Guide, Java Edition[EB/OL] .www.iona.com.2004-01-15.