胡甜
(上海電子信息職業技術學院,上海 201411)
隨著通信和計算機技術的迅速發展,地鐵信號系統也取得了較大的進步。在地鐵信號系統中,聯鎖系統是鐵路車站保證列車、車列正常和安全運行必不可少的核心基礎設備,是一個對安全性要求極高的系統。因此,需要對整個聯鎖系統的功能性、安全性做完備的測試。但是,目前聯鎖系統測試存在測試規模龐大、測試難以全覆蓋和操作實時性要求高等問題[1-3]。此外,由于測試人員的專業水平參差不齊,編寫的測試用例難以保證測試完備,目前國內外對聯鎖系統測試方法的研究主要集中在提高測試效率和測試覆蓋率上[4-7]。另外,由于聯鎖系統的復雜性,導致專家經驗在編寫測試用例中占據了非常重要的地位,如何將這些經驗引入到自動化測試中也是一個難題。王琦[8]根據有色Petri網的性質及CPN Tools建模規則,對聯鎖軟件的控制邏輯進行形式化描述,生成測試用例,減少了重復,但測試用例的生成完全依賴模型的正確性,具有一定的局限性。閔銳[9]提出了一種基于改進的IPO(in-parameter-order)算法的聯鎖軟件測試案例自動生成方法,基于迭代的方法提高測試覆蓋率,但是該方法只能覆蓋聯鎖的基本功能,并沒有考慮特殊的聯鎖邏輯,因此對功能的覆蓋率仍有缺失。王培[10]設計了一個聯鎖系統的仿真測試平臺,在測試前需要基于站場圖生成進路表等靜態數據,如果有特殊數據,需要測試人員對數據進行添加修改,然后根據數據和聯鎖規則自動生成測試用例,由于這種測試平臺只基于聯鎖規則生成用例,沒有完全利用測試專家的經驗,因此并不能適用于復雜和特殊的聯鎖場景。
本文基于規則驅動的自動測試框架,創新性地將專家經驗融入到自動測試中,設計并實現了一種可以自動生成腳本并且自動執行的測試平臺,而且實際應用到了國內多條地鐵線路中,與傳統的人工測試相比,具有完備性和自動化程度高等優勢。
自動測試平臺架構如圖1所示,主要由如下幾個模塊組成:
(1)利用基于規則的數據分類算法,將基礎數據庫(比如聯鎖表)進行分類,形成關鍵字數據庫;
(2)利用匹配替換算法,基于規則庫和關鍵字數據庫,自動生成測試腳本庫;
(3)測試平臺從測試腳本庫中依次取出腳本,解析并執行,對測試結果進行自動判定;
(4)通信層負責維持和被測聯鎖系統的通信,發送測試命令給被測對象,接收聯鎖系統回復的報文,解析后采集仿真設備的狀態,并將其反饋給腳本執行模塊進行測試結果的判斷。

圖1 自動測試框架Fig.1 Automatic test framework
規則是測試意圖的表達,是測試專家的經驗總結,測試專家基于聯鎖系統需求,提取出相應的測試規則,并且確保規則全覆蓋系統需求。對于聯鎖系統測試來說[4],規則中含有若干個關鍵字和操作序列,如圖2所示。

圖2 規則示例Fig.2 An example of a rule
基于規則的分類是使用一組“if…then…”規則來對數據進行分類的技術,可以表示為如下形式:
ri:(ci)→yi,
(1)
式中ci稱為規則前件或前提,規則前件是屬性測試的集合。
ci=(A1opv1)∧(A2opv2)∧…∧(Aiopvi),
(2)
式中(Ai,vi)為(屬性,值)對;op為比較運算符,取自集合{=,≠,<,>,≤,≥};yi為分類標簽,為規則后件,當規則r的規則前件與記錄x的屬性匹配時,則稱r覆蓋了x,當r覆蓋某條記錄時,則稱規則r被觸發。
本算法利用基于規則的數據分類算法,將基礎數據庫(比如聯鎖表)進行分類,形成關鍵字數據庫。
利用匹配算法,自動測試框架會基于關鍵字數據庫和規則庫,自動生成測試腳本用例,流程圖如圖3所示。

圖3 自動生成腳本流程圖Fig.3 Automated test script generation flow chat
該模塊負責解析和自動執行腳本庫中的所有腳本并收集測試數據,在執行腳本的過程中,還會記錄運行時間、測試行為和測試結果,以便于后期結果分析。
自動執行腳本的時序如圖4所示。
(1)腳本解析模塊會依次獲取腳本庫中的腳本,然后解析腳本,將腳本轉換為測試行為,比如,發送仿真命令、獲取設備狀態等;
(2)腳本執行模塊會依次執行解析出來的測試命令,由于測試對時序有要求,因此該模塊會和通信模塊相互配合,等一條仿真命令結束后,才會執行下一條仿真命令;
(3)收到狀態數據后,會根據報文格式解析報文,根據報文內容更新相應設備的狀態;
(4)一條腳本執行結束后,會記錄測試時間,生成測試結果。
在項目執行過程中,可以根據測試需求增加測試命令,添加對應的腳本關鍵字。由于通信層與特定的協議和接口相關,在缺少接口的情況下,可以根據新增協議編寫相應的通信層模塊,并添加到測試框架中,所以該測試框架具有良好的可擴展性。

圖4 自動執行腳本時序Fig.4 Automated script execution sequence
為驗證該測試平臺的執行效率,本文把某正線和車輛段聯鎖系統作為被測對象,以引導進路建立功能為例描述實現過程和結果。
對聯鎖系統的測試通常采用黑盒測試方法,測試人員根據測試案例,在人機交互平臺操作相關命令,聯鎖系統在收到命令后,根據采集到的軌旁設備狀態進行邏輯運算,并將運算結果反饋給人機交互平臺,測試人員根據相關的設備狀態對測試結果進行判定。因此,對聯鎖系統進行自動化測試,需要:
(1) 模擬測試人員的操作,自動形成仿真命令,并對測試結果進行判定;
(2) 模擬軌旁設備狀態,并將設備狀態實時發給聯鎖系統。
結合上述測試需求,設計了如圖5所示的測試平臺,其中控制平臺負責模擬測試人員生成并發送仿真命令,軌旁仿真用來模擬軌旁設備的狀態。測試過程為測試人員選擇測試項,測試平臺向被測聯鎖系統發送仿真命令和設備狀態數據,并接收狀態數據,解析后根據期望結果判定案例執行結果。

圖5 自動測試平臺Fig.5 Automatic test platform
測試專家對進路建立功能進行分析,針對引導進路建立功能提取了如表1所示的規則。
該規則中CallOnRouteName、FlankRouteName、BeginSignalName和RouteInnerBlockName均為關鍵字。測試平臺會向被測系統發送如下仿真命令:進路設置—進路取消—進路初始化—進路確認,然后檢查如下設備狀態并和期望值進行比對:進路狀態、始端信號機狀態、進路內區段狀態,最后釋放進路,以便執行下一條案例。詳見圖6。

表1 引導進路建立規則Table 1 Call-on route set rule

圖6 測試序列Fig.6 Test sequence
對進路數據進行分類,表2是一些規則舉例。

表2 進路分類規則Table 2 Route classification rule
遍歷聯鎖表,某個控區中符合表1規則的關鍵字數據如表3所示。

表3 進路關鍵字數據
基于表1~2,利用圖3的算法,可生成如下20條腳本(表4):

表4 生成腳本

表4(續)
針對正線和車輛段共計10個區的數據(415條主體進路,170條防護進路),基于提取的219條規則,運用該自動測試平臺,生成可自動測試腳本66 012條。如果采用人工測試,需要消耗約312 工時,而自動測試共計使用124工時,且自動測試能夠做到24 h無人值守不間斷測試,重復性操作,自動測試的可靠性極高。目前自動測試可以涵蓋聯鎖功能的98.2%,可以極大地解放人力。
本文研究了聯鎖系統的自動化測試技術,開發了基于規則的自動化測試平臺,該平臺將專家經驗融合進了自動測試,可以對站場數據進行全覆蓋測試,特別適用于中型和大型站場測試。由于通信層可以增加和修改通信協議適配不同的被測對象,因此具有良好的可擴展性,同時也可以運用在其他安全系統,比如智能汽車等領域的自動化測試。該平臺大為提高了聯鎖系統測試的完備性和自動化程度,降低了成本。