朱志承 陳志強(qiáng)
(1.北京全路通信信號研究設(shè)計院集團(tuán)有限公司,北京 100070;2.北京市高速鐵路運行控制系統(tǒng)工程技術(shù)研究中心,北京 100070)
隨著現(xiàn)代信息技術(shù)的發(fā)展,軟件開發(fā)的周期大大縮短,對軟件的安全質(zhì)量要進(jìn)行嚴(yán)格的把關(guān)。軟件測試承擔(dān)著重要的任務(wù),尤其是在一些關(guān)鍵領(lǐng)域,如航空航天、高鐵等行業(yè)對軟件可靠性和安全性都有很高的要求。
軟件測試自動化是通過開發(fā)和使用一些軟件測試工具、軟件自動測試系統(tǒng),特別適合于軟件測試中重復(fù)而繁瑣的活動。軟件測試自動化技術(shù)一般是指一個特定測試的一系列指令,這些指令可以被自動化測試工具執(zhí)行。
在開發(fā)軟件自動測試系統(tǒng)過程中,一定要明確自動測試系統(tǒng)的體系結(jié)構(gòu),各部分功能性要求。從軟件自動化測試的范圍和測試的屬性來看,通過研究自動測試過程中軟件的運作機(jī)制,信息的流動情況以及事件執(zhí)行順序等,得到自動測試系統(tǒng)的一般體系結(jié)構(gòu),如圖1所示。
圖1 自動測試系統(tǒng)結(jié)構(gòu)圖Fig.1 The chart of automatic test system
在車載軟件自動測試系統(tǒng)中,通過主引擎、分引擎與車載軟件之間的交互,最終實現(xiàn)車載軟件功能測試。測試流程如圖2所示。
圖2 車載軟件自動測試系統(tǒng)流程圖Fig.2 The flow chart of on-board software automatic test system
通過研究可以對車載軟件自動測試系統(tǒng)的流程做以下總結(jié)。
1)主引擎讀取測試案例腳本,并解析腳本,打包成數(shù)據(jù)包,調(diào)用腳本命令函數(shù),通過測試接口發(fā)送給各分引擎。
2)各分引擎接到主引擎發(fā)來的測試命令數(shù)據(jù)包時,對測試命令數(shù)據(jù)包進(jìn)行解析,并通過在相應(yīng)測試引擎上的接口來操作相應(yīng)的軟件。
3)被測軟件響應(yīng)相應(yīng)的測試操作,并通過通道返回參數(shù)數(shù)據(jù)。
4)主引擎根據(jù)返回的各種參數(shù)數(shù)據(jù)對比測試條件,判斷測試執(zhí)行情況,以此來判斷測試的進(jìn)度。
5)主引擎判斷測試狀態(tài)后,記錄測試結(jié)果,記錄測試日志數(shù)據(jù)到數(shù)據(jù)庫,方便以后的分析。
6)主引擎查找下一個腳本,周期執(zhí)行上述操作。
通過上面幾個步驟,完成自動測試的一個周期。從上述步驟可以看出,在整個自動測試環(huán)境中,自動測試主引擎起到測試的組織和管理角色,是測試環(huán)境中很重要的一部分。
車載軟件自動測試系統(tǒng)對系統(tǒng)進(jìn)行嚴(yán)格的功能性測試,以便使系統(tǒng)能夠安全高效的運行。車載軟件自動測試系統(tǒng)主要包括主引擎、DMI分引擎、車載分引擎,測試腳本文件和測試結(jié)果記錄數(shù)據(jù)庫等,系統(tǒng)框架如圖3所示。
圖3 車載軟件自動測試系統(tǒng)結(jié)構(gòu)圖Fig.3 The architecture of on-board software automatic test system
通過圖3可以看出,車載軟件自動測試系統(tǒng)的各部分的組成及基本功能。
1)主引擎
主引擎是整個測試工作的組織者,通過加載解析測試案例腳本,并把它轉(zhuǎn)換成測試命令傳送給各分引擎,使車載軟件、OTE環(huán)境以及DMI軟件進(jìn)行相應(yīng)的操作,完成自動測試功能。同時,主引擎還對測試數(shù)據(jù)和腳本進(jìn)行程度作判斷,判斷測試案例是否成功,并把測試結(jié)果及測試數(shù)據(jù)寫入數(shù)據(jù)庫,以便進(jìn)行測試后的分析。
2)DMI分引擎
DMI分引擎從DMI軟件動態(tài)獲取系統(tǒng)的實時參數(shù)信息,并打包成數(shù)據(jù)包,發(fā)送給測試主引擎進(jìn)行處理。同時,通過相應(yīng)接口DMI分引擎可以獲取主引擎的控制命令,根據(jù)測試案例要求的控制命令,DMI分引擎進(jìn)行相應(yīng)的操作,如按壓啟動鍵、緩解按鈕等。
3)車載分引擎
車載分引擎通過接口直接獲取系統(tǒng)的實時信息,并根據(jù)測試案例腳本的要求,將這些信息發(fā)送給測試環(huán)境主引擎。同時,車載分引擎也能獲取主引擎的測試命令,通過測試接口對測試命令進(jìn)行解析,從而實現(xiàn)對系統(tǒng)的各種操作,如設(shè)置列車運行方向、對列車加減速等。同時,它還能夠根據(jù)測試命令讀取線路數(shù)據(jù)腳本,為系統(tǒng)運行設(shè)置線路環(huán)境。
4)測試案例腳本
測試案例腳本通過自動化的測試命令使主引擎組織整個測試活動。測試腳本是把測試過程腳本化的操作過程,通過測試腳本,測試人員可以有目的地組織測試活動,對系統(tǒng)進(jìn)行測試。
5)測試結(jié)果記錄數(shù)據(jù)庫
在測試工作中,會產(chǎn)生大量的測試數(shù)據(jù)日志,對這些數(shù)據(jù)的保存有利于測試后對問題的分析與整理,所以要在測試活動中建立測試結(jié)果記錄數(shù)據(jù)庫。一方面對每個測試案例腳本的測試結(jié)果進(jìn)行保存,另一方面,對測試過程中產(chǎn)生的大量測試數(shù)據(jù)進(jìn)行有效的保存。
自動測試系統(tǒng)主引擎作為自動測試活動的組織者,在自動測試環(huán)境中,自動測試主引擎主要承擔(dān)解析腳本、發(fā)送測試命令、回收數(shù)據(jù)、判斷測試結(jié)果、保存數(shù)據(jù)等功能。所以,在整個測試環(huán)境中,測試主引擎起著主要的推動作用,是測試軟件的核心。自動測試主引擎的流程設(shè)計如圖4所示。
圖4 主引擎流程圖Fig.4 The flow chart of the main engine
在車載軟件自動測試系統(tǒng)中,每一個案例都可以看成是列車的一次獨立運行,運行過程中產(chǎn)生的數(shù)據(jù),可以用來分析車載軟件的功能實現(xiàn)的漏洞。在此基礎(chǔ)上,提出對測試案例腳本化,即把每一個測試案例轉(zhuǎn)化成腳本與參數(shù)值,在自動測試系統(tǒng)測試過程中,自動讀取腳本來進(jìn)行測試工作。
根據(jù)車載軟件自動測試功能需求,編制以下幾種腳本命令。
1)測試環(huán)境控制命令
此類型命令主要是對測試環(huán)境進(jìn)行預(yù)處理,相當(dāng)于操作前的準(zhǔn)備工作。例如:Load_TDGFile(FileName)、Goto_Position(Position)。
2)模擬列車控制命令
模擬對列車的控制,主要包括列車速度控制、列車接口控制、列車制動控制。例如:Set_Want-Speed(WantSpeed)、Set_Throttle
(Power)、Set_Cabin(State)。
3)DMI控制命令
此類型命令主要模擬司機(jī)按壓DMI按鈕操作,向ATP發(fā)送設(shè)定鍵值和設(shè)置列車長度等,例如:DMI_SetKey(DMIKey)。
4)測試流程與測試結(jié)果驗證命令
主引擎主要通過此類命令來控制測試流程的進(jìn)行,同時結(jié)合系統(tǒng)的返回數(shù)據(jù),檢驗測試結(jié)果是否與預(yù)期相符,以便檢驗系統(tǒng)測試是否成功,例如:Expect_ATPMode(Mode,Time)、Supervise_ATPMode(Mode,Position)、Wait_Train Speed GE(Speed,Time)。
測試數(shù)據(jù)的記錄要求詳細(xì),有條理性,在后期的測試分析階段能從測試數(shù)據(jù)中提取有效信息。同時,由于測試案例可能有多個,為提高測試分析效率,必須對整體測試情況進(jìn)行記錄,記錄本測試案例的總體測試情況,失敗位置與腳本命令等。把測試數(shù)據(jù)的記錄分在3個數(shù)據(jù)庫中進(jìn)行,內(nèi)容如下。
1)總體測試結(jié)果記錄數(shù)據(jù)庫
此數(shù)據(jù)庫包含各個測試案例的測試結(jié)果,通過此數(shù)據(jù)庫記錄的數(shù)據(jù),測試分析人員可以得出測試過程中測試成功與測試失敗的案例名,以及初步的分析該腳本失敗的原因。實際數(shù)據(jù)在表中的存儲如圖5所示。
圖5 測試結(jié)果記錄數(shù)據(jù)庫圖Fig.5 The record database of test results
2)腳本結(jié)果記錄數(shù)據(jù)庫
腳本文件中包含著許多列車狀態(tài)數(shù)據(jù)比較命令,需要對這些命令的執(zhí)行情況進(jìn)行詳細(xì)記錄。腳本結(jié)果記錄數(shù)據(jù)庫包含執(zhí)行此腳本命令的信息,包括列車基本的狀態(tài)信息、還包括此命令最終執(zhí)行的結(jié)果,通過或者失敗。同時,也包含腳本命令執(zhí)行的外部狀態(tài)信息,主要包括腳本執(zhí)行日期、時間,腳本執(zhí)行時列車位置,腳本命令以及期望值和實際值等。舉例腳本結(jié)果記錄數(shù)據(jù)在數(shù)據(jù)庫中的記錄如圖6所示。
圖6 腳本結(jié)果記錄數(shù)據(jù)庫Fig.6 The record database of script results
3)測試日志記錄數(shù)據(jù)庫
圖7 測試日志記錄數(shù)據(jù)庫Fig.7The record database of test logs
在查詢測試結(jié)果時,可以通過總體測試結(jié)果數(shù)據(jù)庫與腳本執(zhí)行結(jié)果數(shù)據(jù)庫來查詢腳本案例的測試執(zhí)行情況。如果要進(jìn)一步分析測試案例的失敗原因,查找導(dǎo)致測試失敗的節(jié)點,需要結(jié)合上述兩個數(shù)據(jù)庫分析測試環(huán)境的原始數(shù)據(jù)。主引擎與各分引擎的數(shù)據(jù)交互都是通過各種數(shù)據(jù)包來實現(xiàn)的。這些原始數(shù)據(jù)包含列車的各種狀態(tài)信息與腳本命令的信息,設(shè)計測試日志記錄數(shù)據(jù)庫來保存測試數(shù)據(jù),如圖7所示。
本文通過設(shè)計主引擎、分引擎、測試命令腳本、測試數(shù)據(jù)庫等,完成車載軟件自動測試系統(tǒng)。該系統(tǒng)可以大大的降低車載軟件功能測試的測試周期和測試覆蓋率,使得車載軟件具有更高的安全性與可靠性。