胡甜
(上海電子信息職業(yè)技術(shù)學(xué)院,上海 201411)
隨著通信和計算機技術(shù)的迅速發(fā)展,地鐵信號系統(tǒng)也取得了較大的進步。在地鐵信號系統(tǒng)中,聯(lián)鎖系統(tǒng)是鐵路車站保證列車、車列正常和安全運行必不可少的核心基礎(chǔ)設(shè)備,是一個對安全性要求極高的系統(tǒng)。因此,需要對整個聯(lián)鎖系統(tǒng)的功能性、安全性做完備的測試。但是,目前聯(lián)鎖系統(tǒng)測試存在測試規(guī)模龐大、測試難以全覆蓋和操作實時性要求高等問題[1-3]。此外,由于測試人員的專業(yè)水平參差不齊,編寫的測試用例難以保證測試完備,目前國內(nèi)外對聯(lián)鎖系統(tǒng)測試方法的研究主要集中在提高測試效率和測試覆蓋率上[4-7]。另外,由于聯(lián)鎖系統(tǒng)的復(fù)雜性,導(dǎo)致專家經(jīng)驗在編寫測試用例中占據(jù)了非常重要的地位,如何將這些經(jīng)驗引入到自動化測試中也是一個難題。王琦[8]根據(jù)有色Petri網(wǎng)的性質(zhì)及CPN Tools建模規(guī)則,對聯(lián)鎖軟件的控制邏輯進行形式化描述,生成測試用例,減少了重復(fù),但測試用例的生成完全依賴模型的正確性,具有一定的局限性。閔銳[9]提出了一種基于改進的IPO(in-parameter-order)算法的聯(lián)鎖軟件測試案例自動生成方法,基于迭代的方法提高測試覆蓋率,但是該方法只能覆蓋聯(lián)鎖的基本功能,并沒有考慮特殊的聯(lián)鎖邏輯,因此對功能的覆蓋率仍有缺失。王培[10]設(shè)計了一個聯(lián)鎖系統(tǒng)的仿真測試平臺,在測試前需要基于站場圖生成進路表等靜態(tài)數(shù)據(jù),如果有特殊數(shù)據(jù),需要測試人員對數(shù)據(jù)進行添加修改,然后根據(jù)數(shù)據(jù)和聯(lián)鎖規(guī)則自動生成測試用例,由于這種測試平臺只基于聯(lián)鎖規(guī)則生成用例,沒有完全利用測試專家的經(jīng)驗,因此并不能適用于復(fù)雜和特殊的聯(lián)鎖場景。
本文基于規(guī)則驅(qū)動的自動測試框架,創(chuàng)新性地將專家經(jīng)驗融入到自動測試中,設(shè)計并實現(xiàn)了一種可以自動生成腳本并且自動執(zhí)行的測試平臺,而且實際應(yīng)用到了國內(nèi)多條地鐵線路中,與傳統(tǒng)的人工測試相比,具有完備性和自動化程度高等優(yōu)勢。
自動測試平臺架構(gòu)如圖1所示,主要由如下幾個模塊組成:
(1)利用基于規(guī)則的數(shù)據(jù)分類算法,將基礎(chǔ)數(shù)據(jù)庫(比如聯(lián)鎖表)進行分類,形成關(guān)鍵字?jǐn)?shù)據(jù)庫;
(2)利用匹配替換算法,基于規(guī)則庫和關(guān)鍵字?jǐn)?shù)據(jù)庫,自動生成測試腳本庫;
(3)測試平臺從測試腳本庫中依次取出腳本,解析并執(zhí)行,對測試結(jié)果進行自動判定;
(4)通信層負(fù)責(zé)維持和被測聯(lián)鎖系統(tǒng)的通信,發(fā)送測試命令給被測對象,接收聯(lián)鎖系統(tǒng)回復(fù)的報文,解析后采集仿真設(shè)備的狀態(tài),并將其反饋給腳本執(zhí)行模塊進行測試結(jié)果的判斷。
圖1 自動測試框架Fig.1 Automatic test framework
規(guī)則是測試意圖的表達,是測試專家的經(jīng)驗總結(jié),測試專家基于聯(lián)鎖系統(tǒng)需求,提取出相應(yīng)的測試規(guī)則,并且確保規(guī)則全覆蓋系統(tǒng)需求。對于聯(lián)鎖系統(tǒng)測試來說[4],規(guī)則中含有若干個關(guān)鍵字和操作序列,如圖2所示。
圖2 規(guī)則示例Fig.2 An example of a rule
基于規(guī)則的分類是使用一組“if…then…”規(guī)則來對數(shù)據(jù)進行分類的技術(shù),可以表示為如下形式:
ri:(ci)→yi,
(1)
式中ci稱為規(guī)則前件或前提,規(guī)則前件是屬性測試的集合。
ci=(A1opv1)∧(A2opv2)∧…∧(Aiopvi),
(2)
式中(Ai,vi)為(屬性,值)對;op為比較運算符,取自集合{=,≠,<,>,≤,≥};yi為分類標(biāo)簽,為規(guī)則后件,當(dāng)規(guī)則r的規(guī)則前件與記錄x的屬性匹配時,則稱r覆蓋了x,當(dāng)r覆蓋某條記錄時,則稱規(guī)則r被觸發(fā)。
本算法利用基于規(guī)則的數(shù)據(jù)分類算法,將基礎(chǔ)數(shù)據(jù)庫(比如聯(lián)鎖表)進行分類,形成關(guān)鍵字?jǐn)?shù)據(jù)庫。
利用匹配算法,自動測試框架會基于關(guān)鍵字?jǐn)?shù)據(jù)庫和規(guī)則庫,自動生成測試腳本用例,流程圖如圖3所示。
圖3 自動生成腳本流程圖Fig.3 Automated test script generation flow chat
該模塊負(fù)責(zé)解析和自動執(zhí)行腳本庫中的所有腳本并收集測試數(shù)據(jù),在執(zhí)行腳本的過程中,還會記錄運行時間、測試行為和測試結(jié)果,以便于后期結(jié)果分析。
自動執(zhí)行腳本的時序如圖4所示。
(1)腳本解析模塊會依次獲取腳本庫中的腳本,然后解析腳本,將腳本轉(zhuǎn)換為測試行為,比如,發(fā)送仿真命令、獲取設(shè)備狀態(tài)等;
(2)腳本執(zhí)行模塊會依次執(zhí)行解析出來的測試命令,由于測試對時序有要求,因此該模塊會和通信模塊相互配合,等一條仿真命令結(jié)束后,才會執(zhí)行下一條仿真命令;
(3)收到狀態(tài)數(shù)據(jù)后,會根據(jù)報文格式解析報文,根據(jù)報文內(nèi)容更新相應(yīng)設(shè)備的狀態(tài);
(4)一條腳本執(zhí)行結(jié)束后,會記錄測試時間,生成測試結(jié)果。
在項目執(zhí)行過程中,可以根據(jù)測試需求增加測試命令,添加對應(yīng)的腳本關(guān)鍵字。由于通信層與特定的協(xié)議和接口相關(guān),在缺少接口的情況下,可以根據(jù)新增協(xié)議編寫相應(yīng)的通信層模塊,并添加到測試框架中,所以該測試框架具有良好的可擴展性。
圖4 自動執(zhí)行腳本時序Fig.4 Automated script execution sequence
為驗證該測試平臺的執(zhí)行效率,本文把某正線和車輛段聯(lián)鎖系統(tǒng)作為被測對象,以引導(dǎo)進路建立功能為例描述實現(xiàn)過程和結(jié)果。
對聯(lián)鎖系統(tǒng)的測試通常采用黑盒測試方法,測試人員根據(jù)測試案例,在人機交互平臺操作相關(guān)命令,聯(lián)鎖系統(tǒng)在收到命令后,根據(jù)采集到的軌旁設(shè)備狀態(tài)進行邏輯運算,并將運算結(jié)果反饋給人機交互平臺,測試人員根據(jù)相關(guān)的設(shè)備狀態(tài)對測試結(jié)果進行判定。因此,對聯(lián)鎖系統(tǒng)進行自動化測試,需要:
(1) 模擬測試人員的操作,自動形成仿真命令,并對測試結(jié)果進行判定;
(2) 模擬軌旁設(shè)備狀態(tài),并將設(shè)備狀態(tài)實時發(fā)給聯(lián)鎖系統(tǒng)。
結(jié)合上述測試需求,設(shè)計了如圖5所示的測試平臺,其中控制平臺負(fù)責(zé)模擬測試人員生成并發(fā)送仿真命令,軌旁仿真用來模擬軌旁設(shè)備的狀態(tài)。測試過程為測試人員選擇測試項,測試平臺向被測聯(lián)鎖系統(tǒng)發(fā)送仿真命令和設(shè)備狀態(tài)數(shù)據(jù),并接收狀態(tài)數(shù)據(jù),解析后根據(jù)期望結(jié)果判定案例執(zhí)行結(jié)果。
圖5 自動測試平臺Fig.5 Automatic test platform
測試專家對進路建立功能進行分析,針對引導(dǎo)進路建立功能提取了如表1所示的規(guī)則。
該規(guī)則中CallOnRouteName、FlankRouteName、BeginSignalName和RouteInnerBlockName均為關(guān)鍵字。測試平臺會向被測系統(tǒng)發(fā)送如下仿真命令:進路設(shè)置—進路取消—進路初始化—進路確認(rèn),然后檢查如下設(shè)備狀態(tài)并和期望值進行比對:進路狀態(tài)、始端信號機狀態(tài)、進路內(nèi)區(qū)段狀態(tài),最后釋放進路,以便執(zhí)行下一條案例。詳見圖6。
表1 引導(dǎo)進路建立規(guī)則Table 1 Call-on route set rule
圖6 測試序列Fig.6 Test sequence
對進路數(shù)據(jù)進行分類,表2是一些規(guī)則舉例。
表2 進路分類規(guī)則Table 2 Route classification rule
遍歷聯(lián)鎖表,某個控區(qū)中符合表1規(guī)則的關(guān)鍵字?jǐn)?shù)據(jù)如表3所示。
表3 進路關(guān)鍵字?jǐn)?shù)據(jù)
基于表1~2,利用圖3的算法,可生成如下20條腳本(表4):
表4 生成腳本
表4(續(xù))
針對正線和車輛段共計10個區(qū)的數(shù)據(jù)(415條主體進路,170條防護進路),基于提取的219條規(guī)則,運用該自動測試平臺,生成可自動測試腳本66 012條。如果采用人工測試,需要消耗約312 工時,而自動測試共計使用124工時,且自動測試能夠做到24 h無人值守不間斷測試,重復(fù)性操作,自動測試的可靠性極高。目前自動測試可以涵蓋聯(lián)鎖功能的98.2%,可以極大地解放人力。
本文研究了聯(lián)鎖系統(tǒng)的自動化測試技術(shù),開發(fā)了基于規(guī)則的自動化測試平臺,該平臺將專家經(jīng)驗融合進了自動測試,可以對站場數(shù)據(jù)進行全覆蓋測試,特別適用于中型和大型站場測試。由于通信層可以增加和修改通信協(xié)議適配不同的被測對象,因此具有良好的可擴展性,同時也可以運用在其他安全系統(tǒng),比如智能汽車等領(lǐng)域的自動化測試。該平臺大為提高了聯(lián)鎖系統(tǒng)測試的完備性和自動化程度,降低了成本。