何謝振,周志飛,蔣 劍
(湖南中車時(shí)代通信信號(hào)有限公司,湖南 長沙 410100)
LKJ-15C型列車運(yùn)行監(jiān)控系統(tǒng)(簡稱“LKJ-15C”)是基于安全計(jì)算機(jī)系統(tǒng)、具有高安全性和高可靠性的新一代列車運(yùn)行監(jiān)控裝置。它能防止列車冒進(jìn)、超速,并能輔助司機(jī)操縱,在保障列車運(yùn)行安全方面起著極為重要的作用[1-3]。LKJ-15C主機(jī)軟件是LKJ-15C的核心控制軟件,其功能的正確性和可靠性直接影響列車的行車安全。
LKJ-15C主機(jī)軟件的功能繁多、應(yīng)用場景復(fù)雜,而且經(jīng)常要根據(jù)客戶需求進(jìn)行適應(yīng)性修改,其手工測試方法存在諸多弊端[1-2,4]:(1)工作量大、效率低、耗時(shí)費(fèi)力,以至于軟件變更發(fā)布時(shí),根本沒有時(shí)間做整體回歸測試,存在較大的安全隱患;(2)測試過程中無法人機(jī)分離,測試人員必須待在LKJ-15C設(shè)備旁,不間斷地進(jìn)行測試操作,勞動(dòng)強(qiáng)度大;(3)人工觀察測試執(zhí)行過程并對(duì)測試結(jié)果進(jìn)行判斷,容易出現(xiàn)缺陷遺漏或?qū)y試結(jié)果誤判的情況;(4)測試過程不易重復(fù)或復(fù)現(xiàn),不利于測試用例的積累、固化等。實(shí)現(xiàn)對(duì)LKJ-15C主機(jī)軟件的自動(dòng)化測試是解決手工測試諸多問題的有效方案。為此,本文設(shè)計(jì)了一套LKJ-15C主機(jī)軟件自動(dòng)化測試系統(tǒng),真正實(shí)現(xiàn)了主機(jī)軟件的自動(dòng)化發(fā)布測試。
LKJ-15C主機(jī)軟件自動(dòng)化測試系統(tǒng)采用半實(shí)物仿真技術(shù),即主機(jī)軟件運(yùn)行于LKJ-15C真實(shí)的硬件環(huán)境中,與LKJ-15C交互的信號(hào)設(shè)備采用計(jì)算機(jī)仿真模擬,LKJ-15C與虛擬信號(hào)設(shè)備之間通過真實(shí)的硬件接口相連接[4]。自動(dòng)化測試系統(tǒng)由面向儀器系統(tǒng)的PCI擴(kuò)展(PCI extensions for instrumentation, PXI)主機(jī)模塊、信號(hào)調(diào)理模塊、以太網(wǎng)交換機(jī)、電源模塊和計(jì)算機(jī)操作模塊構(gòu)成,如圖1所示。
圖1 LKJ-15C主機(jī)軟件自動(dòng)化測試系統(tǒng)結(jié)構(gòu)Fig. 1 Structure of the automatic test system for LKJ-15C host software
PXI主機(jī)模塊由PXI機(jī)箱、控制器、通用采集插件、模擬量IO插件、數(shù)字量IO插件、串口通信擴(kuò)展插件和CAN通信擴(kuò)展插件組成[5],主要用于模擬機(jī)車運(yùn)行時(shí)各種LKJ-15C工作條件[6]??刂破髋c通用采集插件、模擬量IO插件、數(shù)字量IO插件、串口通信擴(kuò)展插件、CAN通信擴(kuò)展插件均安裝于PXI機(jī)箱中,并通過PXI總線進(jìn)行數(shù)據(jù)交互。自動(dòng)化測試系統(tǒng)軟件運(yùn)行于控制器中,用以控制PXI主機(jī)模塊實(shí)現(xiàn)自動(dòng)化測試功能。
通用采集插件為LKJ-15C提供速度脈沖信號(hào)和柴油機(jī)轉(zhuǎn)速(簡稱“柴速”)信號(hào);模擬量IO插件為LKJ-15C提供各種壓力和直流電壓信號(hào);數(shù)字量IO插件為LKJ-15C提供機(jī)車工況和平面無線調(diào)車燈顯信號(hào),并采集LKJ-15C輸出的制動(dòng)信號(hào);串口通信擴(kuò)展插件用于模擬其他自動(dòng)列車防護(hù)(automatic train protection, ATP)設(shè)備信息;CAN通信擴(kuò)展插件用于模擬機(jī)車信號(hào)和地面點(diǎn)式應(yīng)答器信息。
信號(hào)調(diào)理模塊包括速度隔離插件、波形調(diào)理插件、電流調(diào)理插件、電壓調(diào)理插件、電平檢測插件及繼電器輸出插件,用于對(duì)PXI主機(jī)模塊的輸入輸出信號(hào)進(jìn)行隔離調(diào)理。其中,速度隔離插件用于對(duì)通用采集插件輸出的速度信號(hào)進(jìn)行隔離放大;波形調(diào)理插件用于對(duì)通用采集插件輸出的柴速信號(hào)進(jìn)行隔離放大;電流調(diào)理插件用于對(duì)模擬量IO插件輸出的各壓力信號(hào)(4~20 mA)進(jìn)行隔離;電壓調(diào)理插件用于對(duì)模擬量IO插件輸出的直流電壓信號(hào)進(jìn)行隔離;繼電器輸出插件用于對(duì)數(shù)字量IO插件輸出的機(jī)車工況、平面無線調(diào)車燈顯信號(hào)進(jìn)行隔離轉(zhuǎn)換,并輸出至LKJ-15C;電平檢測插件用于采集LKJ-15C輸出的制動(dòng)信號(hào),將其隔離轉(zhuǎn)換后送入數(shù)字量IO插件。
PXI主機(jī)模塊通過以太網(wǎng)交換機(jī),輸入人機(jī)界面單元(driver machine interface, DMI)模擬司機(jī)操作信息給LKJ-15C,獲取的LKJ-15C主機(jī)輸出信息用于測試結(jié)果判斷并控制程控電源。
電源模塊由2個(gè)程控電源組成,其中一個(gè)程控電源為LKJ-15C設(shè)備提供DC 110 V的電源,另一個(gè)程控電源為信號(hào)調(diào)理模塊提供電源。
自動(dòng)化測試系統(tǒng)軟件用于對(duì)LKJ-15C的外部信號(hào)和數(shù)據(jù)環(huán)境進(jìn)行計(jì)算機(jī)仿真建模,并通過測試腳本技術(shù)實(shí)現(xiàn)對(duì)LKJ-15C主機(jī)軟件的自動(dòng)化測試。自動(dòng)化測試系統(tǒng)軟件由測試腳本開發(fā)模塊、測試腳本執(zhí)行模塊及仿真模型庫構(gòu)成,如圖2所示。
圖2 自動(dòng)化測試系統(tǒng)軟件結(jié)構(gòu)Fig. 2 Software structure of the automatic test system
測試腳本開發(fā)模塊用于測試腳本的編輯、編譯、調(diào)試及管理,主要由腳本編輯器、腳本編譯器、腳本調(diào)試器和腳本管理器構(gòu)成。其中,腳本編輯器用于提供智能、友好、便捷的測試腳本編輯環(huán)境,如智能輸入和修改、用顏色區(qū)分不同類別的標(biāo)識(shí)符、自動(dòng)腳本語法檢查、自動(dòng)格式調(diào)整等。腳本編譯器用于對(duì)測試腳本進(jìn)行詞法、語法和語義分析,以及生成目標(biāo)代碼;編譯不通過時(shí),能夠顯示和定位編譯錯(cuò)誤信息。腳本調(diào)試器支持對(duì)測試腳本進(jìn)行非中斷和中斷(斷點(diǎn)設(shè)置、單步執(zhí)行等)兩種模式的調(diào)試。腳本管理器以資源管理器的形式對(duì)測試腳本進(jìn)行組織管理。測試腳本開發(fā)工具如圖3所示。
圖3 測試腳本開發(fā)工具Fig. 3 Test script development tool
測試腳本執(zhí)行模塊實(shí)現(xiàn)對(duì)測試腳本執(zhí)行解釋、測試結(jié)果驗(yàn)證分析等功能,主要由測試項(xiàng)目管理器、測試執(zhí)行管理器、測試信息顯示器、腳本解釋執(zhí)行器、測試結(jié)果驗(yàn)證器和測試結(jié)果分析器構(gòu)成。系統(tǒng)軟件測試執(zhí)行主界面如圖4所示。
圖4 自動(dòng)化測試系統(tǒng)軟件主界面Fig. 4 Main operation interface of the automatic test system software
(1)測試項(xiàng)目管理器。其用于測試項(xiàng)目的創(chuàng)建、打開、保存及設(shè)置等。
(2)測試執(zhí)行管理器。其用于運(yùn)行或停止測試,定制測試任務(wù)。例如,測試用例選擇性執(zhí)行、全部執(zhí)行、只選擇上次不通過的用例、重復(fù)執(zhí)行、控制測試執(zhí)行時(shí)間等。
(3)測試信息顯示器。其以豐富友好的形式輸出各種測試信息,包括測試用例信息、測試運(yùn)行過程信息、測試結(jié)果信息及測試日志等,以便測試狀態(tài)監(jiān)測和問題分析。
(4)腳本解釋執(zhí)行器。其用于解釋執(zhí)行測試腳本,驅(qū)動(dòng)仿真模型運(yùn)行,按測試邏輯發(fā)送和接收測試數(shù)據(jù),并調(diào)度管理測試任務(wù)。其中,測試腳本以測試類為單元,每個(gè)測試類中包含多個(gè)測試用例。如圖5所示,測試腳本的執(zhí)行流程為:首先執(zhí)行測試類建立腳本,通常會(huì)調(diào)用系統(tǒng)控制模型進(jìn)行系統(tǒng)初始化并執(zhí)行本測試類特有的一些初始化操作;然后逐個(gè)執(zhí)行測試類中的測試用例,在每個(gè)測試用例執(zhí)行之前,先執(zhí)行測試用例建立腳本,執(zhí)行完之后,會(huì)執(zhí)行測試用例拆卸腳本,這樣做的目的是保證測試用例之間能夠相互獨(dú)立,互不影響;在所有測試用例執(zhí)行完之后,執(zhí)行測試類拆卸腳本,通常會(huì)執(zhí)行一些測試清理復(fù)位操作并關(guān)閉系統(tǒng)。
圖5 測試腳本執(zhí)行流程Fig. 5 Test script execution process
(5)測試結(jié)果驗(yàn)證器。其用來自動(dòng)判斷測試結(jié)果。測試用例的測試結(jié)果有4種狀態(tài):通過(經(jīng)過一系列的操作后,LKJ-15C主機(jī)輸出信息與預(yù)期值一致,則測試通過)、失敗(LKJ-15C主機(jī)輸出信息與預(yù)期值不一致,則測試失?。?、錯(cuò)誤(由于系統(tǒng)異常錯(cuò)誤造成的測試不通過,如通信斷鏈、非法輸入等)和忽略(由于前置條件不滿足之類特殊原因而忽略執(zhí)行的測試用例,其測試結(jié)果為忽略)。
(6)測試結(jié)果分析器。其能統(tǒng)計(jì)和存儲(chǔ)測試結(jié)果,分析測試不通過的原因,定位測試不通過的腳本語句,生成和打印測試報(bào)告等。圖6為用例測試失敗原因分析示例。
圖6 測試失敗原因分析Fig. 6 Cause analysis for failure of test
仿真模型庫是針對(duì)LKJ-15C的數(shù)據(jù)運(yùn)行環(huán)境的計(jì)算機(jī)仿真模型的集合。仿真模型通過調(diào)用PXI主機(jī)模塊的硬件驅(qū)動(dòng)程序?qū)崿F(xiàn)與被測LKJ-15C主機(jī)軟件之間的信息交互。本系統(tǒng)設(shè)計(jì)的主要仿真模型如表1所示,其中輸入和輸出是相對(duì)于被測LKJ-15C而言的。仿真模型是測試腳本的操作對(duì)象,測試腳本通過調(diào)用仿真模型接口來控制仿真模型與被測LKJ-15C主機(jī)軟件間按照測試邏輯進(jìn)行交互,并對(duì)測試結(jié)果進(jìn)行判斷,從而達(dá)到自動(dòng)化測試的目的。以下為測試走停走控制功能[7-8]的一個(gè)用例腳本:
表1 仿真模型Tab. 1 Simulation models
LKJ-15C主機(jī)軟件自動(dòng)化系統(tǒng)的測試流程見圖7,具體如下:
圖7 自動(dòng)化測試系統(tǒng)測試流程Fig. 7 Test process of the automatic test system
(1)根據(jù)LKJ-15C主機(jī)軟件測試用例規(guī)范編寫測試腳本,編輯完后對(duì)測試腳本進(jìn)行編譯,編譯無誤后生成目標(biāo)代碼;
(2)創(chuàng)建新的或打開已存在的測試項(xiàng)目,選擇并執(zhí)行所需的測試腳本;
(3)測試運(yùn)行時(shí),腳本解釋執(zhí)行器對(duì)測試腳本進(jìn)行實(shí)時(shí)解釋,調(diào)用仿真模型接口以驅(qū)動(dòng)仿真模型收發(fā)測試數(shù)據(jù),并通過系統(tǒng)硬件實(shí)現(xiàn)與被測LKJ-15C主機(jī)軟件之間的信息交互;
(4)測試結(jié)果驗(yàn)證器自動(dòng)比對(duì)被測主機(jī)軟件的實(shí)際輸出數(shù)據(jù)(通過主機(jī)輸出模型獲?。┖皖A(yù)期結(jié)果,以判斷測試是否通過;
(5)測試結(jié)果分析器統(tǒng)計(jì)測試結(jié)果,分析定位錯(cuò)誤并生成測試報(bào)告。
目前,LKJ-15C主機(jī)軟件自動(dòng)化測試系統(tǒng)的測試腳本庫已覆蓋LKJ-15C主機(jī)軟件需求分析說明書中98%的應(yīng)用處理功能需求,設(shè)計(jì)測試用例4 000多個(gè)。
以前采用手工測試方式時(shí),測試人員只能對(duì)主機(jī)軟件的變更功能部分進(jìn)行測試;現(xiàn)在每次發(fā)布LKJ-15C主機(jī)軟件時(shí),都會(huì)對(duì)其所有功能進(jìn)行完整的自動(dòng)化回歸測試。該系統(tǒng)完成一輪主機(jī)軟件所有功能的自動(dòng)化測試只需2天多的時(shí)間,而且是全晝夜無人值守運(yùn)行,測試完后系統(tǒng)自動(dòng)出具測試報(bào)告,極大地提升了測試效率和質(zhì)量;且真正實(shí)現(xiàn)了人機(jī)分離,減輕了測試人員的工作強(qiáng)度;并避免了測試結(jié)果受人為因素干擾,可以準(zhǔn)確復(fù)現(xiàn)測試過程和測試結(jié)果。在本自動(dòng)化測試系統(tǒng)投入應(yīng)用的兩年時(shí)間內(nèi),已完成主機(jī)軟件自動(dòng)化發(fā)布測試20余次,累計(jì)發(fā)現(xiàn)LKJ-15C主機(jī)軟件缺陷360多個(gè)。
LKJ-15C主機(jī)軟件自動(dòng)化測試系統(tǒng)基于半實(shí)物仿真技術(shù)和測試腳本技術(shù),真正意義上實(shí)現(xiàn)了無人值守的自動(dòng)化發(fā)布測試。目前,該測試腳本庫覆蓋了主機(jī)軟件的絕大部分功能需求,已成為主機(jī)軟件質(zhì)量的有力防護(hù)網(wǎng)。近兩年的應(yīng)用實(shí)踐表明,本自動(dòng)化測試系統(tǒng)穩(wěn)定可靠,測試結(jié)果可信,應(yīng)用成效顯著,已成為主機(jī)軟件的主要測試工具。
自動(dòng)化測試系統(tǒng)的測試準(zhǔn)確性取決于其測試腳本庫的豐富程度。因不斷有新的或需變更的功能需求補(bǔ)充到主機(jī)軟件需求分析說明書中,為此,應(yīng)持續(xù)對(duì)測試腳本庫進(jìn)行維護(hù)和擴(kuò)充,不斷提升其對(duì)主機(jī)軟件功能需求的測試覆蓋率,并沉淀和固化主機(jī)軟件現(xiàn)場應(yīng)用反饋的測試用例。
后續(xù)將研究開發(fā)滿足多樣化、使用便捷等需求的自動(dòng)化測試系統(tǒng)。例如,開發(fā)便攜式自動(dòng)化測試系統(tǒng),以簡化系統(tǒng),方便攜帶;開發(fā)基于PC的全數(shù)字化自動(dòng)測試系統(tǒng),不依賴特殊的硬件環(huán)境,以方便開發(fā)人員和測試人員對(duì)主機(jī)軟件的應(yīng)用邏輯功能進(jìn)行調(diào)試和預(yù)測試,提前發(fā)現(xiàn)和修正軟件缺陷;研究測試腳本自動(dòng)生成技術(shù),以減輕測試腳本編寫的工作量,等等。