任麗霞
(西南交通大學 信息科學與技術學院,成都 610031)
鐵路運輸是我國重要的旅客和貨物運輸方式之一,車站聯鎖功能的提升也是現代鐵路運輸的需要。計算機聯鎖系統[1]是否能夠完成聯鎖邏輯功能,最重要的工作之一就是對聯鎖軟件的聯鎖邏輯運算功能進行測試,一方面測試聯鎖軟件的功能是否滿足軟件的規格需求說明書并發現錯誤,另一方面是為了發現至今為止還沒有被發現的錯誤。關于軟件的測試[2],通常有人工測試和自動測試兩種方式。人工測試需要人為地測試每一條測試用例,其中會涉及到大量重復的測試動作,耗時耗力,效率低下。而自動測試則用軟件代替了人工測試中重復的動作,效率得以極大地提高,因此,自動測試已經成為現在主流的測試方式。該測試方式屬于功能測試,測試時不需要知道軟件內部代碼的具體執行情況,因此通常采用軟件測試方法中的黑盒測試方法。本文基于等價類劃分法和故障樹分析法編寫不用覆蓋率的測試用例,用python偽代碼實現了測試用例“進路正常選出”。
為了驗證一個軟件是否完成了用戶需求的功能,并發現尚未發現的錯誤的測試方案,在一個軟件的開發過程中不可避免地需要對各個開發階段進行不同作用的測試。
具體來說,測試的目的主要有以下3點[1]:
(1)測試是為了發現程序中的錯誤而執行程序的過程;
(2)好的測試方案是極可能發現迄今為止尚未發現的錯誤的測試方案;
(3)成功的測試是發現了至今為止尚未發現的錯誤的測試。
為了盡可能地提高程序的正確性,更好地實現測試的目的,針對不同的實際情況也出現了不同的軟件測試方法。
1.2.1 黑盒測試
黑盒測試也叫做功能測試,關于這類測試,測試員不需要知道具體的程序代碼,而只需要輸入相關測試數據后收集對應的輸出結果,通過實際輸出結果與預期輸出結果對比一致性來判斷軟件是否完成了某種功能。
黑盒測試主要在測試過程的后期使用,力求發現白盒測試不易發現的一些錯誤:功能錯誤、功能遺漏、界面錯誤、外部數據庫訪問錯誤或數據結構錯誤以及性能錯誤等。常見的幾種黑盒測試技術為:等價劃分法、邊界值分析法、錯誤推測法。
1.2.2 等價類劃分
等價類劃分后的數據類又分為有效等價類和無效等價類,即輸入有效和輸入無效的等價類型。等價劃分法是一種黑盒測試技術,可以類比于數學中的合并同類項。
例如:判斷一個程序是否能實現“輸入一個3位正整數時相應的輸出也為一個3位正整數”功能??梢园选?[1-9][1-9]”“00[1-9]”“[1-9][1-9][1-9]”分別看作3類數據,這時,我們只需要在每一類數據中拿出一個數據來作為輸入數據進行測試就行了,即這3種類型的數據為有效等價類。而“0000”這種格式的數據明顯不屬于上述3種類型的數據,因此為一種無效等價類。
綜上所述,等價劃分法的重點和難點在于等價類的劃分,即選取出有效的具有代表性的數據。
1.2.3 故障樹分析
安全性測試中常用的一種方法就是故障樹分析(FTA,Fault Tree Analysis)。故障樹分析通常分3步進行:確定頂事件、建造故障樹、故障樹的定性和定量分析。
(2)測試軟件的測試用例數據庫向計算機聯鎖軟件輸入控制命令,計算機聯鎖軟件輸出結果并傳入測試軟件的運行結果記錄數據庫;測試軟件分析運行結果是否與期望結果一致。如果一致,則測試下一個操作命令;如果不一致,則反饋重新生成測試數據并測試該操作命令,3次都不一致則重新排入測試命令序列等待測試;
(3)測試軟件最后生成記錄文檔,顯示測試功能的結果。
聯鎖軟件的黑盒測試通常在一個測試平臺完成,這個測試平臺由測試軟件、被測聯鎖軟件以及車站信號設備仿真系統3部分構成,測試框圖[5],如圖1所示。

圖1 聯鎖軟件黑盒自動測試框圖
在測試平臺中,自動測試過程如下。
(1)測試軟件發送“改變狀態”的命令到車站設備仿真系統中,通過改變3大信號設備的狀態來模擬實際現場可能遇到的各種聯鎖情況;
(2)仿真系統中各設備接受命令后改變狀態,并將改變后的狀態發送至聯鎖軟件和測試軟件;
(3)測試軟件將模擬的操作命令發送至聯鎖軟件,聯鎖軟件根據操作命令生成驅動命令;
(4)聯鎖軟件用驅動命令來使仿真系統完成模擬操作,同時,聯鎖軟件將輸出的驅動命令發送給測試軟件,測試軟件根據輸入和輸出判定該操作命令的軟件功能是否完成;
墨西哥民族和文化的本質便具有混血性(mestizo)(陶家俊,2003:4)這種混血性的文化身份是帝國主義殖民擴張和全球化的產物,體現了現代、后現代時期異質文化間的張力。(61)
(5)測試重新開始1的過程,進入到下一輪測試。
測試軟件[2]由測試用例數據庫、運行結果記錄數據庫、分析判斷模塊、網絡通信模塊以及設置設備狀態模塊5部分構成。
測試開始時,測試用例數據庫向聯鎖軟件發送模擬操作命令,同時將該條測試用例發送至運行結果記錄數據庫中。聯鎖軟件完成測試功能后輸出驅動命令后將被記錄在運行結果記錄數據庫中。此時,分析判斷模塊將對比運行結果和測試用例中期望的輸出結果,判斷出該條測試用例的期望結果和實際結果是否一致。若一致,則刪除運行結果記錄數據庫中的該條測試;若不一致,返回到測試開始重新進行測試,3次測試仍然不一致后將停止該條測試用例的測試,并將每一次的測試結果和仿真系統的狀態信息記錄在運行結果記錄數據庫中。
若涉及到需要改變仿真系統信號設備狀態的測試時,則需要通過測試軟件的設置設備狀態模塊,也就是模擬故障情況下的測試時需要用到設置設備狀態模塊。
車站信號設備平面布置圖是根據站場線路圖繪制的,能清楚地反映站場信號設備的位置。聯鎖表是說明站場中信號設備聯鎖關系的圖表。它們都是測試平臺中車站信號設備仿真系統仿真的依據和聯鎖軟件實現聯鎖功能的基礎。

圖2 舉例車站信號設備平面布置圖

表1 聯鎖表
依據的車站信號設備平面布置圖和聯鎖表分別如圖2和表1所示。其中,聯鎖表只截取了列車進路選出測試用例編寫時涉及到的相關進路。
下面對“列車進路選出”這一功能進行等價類劃分。根據傳統的計算機聯鎖軟件功能測試項目可知,針對“列車進路選出”這一功能有正常選出進路和故障下選出進路兩大測試項目,如表2所示??梢杂貌紶栔怠癟rue”和“False”來判斷設備狀態。

表2 計算機聯鎖“進路選出”功能測試項
根據測試用例分級要求和已有的相關經驗,選取“進路選出時發生危險性失效”作為故障樹的頂事件,并建造故障樹,如圖3所示。
其次,需要進行故障樹的定性分析,以確定最小割集,也就是可能引發頂事件的故障組合方式。

圖3 進路選出時發生危險性失效故障樹框圖
針對“進路選出時發生危險性失效”故障樹,這里采用下行法進行分析。從T1開始為步驟1,這里的G1為一個“與門”,根據下行法的規則,這時應該增加割集的階數,于是有步驟1的{x1,M1}。M1下面是G2,即從步驟1到步驟2遇到G2這個“或門”,根據下行法的規則,這時應該增加割集的個數,又因為M1下面是x2與x3,所以豎向展開得割集。至此,故障樹已到達所有的底事件,故障樹分析完成。所以,該故障樹分析分為了2步,共得2個割集{x1,x2},{x1,x3}。又因為該割集已經無法再簡化,因此得到的全部最小割集為{x1,x2},{x1,x3}。
根據測試用例的編號,測試軟件將自動生成測試序列,然后將每一條測試用例都至少進行一次測試。測試開始后,輸入測試用例中的輸入數據,此時,聯鎖軟件會依次檢查仿真系統中信號設備的聯鎖條件。若進路中軌道區段和超限絕緣區段空閑、敵對進路未建立、道岔與進路要求的位置一致,則是正常情況,即完成該條測試,并等待下一條測試操作指令;若以上聯鎖條件中有不正常情況,測試將轉入測試開始階段重新測試該條測試用例,重復3次測試都不正常時也將轉入下一條測試操作指令,并把該測試結果記錄在運行結果記錄數據庫中,以便對所有測試發生的故障情況進行匯總。列車進路選出的測試流程,如圖4所示。
在聯鎖軟件的黑盒測試平臺上使用python語言[6],可以實現測試用例的重用、測試動作的自動執行以及測試結果的報表輸出。用python語言實現測試用例是一種已經運用在實際測試中的方法。針對測試用例“正常選出進路”編寫的python偽代碼。

圖4 列車進路選出的測試流程圖
輸入始終端按鈕:

檢查敵對信號是否開放:

檢查超限區段是否空閑:

檢查道岔是否與進路選出要求的位置一致:

當檢查的聯鎖條件與進路要求一致時,變量x=1,否則x=0。并將x做and運算。由and運算的規則可知,只有當聯鎖條件判斷后x都等于1時,最終被x賦值的end才為1,即輸出“進路選出”。否則,若聯鎖條件判斷后有至少一項使得x=0,最終被x賦值的end則為0,即輸出“操作失敗”。
(1)聯鎖軟件代替了繼電聯鎖中繼電器的動作,避免了硬件損傷帶來的錯誤,使得聯鎖邏輯功能具有更高的可靠性、安全性和可用性,并使得設計、施工及其維護變得簡便易操作。
(2)聯鎖軟件在測試平臺下的黑盒測試過程,并根據聯鎖軟件黑盒測試[5]的測試用例覆蓋率重點分析了不同等級測試用例的編寫方法。本文選取了“列車進路選出”這一聯鎖邏輯功能作為舉例,從測試環境、測試用例的編寫和測試流程說明3個方面進行了分析,重點在對該功能測試的測試用例的編寫過程介紹。
(3)等價類劃分法只做了簡單的測試說明,采用故障樹分析法編寫了4級測試用例。而且論文只是用python偽代碼實現了一個測試用例。
選用某一種程序設計語言來編寫代碼,用代碼來模擬人工的輸入和檢查,實現自動測試。這種方式不但提高了效率,也在很大程度上提高了測試的準確度,因而能更好地保障聯鎖軟件的安全。
[1]張海藩. 軟件工程導論[M]. 北京:清華大學出版社,2011:150.
[2]石艷敏. 一種高效的計算機聯鎖軟件測試方法[J]. 鐵路計算機應用,2013,22(12):50-54..
[3]中華人民共和國鐵道部.計算機聯鎖技術條件:TB/T03027-2002[S].北京:中國鐵道出版社,2002.
[4]王 東. 軌道交通信號系統仿真測試與驗證技術研究與應用[D]. 杭州:浙江大學,2014.
[5]張 偉,高 凡. 黑盒測試技術在城市軌道交通信號系統監理驗收中的研究與應用[J]. 鐵路計算機應用,2012,21(12):56-59.
[6]劉小旭, 岳東河. 基于Python的計算機聯鎖系統自動測試平臺[J]. 價值工程,2010(27):171.