李海海,陳曉軒,劉心田,沈 悅
安全控制單元VCU(Vital Control Unit)是一套二取二架構(gòu)的嵌入式實時安全平臺[1],目前已經(jīng)被廣泛應(yīng)用于鐵路道岔控制單元、輸入/輸出控制單元、信號燈控制單元等系統(tǒng)[2]。這些系統(tǒng)的上層應(yīng)用軟件可以通過調(diào)用VCU 平臺提供的接口進行二次開發(fā),而整個系統(tǒng)的安全性、冗余性以及數(shù)據(jù)的正確讀取則依靠VCU平臺保證。
在對VCU 平臺軟件進行測試時,需要在源代碼中插入大量的測試樁代碼[3],如果采用固定樁代碼,完成一個用例測試后就需要改變代碼,關(guān)掉已執(zhí)行的用例樁,打開新的用例樁代碼,并重新編譯和燒錄,而編譯和燒錄過程比較耗時,嚴重影響測試效率[4],因此需要開發(fā)自動化測試平臺[5-6]。
VCU 平臺分為主安全控制單元(Master Vital Control Unit,MVCU)和從安全控制單元(Slaver Vital Control Unit,SVCU),MVCU 和 SVCU之間采用TFTP協(xié)議[7-10]進行通信。
測試平臺框架如圖1 所示,分為PC 端和嵌入式端。其中,MVCU 可以通過網(wǎng)線與PC 端相連,PC端通過TFTP協(xié)議發(fā)送命令給MVCU,由MVCU 執(zhí)行相應(yīng)的操作;PC 端向SVCU 嵌入式端發(fā)送命令時,由MVCU 嵌入式端將該命令轉(zhuǎn)發(fā)至SVCU 嵌入式端[9]。
圖1 測試平臺框架
嵌入式端包含4 部分,分別為樁代碼解析模塊,解析上位機發(fā)送的命令;樁代碼模塊,用于用戶自定義實現(xiàn)其所需功能;重啟模塊,接收PC 端重啟命令,復(fù)位單個軟件,實現(xiàn)軟件的重新啟動;配置&鏡像更新模塊,接收到配置和鏡像文件后,寫入內(nèi)存,更新系統(tǒng)配置或者鏡像。嵌入式端軟件需要分別與MVCU 和SVCU 一起編譯生成可執(zhí)行文件,可執(zhí)行文件運行后,測試平臺嵌入式端跟隨MVCU和SVCU軟件運行。
PC 端主要包含3 部分,分別為用例管理模塊,按照不同的用例,發(fā)送命令給嵌入式端;電源管理模塊,控制整個系統(tǒng)的電源,可實現(xiàn)自動上電和斷電;日志管理模塊,接收嵌入式端發(fā)送的日志,并記錄在相應(yīng)的測試用例下。
1) 用戶自定義功能。用戶可根據(jù)需求,自定義PC 端命令和嵌入式端命令,從而實現(xiàn)特定測試。PC 機端發(fā)送控制命令,嵌入式端收到命令后進行解析,打開已有的樁,實現(xiàn)某些用例特定功能,如發(fā)送變量值、改變某個變量值等。
2)自動記錄日志。PC 端發(fā)送控制腳本命令后,將嵌入式軟件發(fā)送的測試日志記錄在相應(yīng)的測試用例文件夾下,方便自動化測試結(jié)果的查看。
3)發(fā)送重啟命令。通過PC 端測試腳本的編寫,控制整個系統(tǒng)電源周期性或隨機性開關(guān),以及單個軟件周期性或隨機性重新啟動。
4)自動更新配置。在測試過程中,每個測試用例需要對應(yīng)不同的配置,可以先更新用例所需要的配置,再執(zhí)行測試用例,從而實現(xiàn)多用例的自動化測試。
5)自動更新鏡像。對于某些特定的用例,需要特定的嵌入式軟件鏡像,在執(zhí)行用例前,PC 端首先發(fā)送更新鏡像的命令以及鏡像,當嵌入式端收到鏡像更新命令后,再將收到的鏡像更新到指定的內(nèi)存地址,重啟后就可以運行新的鏡像。
測試平臺實現(xiàn)了動態(tài)樁注入,相比固定樁重復(fù)地編譯燒寫節(jié)約了時間;相比使用仿真器改變變量值,節(jié)約了仿真器成本,而且平臺可實現(xiàn)多個用例順序執(zhí)行,提高了自動化測試水平,節(jié)省了手動執(zhí)行的時間;平臺可擴展性強,PC 端和嵌入式端可由用戶自定義,適用于帶網(wǎng)絡(luò)通信的嵌入式系統(tǒng)。
測試前,需要編寫嵌入式端樁代碼。嵌入式端樁代碼以枚舉的方式列出,以測試用例號和步驟號為標識。打開樁代碼后,樁代碼執(zhí)行的命令可根據(jù)用戶需要自定義,如改變SVCU 變量值,控制外部繼電器的輸出命令等。嵌入式端樁代碼示例見圖2,用例SwRTC_0001 的第2 步為改變系統(tǒng)的運行模式,通過動態(tài)改變系統(tǒng)的運行模式,可影響SVCU 的輸出命令,例如在運行模式為1 時,SVCU對外輸出數(shù)據(jù)為全0。
圖2 嵌入式端樁代碼示例
PC 端編寫相應(yīng)的樁腳本文件后,通過TFTP協(xié)議傳給MVCU 板卡,由其轉(zhuǎn)發(fā)至SVCU 板卡。當SVCU 板卡收到命令后,打開SwRTC_000101和SwRTC_000102,SwRTC_000101 將輸出端口的狀態(tài)發(fā)送給MVCU,MVCU 再轉(zhuǎn)發(fā)給PC 端,PC 端將日志記錄在此用例的文件夾下,方便人工查看;SwRTC_000102 樁改變SVCU 的運行狀態(tài)。一個用例執(zhí)行多個樁命令時,可以通過延時來控制發(fā)送2個樁命令的時間間隔。PC端命令行見圖3。
為了節(jié)約測試時間,提高測試效率,平臺自動執(zhí)行所有的測試用例。在PC端,將要執(zhí)行的用例寫入Python腳本中,腳本運行后可順序執(zhí)行用例,當PC端捕捉到用例執(zhí)行完成后,再發(fā)送下一個用例的樁;在嵌入式端,當用例的最后一個樁執(zhí)行完成后,發(fā)送用例執(zhí)行結(jié)束命令。具體執(zhí)行流程見圖4。
圖4 平臺自動化測試執(zhí)行流程
測試平臺適用于帶有網(wǎng)絡(luò),且采用TFTP 協(xié)議進行通信的嵌入式系統(tǒng)。對于不能優(yōu)先啟動TFTP協(xié)議的嵌入式系統(tǒng),在TFTP任務(wù)掛起前的任務(wù)不能使用此平臺進行測試;如果被測軟件對任務(wù)啟動順序沒有定義,可先啟動測試平臺的嵌入式端軟件,待嵌入式端與PC 端通信正常后,再啟動被測試軟件的其他相應(yīng)任務(wù)。
采用該測試平臺時,需要將測試平臺嵌入式端與被測對象一起編譯生成可執(zhí)行文件,可執(zhí)行文件運行后,測試平臺嵌入式端跟隨被測軟件運行。該測試平臺支持自動執(zhí)行模式,可大大提高測試效率。
對于安全的嵌入式軟件來說,通過插樁來模擬軟件運行時遇到的各種故障,是驗證軟件功能的重要手段[11],基于TFTP 協(xié)議的測試平臺,不僅能夠?qū)崿F(xiàn)被測軟件動態(tài)故障模擬,全面驗證嵌入式軟件的安全性,還可以實現(xiàn)自動配置以及鏡像更新、日志自動記錄,減少了人工燒錄鏡像的步驟,提高了測試效率。