(北方工業大學 信息工程學院, 北京 100144)
摘 要:針對網絡游戲軟件測試方法研究方面的不足,結合基于模型測試方法和TTCN測試技術,對網絡游戲軟件可玩性的測試方法進行研究。采用MSC圖作為網絡游戲玩法建模工具,建立玩法測試模型;用TTCN3核心語言對玩法測試模型加以實現;結合一個具體的網絡游戲軟件測試案例,給出上述測試方法和技術的解釋。從理論角度驗證了基于模型測試方法在網絡游戲軟件測試上的可行性;從技術角度表明了TTCN對網絡游戲軟件測試的有效性。
關鍵詞:網絡游戲; 消息順序圖; 測試及測試控制表示法第3版; 協議一致性測試; 基于模型的測試
中圖分類號:TP311 文獻標志碼:A
文章編號:10013695(2009)01014603
Study on method of testing online game based on MSC
ZHAO Huiqun, SU Yulan, SUN Jing
(College of Information Engineering, North China University of Technology, Beijing 100144, China)
Abstract:In view of the insufficiency of method research on testing online game, combined modelbased testing and TTCN test technology,studied on the method of testing online game playability. Using MSC as the modeling tool of online game,established test model of it; the model be actualized by TTCN3 core language; combined a concrete online game software test case, provided the explanations of the method and technology described above. Theoretically confirmed the feasibility of modelbased testing applied to online game software testing, in the technical angle indicated the TTCN3 validity to online game software testing.
Key words:online game; message sequence charts; testing and test control notation version 3; protocol conformance testing;modelbased testing
0 引言
目前,游戲產業迅猛發展,游戲測試已成為游戲產品開發不可缺少的環節。然而,我國的游戲軟件測試特別是網絡游戲軟件測試技術還沒有得到很好的研究,這給網絡游戲軟件的發展帶來一定的障礙。游戲的可玩性測試是一項新的測試需求,隨著網絡游戲的發展,這種需求還會不斷增加。然而,游戲的可玩性測試的相關方法和技術還沒有形成,游戲測試更多地是采用β測試來完成,即通過發布試用版游戲來達到檢測可玩性的目的。隨著對測試自動化的需求,傳統的游戲測試方法受到很大的挑戰。
基于模型的軟件測試方法是一種新的測試理論,它強調測試模型的設計,強調測試與開發的同步[1]。基于模型的軟件測試可以根據軟件行為模型和結構模型生成測試用例。文獻[2]綜述了基于模型的軟件測試方法的研究現狀,介紹了三種軟件系統建模方法,并給出了一些應用的評述,但沒有討論測試模型與軟件系統模型的關系,沒有區分測試模型與開發模型的不同。文獻[3]從測試與開發過程的角度討論了測試與開發的關系,但僅從概念上進行了討論,沒有給出具體的建模方法。文獻[4]提出了一種新的基于模型的測試方法,該方法從軟件實現入手,試圖導出設計模型,并與初始的設計模型進行比較以發現問題。該方法執行了一條與從建模到檢測相反的技術路線,但由于該方法的技術支持不夠,很難得到推廣。
文獻[5,6]對手機網絡游戲結合協議一致性測試進行了研究,但只對單個客戶端和服務器通信的過程進行了測試,對于多個客戶端通過服務器交互信息進行通信的情況并沒有涉及。本文在文獻[5,6]研究的基礎上,對多客戶端網絡游戲進行了研究,提出了利用基于模型的測試方法對多客戶端網絡游戲進行測試的方法,并用魔獸網絡游戲測試實例驗證了該方法的有效性。
1 TTCN3及MSC簡介
TTCN3(testing and test control notation version 3)即測試及測試控制表示法第三版是由歐洲電信標準協會發布的一個國際標準,可以用做多種通信端口上的各種響應系統測試的描述語言。典型的應用領域是協議測試(包括移動協議和互聯網協議)、服務測試(包括增補服務)、模塊測試、基于平臺、APIs等的CORBA測試。TTCN3意在用做獨立于測試方法、層和協議的測試套的描述[7]。TTCN3最新標準規范包括TTCN3核心語言、TTCN3表格表示形式、TTCN3圖形表示形式、TTCN3操作語義、TTCN3運行時接口、TTCN3控制接口、在TTCN3中使用ASN.1(abstract syntax notation one)等九部分。
TTCN3核心語言是TTCN3標準規范中最重要的部分。核心語言是基于文本的TTCN3測試語言。TTCN3的頂層單元是模塊,一個模塊中不能包含子模塊,但是它可以從其他模塊中引入定義。模塊可以帶有參數列表去提供測試套參數化的一個形式,一個模塊由一個定義部分和一個控制部分組成。術語測試套與 一個包含測試例和一個控制部分的完整的TTCN3模塊是同義的。模塊的定義部分定義測試成分、通信端口、數據類型、常數、測試數據模板、函數、測試端口上調用的過程特征(signatures)、測試例等。模塊的控制部分調用測試例并控制它們的執行。
消息順序圖(MSC)是ITUTZ.120建議中給出的一種形式語言,用來描述多個實體之間和實體與環境之間消息交互的順序。在協議開發中,MSC可以用來描述兩個協議實體之間或多個協議實體之間PDU(協議數據單元)的交換時序;在通信軟件中,MSC可以用來描述兩個通信實體之間或多個通信實體之間消息交互的情況。MSC可以與TTCN聯合,支持測試用例的自動生成[8]。
下面結合具體的MSC圖來介紹消息順序圖中的各種實體類型。圖1為客戶端1和服務器的MSC圖。表1簡單地介紹了圖1中用到的MSC圖符及含義。
圖1表示的含義是兩個實例,即客戶端1和服務器。客戶端1向服務器發送OnDesk1消息后啟動定時器,若客戶端1在定時器限定時間內接收到服務器的響應消息OnDesk1Over則進一步向服務器發送消息StartFrame1,若客戶端1在定時器限定時間內收到服務器的響應消息StartFrameOver,則停止定時器,狀態為pass,定時器超時或接收到其他消息狀態均為fail。
2 基于MSC的網絡游戲軟件測試方法
目前的網絡游戲大多有兩種連接類型,即端對端連接和客戶服務器連接,而用得最多的就是客戶服務器連接方式。本文主要針對客戶服務器連接方式的網絡游戲可玩性測試進行研究。
TTCN3進行基于模型的網絡游戲測試的過程為:根據游戲的玩法建立模型;接著根據模型編寫TTCN3測試套,將編寫完成的測試套生成可執行測試套,在測試平臺上執行測試;最后分析測試結果形成測試報告。若被測系統更新而沒有改變游戲規則,則原來的測試套可以繼續用來測試新的系統;若改變了游戲規則則需要按照上面的步驟重新進行測試。測試過程如圖2所示。
下面解釋具體的建模方法和根據模型編寫TTCN3測試套的步驟。
1)網絡游戲軟件可玩性建模方法
使用消息順序圖(MSC)對網絡游戲的玩法進行建模。具體方法如下:
a) 抽象出網絡游戲客戶端和服務器端的通信規則。
b) 將游戲客戶端和服務器端之間的交互信息描述為消息順序圖中的消息。
c) 服務器和客戶端各自為一個實例,多個客戶端的只需要描述兩個客戶端的情況即可,即一個服務器實例、兩個客戶端實例。
d) 將服務器和客戶端之間的消息交互按照時間的順序在對應的實例之間用消息的方式表示。
e) 在必要的地方加上定時器和其他條件限制。
f) 每一條邏輯路徑最后都需要加上狀態,描述系統的全局狀態或者局部狀態。
2)根據建立的消息順序圖模型寫出對應的測試套
根據模型編寫TTCN3測試套,主要是將MSC圖各實體映射為TTCN3的概念。具體映射規則如表2所示。
表2 消息順序圖和TTCN3 概念映射
MSC圖TTCN3核心語言
實例PCO 控制觀察點
消息發送或接收消息
定時器定時器(啟動、停止、超時)
狀態判斷
線內表達式(alt)alt語句或者可選步
寫測試套的具體步驟如下:
a)定義消息順序圖中出現的消息用到的數據類型和消息模板。
b)定義測試配置用來描述構建測試結構的通信端口和通信組建。
c)根據模型的消息交互順序寫出對應邏輯的函數。
d)完成測試例和測試套的書寫。
所謂協議是預先定義好的一系列規則。協議測試是用來保證協議實現正確性和有效性的重要手段。協議一致性測試是依據協議的文本描述對協議的某個實現進行測試,檢測協議實現是否符合協議標準。網絡游戲的玩法也是一些特定的規則,如客戶端發送一條命令,服務器端有確定的回應消息。客戶端和服務器通過消息的交互傳遞信息。將這些交互的消息看做是一條一條的規則,客戶端服務器之間的通信規則理解為一種特定的協議。要測試游戲規則的實現是否與設計的一致,可以用協議一致性測試方法對其進行測試;而TTCN3是進行協議一致性測試的規范語言,所以用TTCN3對網絡游戲的規則進行一致性測試是可行的。結合消息順序圖(MSC)易于描述實體間消息交互和可以與TTCN聯合的特點,所以可以用TTCN3對網絡游戲利用基于模型的測試方法進行測試。
利用這種方法建立的模型和根據模型編寫的測試套,在游戲規則不改變的情況下,可以用于同種規則的所有游戲的測試。測試套可以重復執行,充分體現了可重用的特點。在一個測試套中,可以自定義很多測試例,只需要運行一下即可完成相應的測試,而不再需要一次一次地執行游戲來進行測試,更接近于自動化測試。在將來的工作中,會完成從模型到測試套的自動轉換工作,以滿足自動化測試的需要。
3 一個網絡游戲測試實例
本文使用簡單的魔獸網絡游戲作為測試實例。該游戲的主要功能是用戶進入游戲大廳,選擇角色和桌子坐下,若有用戶選擇和自己相同的桌子坐下并選擇對應的角色才能開始游戲。開始游戲后,游戲者可以互相向對方扔武器,若扔中對方,則對方會流血,直至其中一方血流干為止,游戲結束。血先流干的一方失敗,對方勝利。
該游戲使用C/S結構開發,利用Socket通信編程實現客戶端和服務器的通信。這里服務器的任務是與客戶端聯機、接收客戶端請求、處理消息并發送消息給客戶端。
本文將對啟動游戲的規則測試實現進行分析說明。規則為:客戶端1和客戶端2分別向服務器發送坐上桌子的命令,服務器給出對應的回應信息,當兩個客戶端均發送了啟動游戲的命令后,服務器才同時給兩個客戶端回應游戲界面已啟動的消息。該過程的MSC圖如圖3所示。
對客戶端和服務器之間消息交互的過程進行詳細描述,其中客戶端1和服務器之間消息交互的詳細MSC圖見圖1。同樣可以細化客戶端2和服務器通信的過程。 至此,符合第2章中描述的游戲規則的模型已經建立完成。
3.1 測試套編寫
根據第2章中的方法把服務器看做是被測系統,客戶端看做是測試系統,通過TTCN3測試例模擬客戶端的行為來實現測試,兩個客戶端可以通過并行測試成分來實現。具體步驟如下:
a)首先定義消息順序圖中出現的消息用到的數據類型和模板。消息模板的定義有兩種方法,即逐個定義和采用帶參數的消息模板兩種形式。逐個定義消息模板比較繁瑣但便于與模型中的消息進行對照;帶參數的消息模板雖然定義方便,但在不太熟悉的情況下不易與消息順序圖中的消息進行對照。為便于理解,本文采用逐個定義消息模板的方式,簡單給出幾個例子,其他模板定義類似。測試例如下:
type record of charstring payload;
type record request {
charstringclientnum,
charstringportnum,
payload content
}
type record response {
payload content
}
template request OnDesk1 := {
clientnum := \"client1\",
portnum := \"6000\",
content := {\"onDeskDongqiang\",\"4\",\"ORC\"}
}
template response OnDesk1Over := {
content :={\"conDeskcover\",\"4\",\"ORC\",\"suyulan\"}
}
b)然后定義測試配置用來描述構建測試結構的通信端口和通信組建。
type port httpPortType message {
outrequest;
in response;
}
type component systemType {
port httpPortType systemPort11;
port httpPortType systemPort12;
}
主測試成分和并行測試成分的定義與系統成分定義類似,不再贅述。
c)最后寫出對應邏輯的函數和測試例,完成測試套的書寫。根據圖1,客戶端1和服務器之間的消息交互過程用函數Wartest_clientTwo2_1()描述。部分函數如下:
function Wartest_clientTwo2_1() runs on ptcType {
ptcPort1.send(OnDesk1);
localTimer.start;
alt {
[] ptcPort1.receive(OnDesk1Over) {
ptcPort2.send(StartFrame1);
alt{
[]ptcPort2.receive(StartFrameOver){
localTimer.stop;
setverdict(pass);
……
函數Wartest_clientTwo2_2與Wartest_clientTwo2_1相似,不再贅述。測試例如下:
testcase Wartest_clientTwo_start() runs on mtcType system systemType{
var ptcType1 client1:=ptcType1.create;
var ptcType2 client2:=ptcType2.create;
map(client1:ptcPort1,system:systemPort11);
……映射工作……
client1.start(Wartest_clientTwo2_1());
client2.start(Wartest_clientTwo2_2());
client1.done;
stop;
}
3.2 測試執行
根據德國Testing Tech公司提供的TTthree編譯器編寫測試套的編碼解碼器和適配器,負責測試執行的控制與被測系統的通信以及測試系統用戶接口的提供。完成的測試套在自行開發的基于Eclipse的TTCN3測試平臺[9]上經過編譯生成可執行測試套。在該平臺上給可執行測試套配置上適配器即可執行測試。測試執行結果如表3所示。
表3 啟動游戲測試套執行結果
測試用例期望接收數據實際接收數據返回判定
Wartest_client Two_start()“cStartFramecover”“cStartFramecover”pass
從表3中可以看出,3.1節中的測試例最后期望接收的數據是“cStartFramecover”,實際接收到的數據也是“cStartFramecover”,期望數據和實際得到的數據相同。最后返回的判斷為“pass”,測試例執行通過。
4 結束語
本文提出了將基于模型的測試和協議一致性測試應用于網絡游戲軟件測試的思想,并且給出了具體的建模方法和根據模型編寫TTCN3測試套的方法。該方法具有可重用性強、執行測試快捷方便的特點,適合網絡游戲可玩性測試的發展需要。
在從測試模型向TTCN3測試套的自動轉換方面,筆者已經能夠分別轉換簡單的函數,可選步和測試例,進一步的工作是在此基礎上實現測試套的自動生成,以滿足自動化測試的需要。
參考文獻:
[1]SRUART R. Modelbased test[EB/OL].http://www.fortest.org.uk/documents/reid.pdf.
[2]顏炯,王戟,陳火旺.基于模型的軟件測試綜述[J]. 計算機科學,2004,32(2):184187.
[3]PRETSCHNER A,SLOTOSCH O, AIGLSTORFER E, et al. Modelbased testing for real the inhouse card case study[J]. Software Tools for Technology Transfer, 2004,5(2/3):140157.
[4]PRENNINGER W,PRETSCHNER A.Abstractions for modelbased testing[C]//Proc of the 2nd Int Workshop on Test and Analysis of Component Based Systems. 2004.
[5]馬云鋒, 趙會群. 基于TTCN3的手機應用協議測試的設計與實現[J].北方工業大學學報, 2006,18(1):69.
[6]趙會群,孫晶,金季春. 手機游戲軟件一致性測試方法研究[J].計算機工程與應用,2007,43(14):98101.
[7]European Telecommunications Standards Institute ETSI ES 201 8731 v3.1.1. Methods for testing and specification(MTS); the testing and test control notation version 3; part 1: TTCN3 core language[S]. 2005.
[8]宋茂強.通信軟件設計基礎[M]. 北京:北京郵電大學出版社,2001:3839.
[9]MA Yunfeng, ZHAO Huiqun. Design and implementation of TTCN3 IDE based on eclipse[C]//Proc of ISMATM. Beijing:[s.n.], 2005:190193.