王軍賢
(通號城市軌道交通技術有限公司,北京 100070)
隨著城市軌道交通的快速發展,計算機聯鎖(CBI)在城軌基于通信的列車控制系統(CBTC)中廣泛應用。計算機聯鎖作為保障行車安全的子系統,它的功能、性能和產品質量直接關系到列車運行的安全與效率,而聯鎖軟件作為計算機聯鎖系統的核心軟件,其數據的準確性對信號系統的安全性與可靠性至關重要,是城軌CBTC運行的基礎,因此對聯鎖產品遍歷測試在城市軌道交通領域顯得非常關鍵。目前主要采用人工測試,人工測試的弊端為效率低、測試成本高、測試結果不可重復等。為了解決這些問題,可以采用自動化測試技術,以提高測試效率和降低測試成本。聯鎖自動測試是一種自動化測試技術,它可以幫助開發人員更快地測試軟件,確保軟件的正確性和可靠性。
目前城軌CBTC聯鎖產品交付測試包括軟件版本校核、單項測試、輸入輸出測試、界面顯示測試、進路測試、維護機測試、平臺數據測試、接口測試8個大項,其中單項測試包括上電鎖閉測試、道岔單鎖/單解、道岔強扳等15個測試項;進路測試包括進路辦理、進路鎖閉、信號開放、引導進路等48個測試項,進路測試分為CBTC模式和降級模式兩種;接口測試包括聯鎖與區域控制器(ZC)接口信息測試、聯鎖與地面電子單元(LEU)接口應答器報文數據測試、聯鎖與列車自動防護系統(ATP)接口數據測試、聯鎖與車地通信(TWC)接口數據測試等4個測試項。聯鎖產品交付測試共計72個測試項,測試對象如圖1所示。

圖1 測試對象Fig.1 Test objects
目前聯鎖產品測試主要依靠純人工測試,完整測試1條進路包括CBTC模式和降級模式大約需要2.5~3 h,對于車站規模為25~30條進路的新建車站,進行一輪完整的交付測試周期大約為20個工作日,有些車站進路數量超過50條,進行完整一輪交付測試的周期大約需要30個工作日,加上前期測試輸入資料準備、測試環境準備、編寫測試大綱和測試報告相關工作,每個車站的測試周期會更長;另外,人工測試操作重復性高、測試效率低,難免出現人為操作失誤,導致測試結果的可信性降低,很難做到完全的遍歷測試。
綜上,無論是從測試效率和測試準確率都無法滿足聯鎖產品交付測試工作的需求,為了滿足測試的高效性、準確性及覆蓋率,急需研究一種聯鎖自動測試工具代替人工測試來提高測試效率和準確率,進而大大提升聯鎖產品測試的交付能力和水平。
人工測試采用一臺可進行限定環境模擬的接口計算機,測試工程師使用自然語言編寫測試用例,選擇測試數據的樣本,初始化測試環境并向測試人機界面發送命令,后通過顯示的數據檢查結果并編寫測試報告,如圖2所示。

圖2 人工測試流程Fig.2 Manual test process
人工測試潛在的問題主要包括:不具代表性的數據樣本、數據丟失或數據濫用;數據讀取錯誤,測試報告完整度不高等均會給測試帶來干擾,造成逃逸缺陷(NCR),影響系統安全。
自動測試工具具有場景運行功能,它有完整的環境和故障模擬,測試工程師使用高級指令和宏以及系統知識去編寫測試案例,上載所有測試數據后運行測試,自動選擇要測試的案例,通過測試工具管理場景結果,根據測試結果自動編寫測試總結報告,自動測試流程如圖3所示。

圖3 自動測試流程Fig.3 Automatic test flow
綜上,自動測試的優勢總結有如下:
1)測試運行時無人為錯誤,包括操作或檢查;
2)確保可重復性和非回歸能力;
3)測試結果有明確通過/失敗標識;
4)測試庫、宏、場景的可以被復用;
5)可實現測試案例邏輯和故障分析。
自動化測試是不在人工干預的情況下,按提前預設的流程自動進行測試、數據分析并以一定的方式輸出展現測試結果,基于以上思路設計以場景庫、測試引擎及測試平臺為核心的自動化測試工具。自動化測試工具架構如圖4所示。

圖4 自動化測試工具架構Fig.4 Architecture of automatic test tool
場景庫:存儲、維護多種測試場景和測試腳本,方便回歸測試。場景定義應結合信號系統需求、子系統需求,以及由此設計的用例,并將這三者的追蹤關系進行記錄,以保證測試用例的可追溯性并滿足覆蓋審查條件。
測試引擎:負責被測對象軟件的初始化和數據傳輸,解析自動化測試腳本,對各子系統的接口函數進行驅動,對其中的調用可以進行加速、減速等模擬時鐘操作。
測試平臺:以信號系統和各子系統(列車自動控制系統(ATS)、計算機聯鎖(CI)、ZC、車載控制器(VOBC))為被測對象,包括運行在一臺或多臺Linux操作系統的由真實信號系統源代碼編譯的應用程序、基于共享內存技術實現的內存變量監視和重載庫、軌旁設備(信號機、道岔、計軸、屏蔽門等)模擬器、仿真車輛模擬器和以太網模擬器等多個應用進程。
司機操作界面:提供車輛運行狀況顯示,包括速度、告警、駕駛模式等信息,可以執行人工操作指令或場景庫中的測試腳本觸發的指令。
子系統仿真代理接口:負責獲取信號系統軟件中的數據,記錄軟件運行時的各類屬性值、狀態機工況、代碼執行路徑等。
針對城軌聯鎖產品測試項,部分測試項主要為人工校核,如控顯界面顯示信號機朝向、高矮柱、平臺參數等,該測試項主要為界面或數據核對,工具識別相對困難且測試用時占比較小,通過大量測試實踐證明,單項測試、進路測試信息量大且耗時耗力,主要通過人工識別聯鎖表內信息同步手動操作控顯界面按鈕來測試,因此這部分具備自動化測試的特點。構建自動測試工具首先讀取輸入資料如聯鎖表、采驅表,并生成具體聯鎖車站自動測試基礎數據,然后根據預先設定好的測試項目、測試方法和步驟對聯鎖軟件進行單項測試和進路測試,最后生成測試日志和測試記錄,實現流程如圖5所示。

圖5 聯鎖自動測試實現流程Fig.5 Implementation flow of automatic test of interlocking product
聯鎖自動化測試工具通過腳本文件來定義測試場景,通過多次運行編輯和生成的腳本文件實現對測試案例的重復測試,能模擬用戶在控顯界面和鍵盤上操作,并能識別屏幕上的文本以及圖片,并根據控顯界面元素的顏色以及狀態的變化來檢查界面顯示是否滿足測試結果,如識別道岔是否處于期望位置,信號機顯示的顏色是否符合預期。同時,聯鎖自動化測試工具可通過適配器采用以太網通信方式獲取聯鎖輸入與輸出數據,并以此判斷測試結果是否符合預期。
本文設計的聯鎖自動化測試工具可涵蓋單項測試、進路測試等測試體系的所有測試內容,采用人工與自動相結合的方式,執行效率更高,對于回歸測試也可以啟用自動測試工具實現,可以運行在測試人員工作電腦或者工控機上,通過讀取輸入資料,包括聯鎖表、采驅表,并生成具體車站自動測試數據,通過人機界面選擇測試項目,滿足7×24 h自動測試的需求,并自動生成測試日志和測試報告,并記錄相關NCR,測試工具架構如圖6所示。

圖6 聯鎖自動測試工具架構Fig.6 Architecture of automatic test tool of interlocking product
工具核心是測試工具的控制器,通過它加載場景和配置數據,發送待執行的命令,并在日志文件中記錄測試結果。工具核心也允許用戶去定義測試場景及整體測試配置。當適配器從工具核心收到執行命令后,執行操作并把測試結果返回工具核心。采用圖像識別技術自動定位和確定軟件界面中包含的控件進而自動生成測試腳本;測試過程中,通過對待測軟件進行屏幕截圖,采用圖像識別算法識別截圖中是否包含預定義的可操作控件,如果存在,則觸發控制指令,達到圖像識別引導測試過程的目的;測試結果的驗證通過對待測軟件的界面進行截圖操作,利用圖像識別技術將截圖與期望的結果進行匹配,從而自動獲取測試結果。LSTEST適配器通過UDP界面控制與LSTEST應用軟件接口,并檢查顯示,適配器從工具核心收到執行命令,執行操作并將結果送回工具核心。對于接口使用cwind庫和twapi來控制適配器到HMI的鼠標操作,并使用Img和twapi來檢查設計位置的屏幕顯示,該接口基于TCP實現,事實上在執行其他命令時,工具核心會等待反饋,以防造成通信堵塞。如果有通信故障發生,將嘗試建立3 次通信,如果失敗,則會向工具核心返回1個故障信息。
為最大限度提高測試效率,做如下優化,定義可替換測試MMI的接口,定義MMI虛擬用戶來控制和檢查MMI,增加故障命令、環境模擬,并加入從舊的測試數據自動導入測試數據。
4.2.1 讀取輸入資料
首先讀取Excel格式文件CBTC聯鎖表、降級模式聯鎖表、引導進路聯鎖表、自動折返進路聯鎖表并識別聯鎖表中的道岔信息、區段信息、信號機信息等其他元素,然后將測試數據進行存儲,導入聯鎖表數據,同時讀取輸入輸出信息表,然后將測試數據進行存儲,作為生成自動測試基礎數據的輸入。
4.2.2 生成測試數據
在完成基礎數據的讀取后,生成基于特定線路和特定站場的測試數據以便調用,在測試時調用并生成測試基礎數據,基礎數據生成結果如圖7所示。

圖7 基礎數據生成結果Fig.7 Results of basic data generation
4.2.3 測試運行
啟動工具核心,對車站聯鎖數據進行完整測試、部分測試,可以根據項目特性與差異點任意選取測試項,也可在任意測試項內選擇所需要測試的數據靈活設置,測試項選擇如圖8所示。
4.2.4 測試輸出
測試完成后,測試主界面可直接顯示測試錯誤數量,測試日志內則詳細記錄了測試結果,測試結果主界面顯示如圖9所示。

圖9 測試結果顯示Fig.9 Display of test results
測試完成后,除查看測試主界面測試錯誤數量外,測試日志內也詳細記錄了測試結果,并給出錯誤原因,可供測試人員分析,同時可根據測試日志生成最終的測試記錄單,導入要生成報告的日志,可同時選擇一個或多個日志文件,然后單擊“生成”即可。測試報告如圖10所示。

圖10 測試報告Fig.10 Test report
本文構建的自動化測試工具的優點可在不改變任何數據代碼的情況下代替人工操作鼠標執行測試,且滿足7×24 h自動測試的需求,大大提高測試效率,尤其是在需求改變不大的回歸測試中,甚至可以達到3倍以上效率的提高,有助于信號系統交付能力的整體提升;同時自動測試工具支持C/S、B/S各種技術框架和基于組件智能識別的組件工具,可實現自動化回歸測試和功能測試,讓測試更智能。在手動測試中測試人員存在一定的人為失誤風險,并且很難做到完全的遍歷測試,人工測試存在一定的測試誤差,自動化測試工具可優先彌補此測試風險。測試成本降低約15%~30%,測試時間大大縮短,提升現場交付效率約30%~50%。
但是自動化測試工具在使用前需要進行測試準備,包括截圖配置、菜單配置、輸入資料配置等等,配置相對耗時,同時自動測試工具對測試設備要求較高,測試設備需運行流暢。若出現卡頓則會影響測試結果,糾錯能力稍差,在測試過程中若彈出其他不相干的窗口,則會影響測試結果,甚至停止測試,同時對于自動測試工具的檢測認證以及其系統的安全性與可靠性認證及維護是一個有待優化的問題。
本文在現有聯鎖產品交付測試方法和特點的基礎上結合各線路,提出自動化測試的方式,且構建自動化測試工具架構,實現聯鎖產品交付測試的自動化過程。目前該自動化測試工具已經用于城軌聯鎖產品交付測試中,對提高測試效率及測試質量發揮了一定作用,但后期仍有一定的改進空間,可優化降低配置時間及配置通過率并增加圖像識別技術達到完全的自動化測試,讓測試效率及測試質量再上一個新臺階。