孫志科
(北京全路通信信號研究設計院集團有限公司,北京 100070)
對于應用在列車運行控制系統中的鐵路信號安全軟件(以下簡稱安全軟件)來說,除了軟件邏輯以外,工程數據的質量同樣直接影響著系統的安全性和可用性。特別是在高密度、高速度的干線鐵路及大型樞紐中,即使是單個信號系統的某一個數據錯誤,其影響范圍也會隨著時間的推移而迅速擴大,給鐵路運輸秩序帶來嚴重的影響。
在構成列車運行控制系統的各類安全軟件制作過程中,常見的數據錯誤模式及其典型特征如表1所示。

表1 安全軟件常見數據錯誤模式及其典型特征Tab.1 Common data error patterns and their typical characteristics of safety software
為保證交付給用戶的列車運行控制系統的功能、性能及安全性符合要求,必須采用適當的方法,在安全軟件發布前將各類錯誤數據全部檢出并修正。特別是各類多余數據,一旦在安全關鍵數據中出現,有可能對鐵路運輸安全造成極大威脅。
根據測試對象是否包含軟件內部的邏輯結構和工作機制,軟件測試技術可以分為兩大類:白盒測試(White-box Testing)、黑盒測試(Black-box Testing)。
白盒測試是側重于系統或部件內部工作機制的測試。
黑盒測試是忽略系統或部件的內部工作機制,只集中于響應所選擇的輸入和執行條件后所產生的輸出,用于評價系統或部件與規定的功能需求遵循性的一種測試。
根據在測試過程中是否運行被測軟件,白盒測試技術又可以分為兩大類:
靜態分析技術:不運行被測軟件;
動態測試技術:運行被測軟件。
白盒測試技術的適用對象,及其在被測對象定位方面的能力如表2所示。

表2 白盒測試技術的適用對象及定位能力Tab.2 Applicable objects and positioning ability of white box testing technology
為了使軟件的安全完整度達到SIL4級,對于涉及安全的配置數據,其測試覆蓋率應當達到100%。
因此,在進行安全軟件的數據測試時,應當選擇能夠準確定位被測數據所在位置的測試技術,才能在此基礎上實現數據測試覆蓋率的統計。
黑盒測試技術的適用對象,及其在被測對象定位方面的能力如表3所示。

表3 黑盒測試技術的適用對象及定位能力Tab.3 Applicable objects and positioning ability of black box testing technology
從表2及表3的對比可以看出,只有采用白盒測試技術中的靜態分析技術進行工程數據測試,才能在數據測試過程中得到測試覆蓋率統計結果。
目前,在列車運行控制系統的集成過程中,對安全軟件的功能及數據測試以黑盒測試技術為主,很少應用白盒測試技術,原因主要有以下幾點:
1)白盒測試技術只適用于基本的軟件單元或小型的功能模塊,無法對軟件的整體功能進行測試,不能滿足列車運行控制系統集成測試的需求;
2)白盒測試(主要是動態白盒測試)需要耗費大量的時間和人力。在列車運行控制系統的集成過程中,受工期和人力資源的限制,很難開展白盒測試工作;
3)當安全軟件定型后,在列車運行控制系統的集成過程中,通過版本管理、配置管理等管理過程,并借助適當的工具軟件支持(例如:配置管理工具軟件),可以保證在集成過程中使用正確版本的安全軟件,不需要對每個項目的軟件進行白盒測試;
4)現有的所有商業化軟件靜態分析工具(例如:Testbed、Cantata等)都只能用于軟件代碼的靜態分析,無法對配置數據進行分析。由于安全軟件的配置數據的數量通常十分巨大,沒有工具軟件的支持無法實現完整的分析。
黑盒測試技術是軟件測試領域中應用最廣泛的技術,其原因主要包括:
1)技術門檻低,測試方法和步驟易于測試工程師學習和掌握;
2)測試環境、操作步驟及使用場景與被測對象的實際運行環境比較接近,測試結果的可視性及可信度比較高。
在列車運行控制系統的集成過程中,采用黑盒測試技術進行安全軟件的功能和數據測試時,整個測試過程與被測系統的實際運行過程比較接近,測試過程的可視性及可信度較高。
隨著國內高速鐵路建設規模的迅速擴大,用戶和市場對鐵路信號安全產品的安全性、可用性要求不斷提高的同時,對產品的集成、測試、交付的速度和成本也提出了越來越高的要求。在這種情況下,黑盒測試技術的不足之處越發凸顯出來。
1) 測試周期長,時間成本高
為保證鐵路信號安全產品的安全性及可用性,對每個產品的工程數據都應當進行完整的測試,即涉及安全的數據的測試覆蓋率應達到100%。
例如:在計算機聯鎖產品的工程數據測試過程中,聯鎖表中的每一條進路都需要進行測試,不允許有遺漏。而隨著車站的道岔數量、接發車口數量的增加,站內進路的數量會呈幾何級數增長,因而測試工作量的增長也非常迅速,這還不包括執行其他測試項所需的時間。要完成一個車站的全部進路數據測試,無論是采用人工測試還是自動化測試,所需的時間都要以小時、甚至以天為單位計算。
2) 測試針對性不強
任何一個軟件功能的實現都需要多個功能模塊和若干配置數據的共同作用才能完成。因此,任何一個黑盒測試案例都能夠同時覆蓋多個軟件功能模塊和配置數據。雖然從單個測試案例的角度看,其測試效率比較高,但從整體來看,各個測試案例的作用范圍存在不同程度的重疊,很難對某一個數據進行針對性的測試,導致在整個測試過程中,很多數據會被重復測試,反而降低了整體的測試效率。
如果確切的知道某個功能點所對應的數據,則只需要打開數據文件,直接核對數據配置的正確性,幾分鐘的時間就足夠。而這種直接檢查數據配置的測試方法就是典型的白盒測試技術中的靜態分析技術。
3) 對于某些類型的錯誤數據的檢出效率很低,甚至無法檢出
黑盒測試技術在測試過程中無法跟蹤和監視被測軟件的內部執行路徑,也無法確認被測對象的所有靜態數據中,哪些已經被測試覆蓋,哪些還未被覆蓋。
例如:在北京全路通信信號研究設計院集團有限公司的計算機聯鎖產品的工程數據測試過程中,對于聯鎖表中列出的進路,測試工程師會100%測試。但是,對于聯鎖軟件中配置的超出聯鎖表范圍的進路數據,測試工程師則無法進行測試。這是因為,僅僅通過黑盒測試技術,測試工程師無法確切知道聯鎖軟件中配置了多少條進路的數據,也無法知道究竟有哪些進路的數據已被測試,哪些還未被測試。
即使采用白盒測試技術,也無法檢出多余數據。因為目前所有的白盒測試工具軟件都只能實現對軟件代碼執行路徑的跟蹤和記錄,無法實現對靜態配置數據使用情況的跟蹤和記錄,因而無法統計靜態數據的測試覆蓋率。
再比如,對于以某一架進站信號機為始端的所有進路中,最多只有一條進路能夠開放U燈顯示,其他進路的信號顯示應均為UU或USU。否則必然存在信號顯示升級的進路數據。
要想確認這一點,如果采用黑盒測試技術,則必須把所有以這架信號機為始端的進路全部辦理一遍。對于大型樞紐車站,特別是變更進路較多的車站,這個過程顯然需要耗費大量的時間。因此,黑盒測試技術對于某些類型的數據錯誤,其檢出效率是比較低的。
4) 依賴于特定的測試環境,測試成本高
對安全軟件進行測試時,往往需要配置專用的軟件環境。如果需要在半實物仿真環境中進行測試,還需要專用的硬件環境,例如:二取二架構的安全計算機,各類專用的硬件板卡等。對于一些開通年限較長的車站,往往面臨現有的測試環境與早期軟件不兼容的困難,需要花費大量的人力、時間和費用才能恢復早期的測試環境。
軟件靜態分析(Software Static Analysis)是指在不運行軟件的情況下,通過詞法分析、語法分析、控制流分析、數據流分析等技術對軟件代碼進行掃描,驗證代碼是否滿足規范性、安全性、可靠性、可維護性等指標的一種代碼分析技術。
軟件靜態分析工作既可以由程序員人工完成,即傳統意義上的軟件代碼審核,也可以使用專用的工具軟件完成,例如:Klocwork、LDRA Testbed等。軟件代碼規模較大,或結構比較復雜時,僅靠人工審核無法充分的分析全部代碼,必須借助專業的工具軟件。
借助專業工具軟件對軟件代碼進行靜態分析,與采用白盒動態測試及黑盒測試技術相比,有以下幾方面的突出優勢。
1)執行速度快、缺陷檢出效率高
使用靜態分析工具軟件可以快速的發現一些導致功能異常或失效的軟件代碼缺陷,例如:內存泄漏、指針越界等。
而如果想在動態測試過程中發現這些缺陷,往往需要經過復雜、長時間的連續測試,甚至要靠運氣。
2)可以檢出潛在的缺陷或隱患
專業的靜態分析工具軟件都具備軟件編碼的質量度量功能,可以發現軟件代碼中潛在的質量缺陷或隱患,例如不可達分支、圈復雜度過高等。
3)可以靈活選擇分析范圍,針對性強
使用靜態分析工具軟件既可以對完整的軟件代碼進行分析,也可以對某一個源代碼文件,甚至某一個最小的軟件單元進行分析,針對性很強,從而可以在必要的時候節省大量的時間。
4)不依賴特定的測試環境,使用成本低
商品化的軟件代碼靜態分析工具軟件都可以運行在普通的桌面計算機中,不需要依賴特定的運行環境,使用成本很低。通過以上分析可以看出,靜態分析技術的優勢恰恰是黑盒測試技術的不足之處。如果將靜態分析技術應用到安全軟件的數據測試過程中,既可以解決多余數據難以檢出的難題,又可以提高數據測試的工作效率。
但是,現有的商業化靜態分析工具軟件針對的目標都是軟件代碼,而不是配置數據,無法直接用于安全軟件的配置數據。
此外,安全軟件的配置數據數量通常非常龐大。以一個30組道岔的車站為例,其聯鎖軟件中的數據就超過3萬個。如此龐大的數據量,依靠人工審核的方式根本無法滿足列車運行控制系統集成項目的工期和成本要求。在以往的工程實踐中,通過黑盒測試的方式完成安全軟件的數據測試工作后,會對個別的關鍵數據進行人工審核,以確認其配置數值與實測結果一致,但是數量非常有限。
因此,要想在安全軟件的數據測試過程中應用靜態分析技術,必須根據特定產品的數據結構定義,開發專用的數據靜態分析工具軟件。
在安全軟件的數據測試過程中,有必要在以下場景中借助專用工具軟件的支持,應用數據靜態分析技術。
1)檢出多余數據
有可機讀的電子化輸入文件(例如:Excel格式的電子聯鎖表及接口數據表)作為比對依據時,可以將配置數據與電子化輸入文件進行直接比對,就能夠快速、準確的發現超出輸入文件規定范圍以外的多余數據。
目前,各設計單位發布的列控工程數據表已經實現電子化和標準化,但是聯鎖表仍然維持著發布紙質工程圖的方式,導致計算機聯鎖產品在應用數據靜態分析技術和自動化測試技術方面存在著根本性的障礙。要解決這個問題,需要行業主管部門和各設計單位共同努力推動。
沒有可機讀的電子化輸入文件作為比對依據時,可以通過數據靜態分析工具軟件將這些數據轉換為便于人工閱讀的按鈕名稱或繼電器名稱,在完成黑盒測試后,人工比對測試范圍和配置數據的一致性。通過這種方式,也可以實現對多余數據的有效、快速檢出。
例如:對于存在信號顯示關系的列車進路,使用數據靜態分析工具軟件將相關的進路數據轉換為辦理進路的按鈕名稱及信號機名稱。完成信號顯示關系測試后,由測試工程師檢查顯示關系數據的配置是否與信號顯示關系圖或聯鎖表的要求一致。如果發現有超出設計范圍的顯示關系數據,則可以肯定為多余數據。
2)檢出與輸入文件不一致的數據
有可機讀的電子化輸入文件作為比對依據時,應用數據靜態分析技術檢出多余數據的同時,還可以檢出缺失、錯誤、重復的數據。雖然這些類型的錯誤數據在進行黑盒測試時通常也能夠發現,但使用數據靜態分析工具軟件可以大幅度的提高錯誤數據的檢出效率。
3)相關數據的邏輯一致性檢查
安全軟件中的各個數據結構中配置的數據,相互之間是存在邏輯關系的。
例如:始端信號機相同的接車進路,其進路始端按鈕的代碼必然是相同的;構成長調車進路的各條基本調車進路必然是首尾相接的;TCC需要向TSRS發送狀態的區段,其代碼應當在TCC區段代碼列表中存在。類似的例子還可以舉出很多。
如果某些相關的配置數據存在邏輯不一致的情況,采用靜態分析技術雖然不一定能直接檢出錯誤數據,但是可以將錯誤數據存在的范圍縮小到最低限度,再通過人工分析或測試就可以快速檢出錯誤的數據。
4)配置數據的規范性檢查
無論是從計算機編程語言的語法層面,還是安全軟件的故障-安全防護措施層面,配置數據都需要遵循一些固有的、強制性的規則。
例如:配置數據的數量超出數據結構的定義長度時,在編譯的過程中會報錯,無法生成可執行文件。但是,當配置數據的數量小于數據結構的定義長度,即存在空位時,編譯軟件并不會報錯,并且會將不足的數據自動補“0”。
但是,根據故障-安全防護措施的要求,“0”是不能作為占位數據的。因為在很多場景下,“0”本身是有效數據。為保證軟件流程的正確性和功能的安全性,在數據配置規則中往往要求使用特定的數據作為占位數據,例如:0xff或0xffff。
但是,面對海量的數據,檢查每個占位數據是否都配置為規定的數值,依靠人工是無法完成的,必須借助數據靜態分析工具軟件。
雖然數據靜態分析技術有上述的諸多優點,但它也不是萬能的。數據靜態分析和軟件黑盒測試是互補的關系,而不是替代關系。
這是因為,數據靜態分析技術只能證明配置數據本身的完整性、正確性,以及與輸入文件的一致性,并不能證明配置數據與軟件代碼之間接口的正確性。即使配置數據本身是正確的,如果使用這些數據的軟件代碼的邏輯是錯誤的,甚至根本沒有使用這些正確的數據,那么最終實現的功能也不可能是正確的。
要在安全軟件的數據測試過程中應用靜態分析技術,必須針對被測對象的數據結構定義以及數據配置規則,開發專用的工具軟件。
而要開發這樣的工具軟件,需要解決以下幾個難點。
1) 需要詳細的數據配置手冊作為開發工程師實現數據檢查規則的依據。如果沒有詳細的數據配置手冊,就需要開發工程師能夠讀懂安全軟件使用這些數據結構的代碼邏輯,或者在安全軟件開發工程師的支持下進行開發。
2) 需要針對不同的數據結構編制有針對性的數據分析和檢查需求,需求分析的難度和工作量較大。
3) 在發現錯誤數據后,工具軟件需要給出準確、詳細的錯誤描述,幫助相關人員快速分析或定位錯誤數據。
4) 需要根據集成項目的數據缺陷信息,不斷擴充工具軟件能夠檢查的數據錯誤模式,以持續滿足集成項目的測試需求。
5) 安全軟件升級后,可能增加新的數據結構,原有數據結構的定義或使用方式也可能發生變化,需要同時升級數據靜態分析工具,軟件的維護工作量比較大。
測試工程師需要熟悉每個數據結構中的每個數據項的定義和功能,熟悉數據的編制規則,才能對數據靜態分析工具軟件發現的數據錯誤進行準確的分析和定性。
與傳統的黑盒測試技術只關注被測軟件的輸入和輸出相比,對配置數據直接進行分析和審核,顯然對測試工程師提出了更高的要求。
筆者所在的部門針對CBI、TCC產品的工程配置數據,應用數據靜態分析技術,分別開發了專用的數據分析工具軟件,并已在系統集成項目中推廣使用,取得了良好效果。不僅顯著提高了典型數據缺陷的檢出效率,而且發現了很多采用黑盒測試技術難以發現的數據缺陷,有力保證了鐵路信號安全產品的軟件質量和安全性。