摘 要:TTCN-3語言是近年來應(yīng)用比較廣泛的一致性測試描述語言,本文分析了TTCN-3語法中的特點(diǎn):作用域、結(jié)構(gòu)化、import機(jī)制等內(nèi)容,并根據(jù)一致性測試的一般方法設(shè)計(jì)了一個(gè)基于TTCN-3的測試工具,并給出了基本的實(shí)現(xiàn)原理。
關(guān)鍵詞:TTCN-3;一致性測試;測試工具
中圖分類號:TP311.52
TTCN-3,簡稱測試及測試控制表達(dá)法(Testing and Test Control Notation),是國際標(biāo)準(zhǔn)化的測試準(zhǔn)用開發(fā)編程語言,用于描述在多種通信端口上的各種響應(yīng)系統(tǒng)測試。它典型的應(yīng)用領(lǐng)域包括:移動通信、寬帶技術(shù)、中間件平臺、互聯(lián)網(wǎng)協(xié)議等。
本文描述了一種簡單的TTCN-3編譯器和執(zhí)行器的設(shè)計(jì)和實(shí)現(xiàn),能夠提供完整的TTCN-3運(yùn)行環(huán)境。將其命名為ATR——A TTCN-3 Runner。
ATR使用的主要開發(fā)工具:JDK 5.0、Eclipse 3.4、Antlr3+StringTemplate3.2+AntlrWorks、SVN
1 編譯器
ATR選擇ANTLR3作為編譯器生成器,實(shí)現(xiàn)將TTCN-3腳本翻譯為JAVA代碼。同時(shí),為了更好地控制代碼生成,ATR使用了stringtemplate3.2作為代碼生成模板引擎,由于TTCN3允許類型的超前引用,因此ATR采用兩遍掃描來實(shí)現(xiàn)語法/詞法分析、語義分析及代碼生成。
語法/詞法分析:MiniTTCN.g中實(shí)現(xiàn)
語義分析:MiniTTCNtree.g中實(shí)現(xiàn)
代碼生成:MiniTTCNtree.g與MiniTTCN.stg中實(shí)現(xiàn)
1.1 MiniTTCN.g
首先對TTCN3代碼進(jìn)行第一遍掃描(輸入為xxx.ttcn源碼文件),分析源文件的語法并指出語法錯(cuò)誤,構(gòu)造符號表(第一遍掃描只生成type類定義如module/compnent/function/testcase/record…的符號表項(xiàng)),對于function、testcase和control部分定義的局部變量,延遲到第二遍掃描時(shí)再加入符號表。同時(shí),MiniTTCN.g根據(jù)輸入構(gòu)造抽象語法樹(AST),在MiniTTCNtree.g中進(jìn)行的第二遍掃描即在該語法樹的基礎(chǔ)上進(jìn)行。
1.2 MiniTTCNtree.g
該文件根據(jù)MiniTTCN.g寫成,具體編寫規(guī)則可參考antlr3相關(guān)文檔,實(shí)現(xiàn)對MiniTTCN.g中生成的AST進(jìn)行處理,并對TTCN3語義進(jìn)行檢查,最終調(diào)用MiniTTCN.stg中定義的規(guī)則生成代碼。在該文件中,繼續(xù)完善第一遍掃描時(shí)生成的符號表。
1.3 符號表
符號表保存了ATR編譯器在編譯TTCN-3文件的過程中,所有標(biāo)識符的信息,如代碼片斷:
module m1{
type component Mtype{ var integer i;const boolean b:=2;}
function f1(integer v1) runs on Mtype return integer{
log(“Hello yatr?。躰”,“v1=“,v1);
return 55+i;
}
}
表1 符號表
m_name=m1m_attrib=MODULEm_name=im_attrib=VALUE
m_subAttrib=1 m_subAttrib=VAR
m_type=1 m_type=(IntegerValueATR)
m_subTable=1 m_subTable=1
m_subTypelist=1 m_subTypelist=1
m_name=Mtypem_attrib=TYPEm_name=bm_attrib=VALUE
m_subAttrib=COMPONENT m_subAttrib=CONST
m_type=1 m_type=(BooleanValueATR)
m_subTable=(i,b) m_subTable=1
m_subTypelist=1 m_subTypelist=1
m_name=f1m_attrib=FUNCTION
m_subAttrib=1
m_type=(IntegerValueATR)
m_subTable=(v1)
m_subTypelist=1
runsOnComp=Mtype
主符號表示例子表示例
主符號表是貫穿整個(gè)編譯過程的主要符號的符號表,比如函數(shù)名、組件名的符號表項(xiàng),各子表是主符號表中某項(xiàng)的子元素構(gòu)成的符號表。
符號表的主要用途是進(jìn)行上下文語義檢查,如檢查函數(shù)中return返回的值的類型與函數(shù)原型聲明的返回值類型是否一致,兩個(gè)變量進(jìn)行運(yùn)算,它們的類型是否一至等,如下代碼片段:
var integer v2:=1; (1)
var charstring v3:=“hi”; (2)
var integer v:=v2+v3; (3)
這段代碼從語法層面講完全正確!但是第(3)條語句卻有一個(gè)語義錯(cuò)誤,即整數(shù)不能與字符串進(jìn)行加法運(yùn)算。當(dāng)ATR編譯器看到v2+v3這條語句后,它將從符號表中取出v2與v3,并比較兩個(gè)符號在表中的各個(gè)相關(guān)成員,以確定兩個(gè)相加的變量是否類型匹配,該過程通過如下代碼段實(shí)現(xiàn):
expr
|^(op='+'e1=expr e2=expr) {$t=doE1E2($op.getToken(),$e1.t,$e2.t,TSubAttribTYPE.INTEGER);}
通過以上方法就可以順利編譯TTCN-3的腳本。
2 運(yùn)行時(shí)
ATR的主要實(shí)現(xiàn)方式是,將TTCN3語言翻譯為java語言,因此運(yùn)行時(shí)主要是指TTCN3語言中定義的type/value/component/port等概念,使用java語言實(shí)現(xiàn)的一個(gè)基本庫。因此比較簡單,在此就不再贅述。
3 結(jié)束語
通過對ATR的設(shè)計(jì)和實(shí)現(xiàn)全面深入的了解TTCN-3的構(gòu)造以及執(zhí)行細(xì)節(jié)。此工具可以簡單的將TTCN-3測試腳本編譯執(zhí)行,反饋測試結(jié)果。目前已經(jīng)可以運(yùn)行IPSEC測試套件,LTE測試套件等標(biāo)準(zhǔn)化的測試腳本,對TTCN-3在我國的推廣和發(fā)展起到一定的推動作用。
參考文獻(xiàn):
[1]王冠,吳際,徐珞.面向TTCN-3分布式測試執(zhí)行平臺的測試適配器框架的研究與設(shè)計(jì)[J].電子學(xué)報(bào),2009(z1).
[2]蔣凡,季向東,曾凡平.TTCN-3測試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2005(11).
[3]王晰,楊驊.基于TTCN-3的LTE終端一致性測試集設(shè)計(jì)概述[J].移動通信,2013(24).
作者簡介:陳張榮(1982.05-),男,江蘇蘇州人,碩士,教師,講師,研究方向:嵌入式、物聯(lián)網(wǎng)。
作者單位:蘇州高等職業(yè)技術(shù)學(xué)校,江蘇蘇州 215000