摘要:本文介紹了一個CORBA服務器接口測試工具CTester的設計和實現。CTester具有平臺無關性、采用圖形化GUI界面、支持腳本定義、采用動態調用DII等特點,為分布式系統的開發提供測試手段。
關鍵詞:CORBA; DII; Java
中圖分類號:TP311文獻標識碼: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的廣泛運用,將應用擴展到局域網、廣域網甚至Internet上已成為用戶的普遍需求,為此分布式計算成了新的熱點。在分布式計算環境中,異構性是一個十分明顯的特點。一個典型的分布環境包括有大型主機、UNIX工作站和PC機,各種機器所采用的操作系統和網絡通信協議也是千差萬別,在這樣的異構環境下實現信息和軟件資源的共享將十分困難,而一個健壯的分布計算框架將為分布應用軟件的開發帶來極大的好處。為了實現這一目標,OMG組織于1991年提出了公用對象請求代理程序結構的技術規范CORBA[1](Common Object Request Broker Architecture,通用對象請求代理體系結構)。CORBA規范充分利用了現今軟件技術發展的最新成果,在基于網絡的分布式應用環境下實現應用軟件的集成,使得面向對象的軟件在分布、異構環境下實現可重用、可移植和互操作。
要想編寫一個良好健壯的CORBA應用程序,首先需要進行有效的測試。一般的測試過程是,開發人員編寫完CORBA服務器程序后,首先花費一定的時間開發客戶程序來調用CORBA服務器對象。如果要針對大量的各種輸入數據進行測試,那么客戶端測試程序的開發工作量將會很大。因此需要研制開發CORBA服務器接口測試工具,進行有效的CORBA對象接口測試,驗證CORBA接口實現的正確性。
2 系統設計
該CORBA服務器接口測試工具以下簡稱為CTester,它能夠向CORBA對象調用指定的操作,獲取或設置CORBA對象的屬性,驗證CORBA接口的實現,其參數設置方便,測試結果顯示直觀。支持測試腳本定義,用戶熟悉IDL就可以編寫測試腳本,測試腳本建立簡便,可重復使用。該工具完全采用java編寫,遵從CORBA2.3規范[2],工作平臺為IONA公司的orbix2000[3]。
2.1 設計原則
Ctester測試工具在開發過程中,遵循以下幾個原則:
1)平臺無關性:測試工具的運行應保證與操作系統無關,因此系統采用JAVA語言實現;
2)使用簡便靈活:采用圖形化GUI界面,使用簡便靈活,顯示結果直觀,操作易于掌握;
3)支持腳本定義:用戶熟悉IDL就可以編寫測試腳本,測試腳本建立簡便,可重復使用;
4)采用動態調用DII:動態方式允許對任意對象進行操作,借助接口庫,動態方式可以在運行時刻查詢各對象所支持的操作,無論是操作的對象、發起調用的參數,還是發起調用的次數等等都可以由客戶程序在運行時刻視當時環境和需要而決定。因此,采用動態方式相對靜態方式而言靈活性大大增強。
2.2 系統結構
整個系統結構按功能劃分為六個模塊,分別是測試控制模塊、腳本定制模塊、腳本解釋模塊、測試驅動模塊、動態調用模塊、結果處理模塊。其中測試控制模塊提供了一個總的控制界面,進行測試過程的控制和管理,測試人員輸入指令,進行任意指定參數的操作或屬性調用。在調用結束后,由測試結果處理模塊處理并顯示返回值及輸入/輸出參數,結果也可以保存在文件中。
腳本定制模塊采用IDL格式定義測試腳本,能夠編輯、管理測試腳本文件。用戶熟悉IDL就可以編寫測試腳本,測試腳本的解釋由腳本解釋模塊進行。通過測試腳本可以向CORBA對象調用指定的操作,也可以獲取或設置CORBA對象的屬性。
在測試執行過程中,測試驅動模塊和動態調用模塊從接口存儲庫載入被測CORBA對象IDL細節。為了保持測試工具的靈活性,采用動態調用方式。系統結構如圖1所示:

3 CTester工具實現的關鍵技術
3.1 動態調用技術DII
CORBA服務器接口測試工具CTester從Client/Server模式看,實際上相當于客戶端,客戶程序對遠端對象的調用,有兩種方式:靜態方式和動態方式。本測試工具需要對任意CORBA服務器的屬性/操作進行調用,因此采用動態調用DII[4]的方式,相對靜態方式而言,該種方式有以下幾個優點:
(1)靈活。動態方式允許對任意對象進行操作,所需要的只是目標對象的對象引用。借助接口庫,動態方式可以在運行時刻查詢對象所支持的屬性/操作信息,大大提高了程序的靈活性。
(2)客戶程序的可移植性增強。由于DII與客戶之間的接口是標準的,因此由動態方式實現的代碼具有良好的可移植性。
(3)可執行程序的“體積”小。與靜態方式不同,DII不需要為每個接口生成碼根和框架,無論程序中使用多少接口,所需要的只是一套支持DII的接口庫,這樣可執行程序的“體積”會相對較小。
當然,與靜態方式相比,動態方式有以下的缺點:
(1)使用復雜。使用靜態方式時,對目標對象的操作都施加在一個本地的代理對象上,相應對象支持的所有操作及格式都已經預先定義在這個代理對象中,因而使用方便。在動態方式下,程序員需要自己動手,“臨時”構建一個請求并發送,同時程序還需要查詢接口庫以獲得屬性/操作必要描述信息,這些過程都較靜態方式復雜。
(2)速度緩慢。由于靜態方式下類型信息都是確定的,因此速度較快;而動態方式實現時,類型信息都是動態獲知,速度不可避免要慢一些。此外,程序要花去大量時間來查詢接口庫,尤其當被查詢的接口定義存放在遠端時,這些查詢還會引發遠端調用,致使動態方式的速度變得更慢。
鑒于上述動態調用速度緩慢的缺點,為避免程序每次調用都去查詢接口庫來獲得屬性/操作的描述信息,我們采用預先將接口庫中所有數據類型的接口定義對象轉化為本地用java實現的類對象,這樣程序就不必花費大量的時間來查詢接口庫,而只需調用所需類的屬性或方法即可,大大提高了調用執行的效率。
動態調用的過程簡要歸納如下:
(1)獲得接口名,將目標對象接口信息注冊到接口庫中;
(2)從接口庫的對象中,找到所要調用的操作(或方法)的描述;
(3)建立調用參數表,并逐一填入參數;
(4)創建請求,請求中應包括目標對象的引用、方法名、參數表和返回值;
(5)調用請求,并作結果處理。
3.2 采用面向對象的系統實現系統采用面向對象的思想,將接口庫中各種數據類型對象一一轉化為用java類實現的對象,對CORBA服務器屬性/操作的調用變成了對相應java類的屬性方法調用,提高了接口庫查詢效率,使得程序結構更加合理,易于維護。啟動CTester工具后首先要執行“Load-ifr”命令,將接口庫中所有IDL文件詳細描述信息裝入CorbaRepository類[5],其中也包括要測試的CORBA服務器IDL描述文件信息,然后再調用“attribute”或“operation”命令對CORBA服務器中的屬性、參數進行設置/獲取,對CORBA服務器中的操作進行調用,獲得inout/out參數結果和返回值,驗證結果返回值是否正確。
4 總結
本課題在對CORBA服務器接口測試技術經過大量的研究后,開發了相應的測試工具來驗證CORBA接口的實現,該工具可以為分布式系統的開發提供測試手段。
參考文獻:
[1] 汪蕓.CORBA技術及其應用[M].江蘇:東南大學出版社,1999.1-12.
[2] 朱其亮,鄭斌.CORBA 原理及應用[M].北京:北京郵電大學出版社,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.