朱志承 陳志強
(1.北京全路通信信號研究設計院集團有限公司,北京 100070;2.北京市高速鐵路運行控制系統工程技術研究中心,北京 100070)
隨著現代信息技術的發展,軟件開發的周期大大縮短,對軟件的安全質量要進行嚴格的把關。軟件測試承擔著重要的任務,尤其是在一些關鍵領域,如航空航天、高鐵等行業對軟件可靠性和安全性都有很高的要求。
軟件測試自動化是通過開發和使用一些軟件測試工具、軟件自動測試系統,特別適合于軟件測試中重復而繁瑣的活動。軟件測試自動化技術一般是指一個特定測試的一系列指令,這些指令可以被自動化測試工具執行。
在開發軟件自動測試系統過程中,一定要明確自動測試系統的體系結構,各部分功能性要求。從軟件自動化測試的范圍和測試的屬性來看,通過研究自動測試過程中軟件的運作機制,信息的流動情況以及事件執行順序等,得到自動測試系統的一般體系結構,如圖1所示。

圖1 自動測試系統結構圖Fig.1 The chart of automatic test system
在車載軟件自動測試系統中,通過主引擎、分引擎與車載軟件之間的交互,最終實現車載軟件功能測試。測試流程如圖2所示。

圖2 車載軟件自動測試系統流程圖Fig.2 The flow chart of on-board software automatic test system
通過研究可以對車載軟件自動測試系統的流程做以下總結。
1)主引擎讀取測試案例腳本,并解析腳本,打包成數據包,調用腳本命令函數,通過測試接口發送給各分引擎。
2)各分引擎接到主引擎發來的測試命令數據包時,對測試命令數據包進行解析,并通過在相應測試引擎上的接口來操作相應的軟件。
3)被測軟件響應相應的測試操作,并通過通道返回參數數據。
4)主引擎根據返回的各種參數數據對比測試條件,判斷測試執行情況,以此來判斷測試的進度。
5)主引擎判斷測試狀態后,記錄測試結果,記錄測試日志數據到數據庫,方便以后的分析。
6)主引擎查找下一個腳本,周期執行上述操作。
通過上面幾個步驟,完成自動測試的一個周期。從上述步驟可以看出,在整個自動測試環境中,自動測試主引擎起到測試的組織和管理角色,是測試環境中很重要的一部分。
車載軟件自動測試系統對系統進行嚴格的功能性測試,以便使系統能夠安全高效的運行。車載軟件自動測試系統主要包括主引擎、DMI分引擎、車載分引擎,測試腳本文件和測試結果記錄數據庫等,系統框架如圖3所示。

圖3 車載軟件自動測試系統結構圖Fig.3 The architecture of on-board software automatic test system
通過圖3可以看出,車載軟件自動測試系統的各部分的組成及基本功能。
1)主引擎
主引擎是整個測試工作的組織者,通過加載解析測試案例腳本,并把它轉換成測試命令傳送給各分引擎,使車載軟件、OTE環境以及DMI軟件進行相應的操作,完成自動測試功能。同時,主引擎還對測試數據和腳本進行程度作判斷,判斷測試案例是否成功,并把測試結果及測試數據寫入數據庫,以便進行測試后的分析。
2)DMI分引擎
DMI分引擎從DMI軟件動態獲取系統的實時參數信息,并打包成數據包,發送給測試主引擎進行處理。同時,通過相應接口DMI分引擎可以獲取主引擎的控制命令,根據測試案例要求的控制命令,DMI分引擎進行相應的操作,如按壓啟動鍵、緩解按鈕等。
3)車載分引擎
車載分引擎通過接口直接獲取系統的實時信息,并根據測試案例腳本的要求,將這些信息發送給測試環境主引擎。同時,車載分引擎也能獲取主引擎的測試命令,通過測試接口對測試命令進行解析,從而實現對系統的各種操作,如設置列車運行方向、對列車加減速等。同時,它還能夠根據測試命令讀取線路數據腳本,為系統運行設置線路環境。
4)測試案例腳本
測試案例腳本通過自動化的測試命令使主引擎組織整個測試活動。測試腳本是把測試過程腳本化的操作過程,通過測試腳本,測試人員可以有目的地組織測試活動,對系統進行測試。
5)測試結果記錄數據庫
在測試工作中,會產生大量的測試數據日志,對這些數據的保存有利于測試后對問題的分析與整理,所以要在測試活動中建立測試結果記錄數據庫。一方面對每個測試案例腳本的測試結果進行保存,另一方面,對測試過程中產生的大量測試數據進行有效的保存。
自動測試系統主引擎作為自動測試活動的組織者,在自動測試環境中,自動測試主引擎主要承擔解析腳本、發送測試命令、回收數據、判斷測試結果、保存數據等功能。所以,在整個測試環境中,測試主引擎起著主要的推動作用,是測試軟件的核心。自動測試主引擎的流程設計如圖4所示。

圖4 主引擎流程圖Fig.4 The flow chart of the main engine
在車載軟件自動測試系統中,每一個案例都可以看成是列車的一次獨立運行,運行過程中產生的數據,可以用來分析車載軟件的功能實現的漏洞。在此基礎上,提出對測試案例腳本化,即把每一個測試案例轉化成腳本與參數值,在自動測試系統測試過程中,自動讀取腳本來進行測試工作。
根據車載軟件自動測試功能需求,編制以下幾種腳本命令。
1)測試環境控制命令
此類型命令主要是對測試環境進行預處理,相當于操作前的準備工作。例如:Load_TDGFile(FileName)、Goto_Position(Position)。
2)模擬列車控制命令
模擬對列車的控制,主要包括列車速度控制、列車接口控制、列車制動控制。例如:Set_Want-Speed(WantSpeed)、Set_Throttle
(Power)、Set_Cabin(State)。
3)DMI控制命令
此類型命令主要模擬司機按壓DMI按鈕操作,向ATP發送設定鍵值和設置列車長度等,例如:DMI_SetKey(DMIKey)。
4)測試流程與測試結果驗證命令
主引擎主要通過此類命令來控制測試流程的進行,同時結合系統的返回數據,檢驗測試結果是否與預期相符,以便檢驗系統測試是否成功,例如:Expect_ATPMode(Mode,Time)、Supervise_ATPMode(Mode,Position)、Wait_Train Speed GE(Speed,Time)。
測試數據的記錄要求詳細,有條理性,在后期的測試分析階段能從測試數據中提取有效信息。同時,由于測試案例可能有多個,為提高測試分析效率,必須對整體測試情況進行記錄,記錄本測試案例的總體測試情況,失敗位置與腳本命令等。把測試數據的記錄分在3個數據庫中進行,內容如下。
1)總體測試結果記錄數據庫
此數據庫包含各個測試案例的測試結果,通過此數據庫記錄的數據,測試分析人員可以得出測試過程中測試成功與測試失敗的案例名,以及初步的分析該腳本失敗的原因。實際數據在表中的存儲如圖5所示。

圖5 測試結果記錄數據庫圖Fig.5 The record database of test results
2)腳本結果記錄數據庫
腳本文件中包含著許多列車狀態數據比較命令,需要對這些命令的執行情況進行詳細記錄。腳本結果記錄數據庫包含執行此腳本命令的信息,包括列車基本的狀態信息、還包括此命令最終執行的結果,通過或者失敗。同時,也包含腳本命令執行的外部狀態信息,主要包括腳本執行日期、時間,腳本執行時列車位置,腳本命令以及期望值和實際值等。舉例腳本結果記錄數據在數據庫中的記錄如圖6所示。

圖6 腳本結果記錄數據庫Fig.6 The record database of script results
3)測試日志記錄數據庫

圖7 測試日志記錄數據庫Fig.7The record database of test logs
在查詢測試結果時,可以通過總體測試結果數據庫與腳本執行結果數據庫來查詢腳本案例的測試執行情況。如果要進一步分析測試案例的失敗原因,查找導致測試失敗的節點,需要結合上述兩個數據庫分析測試環境的原始數據。主引擎與各分引擎的數據交互都是通過各種數據包來實現的。這些原始數據包含列車的各種狀態信息與腳本命令的信息,設計測試日志記錄數據庫來保存測試數據,如圖7所示。
本文通過設計主引擎、分引擎、測試命令腳本、測試數據庫等,完成車載軟件自動測試系統。該系統可以大大的降低車載軟件功能測試的測試周期和測試覆蓋率,使得車載軟件具有更高的安全性與可靠性。