李啟翮
(北京全路通信信號(hào)研究設(shè)計(jì)院,北京 100073)
軌道交通領(lǐng)域作為高安全需求領(lǐng)域,其信號(hào)設(shè)備(如聯(lián)鎖、列控設(shè)備等)多為安全苛求設(shè)備,這些設(shè)備協(xié)同工作,共同保證列車安全運(yùn)行。
為確保設(shè)備安全穩(wěn)定工作,運(yùn)營之前必須進(jìn)行全面的測(cè)試。針對(duì)不同的設(shè)備以及測(cè)試的不同級(jí)別,需要設(shè)計(jì)并構(gòu)建不同的測(cè)試系統(tǒng)。針對(duì)該問題,本文提出一種通用的設(shè)備功能自動(dòng)化測(cè)試系統(tǒng),針對(duì)事件驅(qū)動(dòng)類型(如CTCS-2級(jí)列控系統(tǒng)的列控中心、CBTC系統(tǒng)的區(qū)域控制中心等)或周期處理類型(如計(jì)算機(jī)聯(lián)鎖)的設(shè)備,實(shí)現(xiàn)系統(tǒng)級(jí)別功能測(cè)試,只需針對(duì)具體的設(shè)備進(jìn)行適配,就能以相同的測(cè)試原理測(cè)試不同的設(shè)備。
測(cè)試通常分為多個(gè)級(jí)別,如單元測(cè)試、針對(duì)設(shè)備各部件的子系統(tǒng)測(cè)試、針對(duì)單一設(shè)備的系統(tǒng)測(cè)試、多個(gè)系統(tǒng)設(shè)備之間的集成測(cè)試以及現(xiàn)場(chǎng)測(cè)試等。單元測(cè)試由開發(fā)人員自己完成;子系統(tǒng)測(cè)試是保證該部件能與其余部件相配合工作,組成完整的設(shè)備;系統(tǒng)測(cè)試則是針對(duì)單一設(shè)備,確保該設(shè)備的功能正常,從而為后續(xù)集成測(cè)試和現(xiàn)場(chǎng)測(cè)試中多個(gè)設(shè)備之間聯(lián)調(diào)聯(lián)試打下基礎(chǔ)。
實(shí)際測(cè)試中,若缺陷在后面幾級(jí)測(cè)試才被發(fā)現(xiàn),其解決成本比在前幾級(jí)測(cè)試中發(fā)現(xiàn)的解決成本高得多。統(tǒng)計(jì)表明,后一級(jí)的測(cè)試與前一級(jí)的測(cè)試相比,發(fā)現(xiàn)和修復(fù)一個(gè)缺陷的平均成本要提高10倍。因此子系統(tǒng)和系統(tǒng)級(jí)別的測(cè)試,盡量完整覆蓋所需測(cè)試的功能,將盡量少的問題遺留到后面的聯(lián)調(diào)聯(lián)試中,從而極大降低故障定位、缺陷修復(fù)的成本。
本文所提出的測(cè)試系統(tǒng),主要針對(duì)系統(tǒng)測(cè)試這一級(jí)別。由于子系統(tǒng)測(cè)試和系統(tǒng)測(cè)試相近,只需將被測(cè)的部件看作一個(gè)單一設(shè)備即可。因此,本測(cè)試系統(tǒng)也同樣適用子系統(tǒng)級(jí)別的測(cè)試。
CTCS-2級(jí)列控系統(tǒng)已在提速線路和客運(yùn)專線上成功運(yùn)用,是當(dāng)前主流的列控系統(tǒng),列控中心(TCC)是其核心控車設(shè)備。本文將以TCC為例,對(duì)測(cè)試系統(tǒng)進(jìn)行描述。
系統(tǒng)測(cè)試的對(duì)象是一個(gè)正常運(yùn)行設(shè)備的內(nèi)部處理功能,以及該設(shè)備與其他設(shè)備的交互功能。以TCC為例,就是要測(cè)試TCC能否與其外接設(shè)備正常交互,并根據(jù)自身狀態(tài)和外部輸入實(shí)時(shí)做出正確反應(yīng)。從本質(zhì)上說,就是在確定設(shè)備自身狀態(tài)后,對(duì)其實(shí)施激勵(lì),檢測(cè)其反應(yīng)是否正確。
TCC根據(jù)調(diào)度命令、進(jìn)路狀態(tài)、線路參數(shù)等產(chǎn)生進(jìn)路以及臨時(shí)限速等相關(guān)控車信息,通過有源應(yīng)答器及軌道電路傳送給列車。以既有線車站列控中心為例,在計(jì)算機(jī)聯(lián)鎖車站,他與調(diào)度集中(CTC)、計(jì)算機(jī)聯(lián)鎖(CB I)、地面電子單元(LEU)、集中監(jiān)測(cè)(CSM)等設(shè)備相連[1][2],其連接關(guān)系如圖1所示。
對(duì)被測(cè)對(duì)象的測(cè)試,采用根據(jù)功能場(chǎng)景、需求規(guī)范以及接口規(guī)范編制測(cè)試用例的方式進(jìn)行。由于測(cè)試工作量巨大,人工手動(dòng)測(cè)試難以滿足實(shí)際需求,要求進(jìn)行自動(dòng)化測(cè)試,這就需要根據(jù)測(cè)試用例編寫測(cè)試腳本以實(shí)現(xiàn)測(cè)試自動(dòng)化。即先編寫測(cè)試規(guī)范與用例,再根據(jù)用例編寫腳本,在測(cè)試系統(tǒng)上運(yùn)行測(cè)試腳本,觀察并分析其運(yùn)行結(jié)果,確認(rèn)被測(cè)功能是否符合需求。
對(duì)設(shè)備進(jìn)行系統(tǒng)測(cè)試的目的是為了確認(rèn)該設(shè)備是否符合功能需求,是否能夠可靠地與其他設(shè)備協(xié)同工作,是否具有足夠的魯棒性,為下一級(jí)測(cè)試交付一個(gè)可用的設(shè)備。
一個(gè)單獨(dú)的不與外部通信的設(shè)備是無法正常工作的。每一個(gè)設(shè)備都與不同數(shù)量、種類的其他設(shè)備相連,而各接口之間的交互功能往往包括多個(gè)步驟,許多測(cè)試場(chǎng)景還涉及多個(gè)接口之間的配合、協(xié)調(diào),因此測(cè)試步驟比較復(fù)雜。以TCC為例,測(cè)試系統(tǒng)必須能夠測(cè)試TCC與CBI、LEU、CTC、CSM的交互功能。
由于測(cè)試的復(fù)雜性,純?nèi)斯な謩?dòng)完成并不現(xiàn)實(shí),因此測(cè)試系統(tǒng)應(yīng)能進(jìn)行自動(dòng)化測(cè)試。此外,開發(fā)過程中,開發(fā)者會(huì)根據(jù)每一輪的測(cè)試結(jié)果發(fā)布新版本,需要對(duì)每一個(gè)版本進(jìn)行迭代測(cè)試,為節(jié)約成本,測(cè)試系統(tǒng)應(yīng)能提供自動(dòng)化的迭代測(cè)試功能。最后,為了方便測(cè)試以及節(jié)約時(shí)間成本,該測(cè)試系統(tǒng)應(yīng)易于構(gòu)建,方便使用。
一個(gè)正常運(yùn)行的設(shè)備需要與其他設(shè)備相連接以進(jìn)行信息交互,而在對(duì)其進(jìn)行較全面的測(cè)試之前又不適合與其他真實(shí)設(shè)備聯(lián)調(diào)聯(lián)試,即便能夠,也無法滿足系統(tǒng)魯棒性測(cè)試的要求,因?yàn)檎鎸?shí)設(shè)備難以方便地實(shí)現(xiàn)錯(cuò)誤注入,因此需要采用外連各設(shè)備的仿真器來測(cè)試其功能。以TCC為例,為構(gòu)建測(cè)試系統(tǒng),需要開發(fā)CTC仿真器(CTCsim)、聯(lián)鎖仿真器(CBIsim)、LEU仿真器(LEU sim)、CSM仿真器(CSMsim)等。
為了實(shí)現(xiàn)自動(dòng)化測(cè)試,需要將測(cè)試用例以某種語言編寫為測(cè)試腳本。為了對(duì)測(cè)試腳本的運(yùn)行進(jìn)行管理并記錄測(cè)試結(jié)果,還需要一個(gè)測(cè)試管理器(TM)。
根據(jù)以上分析,本文提出如圖2所示的測(cè)試系統(tǒng)原型。
為簡(jiǎn)化開發(fā)工作,測(cè)試系統(tǒng)采用接口仿真器。接口仿真器只具有與真實(shí)設(shè)備相同的接口,而不實(shí)現(xiàn)內(nèi)部處理邏輯,所有需要邏輯處理的地方,均由人工編寫命令腳本實(shí)現(xiàn)。這類仿真器制作簡(jiǎn)單,但如果被測(cè)設(shè)備與仿真器之間的交互信息無法準(zhǔn)確確定時(shí),將增大測(cè)試腳本的編寫難度。由于信號(hào)設(shè)備多為安全苛求系統(tǒng),當(dāng)其自身的內(nèi)部狀態(tài)與外部輸入被確定時(shí),該設(shè)備的正確反應(yīng)也隨之確定。因此,接口仿真器完全能夠滿足測(cè)試的需要,即使有部分?jǐn)?shù)據(jù)不能精確確定,也可以通過計(jì)算其取值范圍,并在編制腳本時(shí)增加一些處理即可。
每一個(gè)接口仿真器應(yīng)實(shí)現(xiàn)與真實(shí)設(shè)備相同的接口,其中應(yīng)用數(shù)據(jù)層、鏈路層、安全層等應(yīng)與真實(shí)接口完全相同,物理層可以通過接口轉(zhuǎn)換器實(shí)現(xiàn)。此外,仿真器還應(yīng)能根據(jù)用戶的指定,實(shí)現(xiàn)錯(cuò)誤注入,以測(cè)試被測(cè)設(shè)備的魯棒性。最后,仿真器的安裝使用應(yīng)盡量簡(jiǎn)單。
以CTCsim為例,仿真器應(yīng)實(shí)現(xiàn)的功能:(1)實(shí)現(xiàn)符合規(guī)范[3]的接口協(xié)議;(2)能接收用戶命令;(3)能根據(jù)用戶命令按正確格式發(fā)送CTC消息;(4)能根據(jù)用戶要求發(fā)送有錯(cuò)誤的消息,以實(shí)現(xiàn)錯(cuò)誤注入;(5)能接收TCC所發(fā)送的消息,并將其以一定格式向用戶顯示;(6)能自動(dòng)對(duì)TCC消息進(jìn)行CRC校驗(yàn),如出錯(cuò),則向用戶發(fā)送提示;(7)能自動(dòng)向TCC發(fā)送打點(diǎn)時(shí)鐘消息,且其頻率能由用戶指定;(8)能自動(dòng)檢測(cè)TCC“列控中心狀態(tài)消息”的發(fā)送頻率,若超出一個(gè)可配置的范圍,能提示用戶;(9)能根據(jù)用戶命令與TCC建立或斷開通信連接。
根據(jù)以上分析可知,CTCsim的功能并不復(fù)雜,主要分為與TCC的消息交互和與用戶的消息交互兩個(gè)部分。為了單獨(dú)使用和便于調(diào)試,用戶命令的接收和TCC消息的顯示分別使用操作系統(tǒng)的標(biāo)準(zhǔn)輸入和輸出,如圖3所示。測(cè)試人員可以直接輸入命令讓仿真器向TCC發(fā)送消息,并根據(jù)TCC回應(yīng)的消息,判斷TCC處理邏輯的正確與否。從便于安裝使用的角度出發(fā),仿真器實(shí)現(xiàn)為一個(gè)單獨(dú)的應(yīng)用程序使用時(shí)直接運(yùn)行。其他仿真器也以類似方式實(shí)現(xiàn)。
由于與被測(cè)設(shè)備的物理接口多樣化,例如RS-422串行異步接口、以太網(wǎng)接口等,對(duì)不同仿真器實(shí)現(xiàn)不同的物理層接口增加了復(fù)雜度。為能以一致的方式進(jìn)行仿真器的開發(fā),決定所有仿真器均采用以太網(wǎng)與外部接口,再根據(jù)需要使用接口轉(zhuǎn)換器與之相連,以實(shí)現(xiàn)正確的物理層接口。
TM的基本功能是腳本解析與命令收發(fā)。根據(jù)輸入測(cè)試腳本,TM依次將腳本中的各條命令向該命令所指定的接收對(duì)象轉(zhuǎn)發(fā)。收到TM命令的仿真器會(huì)據(jù)此與被測(cè)設(shè)備進(jìn)行相應(yīng)的信息交互,并將被測(cè)設(shè)備的回應(yīng)消息轉(zhuǎn)發(fā)給TM,TM將該消息與測(cè)試腳本所規(guī)定的應(yīng)收到的正確消息進(jìn)行比較,以確定被測(cè)設(shè)備的功能是否正確;如否,則向測(cè)試人員報(bào)告錯(cuò)誤所在。
TM實(shí)現(xiàn)為一個(gè)單獨(dú)的程序,其功能包括:(1)腳本文件的讀入與內(nèi)容解析;(2)與仿真器建立通信連接;(3)根據(jù)腳本向仿真器發(fā)送消息;(4)接收仿真器轉(zhuǎn)發(fā)的被測(cè)設(shè)備的消息或仿真器的提示信息,并與腳本的規(guī)定進(jìn)行比較以判斷正誤;(5)記錄并顯示測(cè)試過程和結(jié)果。其中(1)和(5)只涉及文件操作和文本處理,(2)、(3)和(4)是核心功能。
考慮到TM要與測(cè)試腳本進(jìn)行交互,采用同一種腳本語言實(shí)現(xiàn)TM和測(cè)試腳本(如可采用p er l、ruby等腳本語言),更有利于二者的交互。
如前所述,各仿真器以標(biāo)準(zhǔn)輸入、輸出與用戶交互,而自動(dòng)化測(cè)試時(shí)則需要與TM交互,這需要增加仿真器與TM間的通信接口。由于腳本語言的性能較低,此外,與TM交互的仿真器的數(shù)量、種類會(huì)隨被測(cè)設(shè)備的不同而變化,為了達(dá)到模塊化的設(shè)計(jì),決定將消息分發(fā)功能獨(dú)立出來,增加1個(gè)消息分發(fā)器(MD)。TM僅與MD相交互,由M D完成消息的分發(fā)。
為了不增加仿真器的復(fù)雜度,充分復(fù)用其已有的I/O接口,可利用U n ix系統(tǒng)的基于進(jìn)程間通信(IPC)的管道I/O重定向功能。具體方法是啟動(dòng)MD后,首先由MD根據(jù)配置文件,通過fork()產(chǎn)生新的進(jìn)程,以啟動(dòng)各個(gè)仿真器,再針對(duì)每一個(gè)仿真器創(chuàng)建兩個(gè)管道,分別與其標(biāo)準(zhǔn)輸入、輸出相連,從而實(shí)現(xiàn)與仿真器的信息交互。針對(duì)每個(gè)仿真器,M D設(shè)定唯一的標(biāo)識(shí)符,該標(biāo)識(shí)符由配置文件指定,由腳本和MD在消息中加上該標(biāo)識(shí)符,就可容易地實(shí)現(xiàn)消息分發(fā)。由上可知,M D的功能應(yīng)包括:(1)讀入配置文件,根據(jù)指定的配置,管理各仿真器的啟動(dòng)與關(guān)閉;(2)實(shí)現(xiàn)消息分發(fā)。M D實(shí)現(xiàn)也為一個(gè)單獨(dú)的程序。
以上方案不僅能實(shí)現(xiàn)單一用例的自動(dòng)化測(cè)試,再增加對(duì)多個(gè)測(cè)試案例批量處理的功能,就可以進(jìn)行自動(dòng)化迭代測(cè)試。這只需給TM增加第6個(gè)功能:腳本批量處理,即讀取一個(gè)腳本文件名列表文件,根據(jù)該列表逐條讀取腳本運(yùn)行,當(dāng)完成一個(gè)腳本運(yùn)行后,繼續(xù)讀入下一個(gè)腳本進(jìn)行測(cè)試。
由于所用仿真器只有接口而沒有內(nèi)部處理邏輯、線路數(shù)據(jù),因此,這部分功能只能由測(cè)試腳本承擔(dān)。將測(cè)試用例場(chǎng)景,轉(zhuǎn)化為一個(gè)動(dòng)作執(zhí)行序列,按步驟將每一步應(yīng)發(fā)送給TCC的消息以及應(yīng)從TCC接收到的消息以一定格式編寫到一個(gè)文件里,由TM讀入并順序執(zhí)行,該文件即測(cè)試腳本。
腳本編寫應(yīng)簡(jiǎn)單明確,既適合測(cè)試人員編寫、閱讀,又便于TM進(jìn)行解析,最終確定以rub y語言[4]編寫,同時(shí)TM本身也以rub y編寫實(shí)現(xiàn),有利于二者交互。下面是一個(gè)簡(jiǎn)單的腳本示例。
ctcSim=ni l
ctcSim=CTC.new(name)
ctcSim.sendConnect()
ctcSim.waitConnected(expire_time)
ctcSim.sendTSRStatusReq()
ctcSim.waitAck(expire_time)
c t c Sim.wa i t TSRSt a t us(seqno,bmai n,cmd n o,t ime1,t ime2,s t a r t,e n d,t s r,lef t,whole,expire_time)
這是一個(gè)CTC sim與TCC交互的例子。首先建立仿真器實(shí)例,該函數(shù)會(huì)設(shè)置一些默認(rèn)的初始化參數(shù),如該仿真器的名字、系統(tǒng)時(shí)間等,然后與TCC相連接,隨即發(fā)送狀態(tài)請(qǐng)求消息并等待回應(yīng)。示例中CTC為事先封裝好的公共類,sendConnect()等均為已經(jīng)編制好的類方法,可供任意腳本調(diào)用。函數(shù)括號(hào)內(nèi)斜體所示為參數(shù),實(shí)際腳本中應(yīng)以正確的數(shù)據(jù)替換,如w aitTSRStatus()的參數(shù)分別為幀序號(hào)、主備機(jī)標(biāo)志、限速命令號(hào)等消息數(shù)據(jù),用于和所收到的消息比對(duì)以確定消息是否正確,參數(shù)expire_time是消息等待時(shí)間,如該時(shí)間內(nèi)未收到消息,則報(bào)錯(cuò)。這樣編寫的腳本所反映的場(chǎng)景流程更加清晰,不會(huì)被處理細(xì)節(jié)所干擾。
根據(jù)前面的分析,最終測(cè)試系統(tǒng)構(gòu)成如圖4所示。
由于M D使用了U n ix類系統(tǒng)IPC功能,從經(jīng)濟(jì)適用的角度出發(fā),測(cè)試平臺(tái)采用1臺(tái)安裝了Linux操作系統(tǒng)的電腦,TM、MD與各仿真器均安裝于該電腦上,通過以太網(wǎng)與接口轉(zhuǎn)換模塊相連,再連接至被測(cè)對(duì)象。
針對(duì)不同的被測(cè)設(shè)備,只需以相同的原理開發(fā)所需的仿真器并修改配置文件。TM和M D均為通用產(chǎn)品,毋需修改即可使用。這樣就能以相同的構(gòu)架、方案測(cè)試不同設(shè)備。例如要測(cè)試區(qū)域控制中心(ZCC),只需開發(fā)A TS、車載、聯(lián)鎖以及相鄰ZCC的仿真器接入測(cè)試系統(tǒng)即可。
使用時(shí)先啟動(dòng)TM,指定測(cè)試腳本以及數(shù)據(jù)配置文件。TM首先啟動(dòng)M D,由M D根據(jù)數(shù)據(jù)配置文件啟動(dòng)各仿真器與被測(cè)對(duì)象相連,TM讀入腳本后,根據(jù)腳本與M D交互,完成整個(gè)測(cè)試用例的運(yùn)行,記錄測(cè)試過程和結(jié)果。
本文提出一個(gè)通用的自動(dòng)化測(cè)試系統(tǒng)方案,采用本方案,能以相同的原理實(shí)現(xiàn)對(duì)各種事件驅(qū)動(dòng)式和周期處理式設(shè)備的系統(tǒng)級(jí)測(cè)試,并能實(shí)現(xiàn)自動(dòng)迭代測(cè)試。該方案不僅可用于系統(tǒng)測(cè)試,如果將設(shè)備內(nèi)部的某一部件看作一個(gè)獨(dú)立設(shè)備,與之相連的其余各部件看作外接設(shè)備,則該系統(tǒng)也可以用于子系統(tǒng)級(jí)測(cè)試。
[1]科技運(yùn)[2007]44號(hào) 既有線CTCS-2級(jí)列控系統(tǒng)車站列控中心技術(shù)規(guī)范(暫行)[S].2007.
[2]徐嘯明.CTCS-2級(jí)列車運(yùn)行控制系統(tǒng)應(yīng)用叢書—列控地面設(shè)備[M].北京:中國鐵道出版社,2007.
[3]科技運(yùn)[2006]93號(hào) 既有線提速CTCS-2區(qū)段車站列控中心接口協(xié)議(v1.0)[S]. 2006.
[4] Thomas,D.Fowler,C.Hunt,A.Programming Ruby [M],USA,Progmatic Bookshelf, 2004.