徐建華,張 瑞,張 弛
(卡斯柯信號有限公司,北京 100070)
為確保行車安全,鐵路信號控制系統(tǒng)在現(xiàn)場開通運行之前都會依據(jù)技術(shù)規(guī)范、需求等制定測試場景,測試用例執(zhí)行測試。信號產(chǎn)品的測試工作量大,需要投入的人力多,耗時高,測試過程中又常有一些重復(fù)性的測試操作,而且人工測試又可能出現(xiàn)疏忽,導(dǎo)致漏測、錯測等問題,為提高測試效率,保障測試質(zhì)量,開發(fā)對應(yīng)的自動化測試軟件,實現(xiàn)對鐵路信號產(chǎn)品或項目數(shù)據(jù)的自動測試是鐵路信號產(chǎn)品的一項重要工作。對于鐵路信號項目大量的數(shù)據(jù)與大量測試用例,使用自動測試軟件替代人工進行測試,自動測試軟件如何控制整個過程,完成自動測試,簡要分析如下。
自動測試軟件也屬于自動控制系統(tǒng),只是更側(cè)重于軟件。在自動控制原理中有兩個基礎(chǔ)概念,即開環(huán)控制與閉環(huán)控制(閉環(huán)控制也稱為反饋控制),對應(yīng)兩類不同的控制方式。
開環(huán)控制:無反饋信息的系統(tǒng)控制方式。
閉環(huán)控制:有反饋信息的系統(tǒng)控制方式。作為被控的輸出量以一定方式返回到作為控制的輸入端,并對輸入端施加控制影響的一種控制關(guān)系,如圖1模型所示。
圖1 閉環(huán)控制結(jié)構(gòu)Fig.1 Closed-loop control structure
自動控制原理的這兩個概念同樣適用于軟件自動測試,下文結(jié)合開環(huán)控制與閉環(huán)控制的概念,舉例討論自動測試軟件的兩種實現(xiàn)方式:通過時間軸控制與通過狀態(tài)機控制的自動測試過程。
時間軸控制的自動測試過程,是按照事先指定的一系列的時刻自動地給被測軟件輸入不同的數(shù)據(jù)或操作,從而達到代替人工觸發(fā)輸入的測試過程。
一個常見的測試用例如圖2所示。
圖2 測試用例模板Fig.2 Test case template table
對于時間軸控制的自動測試軟件,會在Time1時刻自動完成操作1或輸入數(shù)據(jù)1給被測軟件,在Time2時刻自動完成操作2或輸入數(shù)據(jù)2給被測軟件。在測試中,經(jīng)常用到這種實現(xiàn)方式的自動測試軟件。在確保指定時刻可成功輸入數(shù)據(jù)與操作給被測軟件的情況下,可通過日志或回放方式,確認數(shù)據(jù)與操作是否成功輸入給被測軟件的情況下,這是一種常見且有效可行的測試方式。
例如,在列控中心測試的過程中,有這樣的測試用例:排列接發(fā)車進路、下發(fā)限速,然后檢查列控中心發(fā)給LEU的報文是否正確。按照上述內(nèi)容整理成測試用例,如圖3所示。
圖3 測試用例示例Fig.3 An example of test case
對于自動測試來說,需要讓自動測試軟件知道在哪個時刻發(fā)送出數(shù)據(jù)或操作,可以制作包含時間的輸入文件提供給自動測試軟件,例如可寫成如圖4所示的形式。
圖4 自動測試輸入示例Fig.4 An example of automatic test input
按照上述輸入文件,則在時間刻度為150,進路號為1的進路自動輸入給被測對象列控中心,時間刻度為350,臨時限速命令自動輸入給被測對象列控中心,從而代替測試人員手動在模擬CBI上點擊進路,在模擬TSRS上觸發(fā)限速命令。當(dāng)需要執(zhí)行多個測試用例時,則自動測試軟件只需要獲得多個類似的輸入并順序執(zhí)行即可。
但是,這種實現(xiàn)方式也有其不足之處:1)需要在自動測試前通過計算或者依賴經(jīng)驗預(yù)估各輸入數(shù)據(jù)與操作的觸發(fā)時刻,但是預(yù)估的觸發(fā)時刻可能不合理、不正確,尤其當(dāng)操作稍復(fù)雜時,可能不易預(yù)估計算。而且,如果依賴人工在輸入文件中填寫輸入量的時間值,這本身就是一個很大的工作量。例如,在TCC項目數(shù)據(jù)測試中有大量重復(fù)性的辦理進路與下發(fā)限速,如果人工制作這樣的輸入文件,將是巨大的工作量,而且過多過大的輸入文件也不易維護。2)自動測試過程中未確認輸入數(shù)據(jù)或操作是否成功輸入給被測試軟件。如果輸入操作和數(shù)據(jù)給被測對象的過程失敗,則后續(xù)將預(yù)期結(jié)果與實際結(jié)果進行對比就沒有意義。例如,上例自動測試過程中沒有考慮進路號與臨時限速命令是否收到成功輸入給列控中心,如果自動測試軟件沒有確認是否成功的將進路號與臨時限速輸入給列控中心,則將預(yù)期報文與實際報文進行自動對比的結(jié)果就不可信。
為避免上述實現(xiàn)方式的問題,可考慮一種基于狀態(tài)機的閉環(huán)控制實現(xiàn)方式。下文還以上述測試用例為例來說明該實現(xiàn)方式。該測試用例的閉環(huán)控制的自動測試過程如圖5所示。
圖5 閉環(huán)控制的自動測試過程Fig.5 Closed-loop controlled automatic test process
與上述時間軸控制的方式相比較,狀態(tài)機控制的自動測試過程增加了反饋環(huán)節(jié),可以根據(jù)反饋情況影響輸入,軟件可以動態(tài)的確定后續(xù)測試步驟是否執(zhí)行、執(zhí)行時刻等。也就是說,可以根據(jù)測試用例的執(zhí)行狀態(tài),動態(tài)的決定后續(xù)的執(zhí)行步驟??梢詫y試用例的測試過程分為n個狀態(tài),狀態(tài)個數(shù)與測試步驟數(shù)不一定是一一對應(yīng)的關(guān)系,如圖6所示。
狀態(tài)機是一種常見的軟件設(shè)計模式,對于該測試用例,可以繪制自動測試過程的狀態(tài),如圖7所示。
圖7 狀態(tài)轉(zhuǎn)換Fig.7 State transition diagram
這種方式不需要在輸入文件中確定輸入數(shù)據(jù)的時刻,而是根據(jù)測試用例的執(zhí)行狀態(tài)以及被測對象的反饋情況動態(tài)觸發(fā)執(zhí)行各步驟;而且當(dāng)某個測試步驟執(zhí)行不成功,且后續(xù)步驟沒必要執(zhí)行時,可根據(jù)測試狀態(tài)跳過后續(xù)測試步驟轉(zhuǎn)至結(jié)束。
上述兩種自動測試過程控制方式各有其優(yōu)點,對于狀態(tài)機控制的自動測試過程,適用于測試步驟比較復(fù)雜或交互實時性要求較高的測試用例等,且可適用于測試大量重復(fù)性的數(shù)據(jù)與操作;對于時間軸控制的方式,使用人員可以通過在輸入文件中編輯時間、數(shù)據(jù)、關(guān)鍵字等組合成各不同的測試步驟,具備可靈活的生成測試用例等優(yōu)點。兩種方式在自動測試軟件開發(fā)中均有應(yīng)用。
自動測試過程控制方式是實現(xiàn)產(chǎn)品自動化測試過程中需解決的眾多問題中的重要技術(shù)問題之一,本文舉例闡述了兩種常見的自動測試過程控制方式,對于實現(xiàn)鐵路信號產(chǎn)品的自動測試有重要的借鑒意義。上述兩種自動測試過程控制方式在鐵路列控產(chǎn)品測試中均有成功應(yīng)用,為保障鐵路安全運行起了重要作用。