嵌入式軟件的測試挑戰
由于其自身的特點,嵌入式軟件的測試與傳統桌面軟件的測試有很大不同。嵌入式軟件的開發環境是通用的PC,但運行環境是內嵌的一個小型計算機系統,導致測試時的運行環境不是實際的運行環境,因此在開發環境中對嵌入式軟件的測試必然是不充分的。
其次,大多數嵌入式軟件都有實時性的要求,要求測試環境本身也是實時的,否則軟件的實時特性就無法測出來。在PC機上的測試往往是仿真運行的,很難測出軟件的時序關系、邏輯關系,以及精度、性能等和時間相關的因素。
第三,是對整個測試環境的構建。如心臟起搏器和飛機的飛控系統軟件,是無法在實際的運行過程中測試的。因此如何構建仿真的測試環境,并盡可能提高測試環境的
真實程度是一個挑戰。
中航一集團計算機軟件可靠性管理與測評中心是國內專業的嵌入式軟件測試工具和服務提供商,先后推出了通用嵌入式軟件仿真測試環境GESTE 1.0和2.0版,為解決嵌入式軟件的測試提供了易用、靈活、可擴展的解決方案。
本刊記者采訪了中航一集團計算機軟件可靠性管理與測評中心、中航二集團計算機質量可靠性管理與測評中心的主任劉斌博士,詳細了解了GESTE 2.0的特點和創新之處。
組件化與分層設計實現通用性
劉斌介紹說,GESTE 2.0采用了組件化和構件化設計,可以通過模塊直接的疊加,完成對通用的嵌入式軟件進行測試。GESTE把半實物仿真的技術應用于嵌入式軟件的測試,同時又實現了通用性,這是它的創新之處(圖1)。
仿真方式首先是要讓被測系統感覺到它捕捉到的信號和控制的東西都是真實的,接口輸入和輸出的都是真實的模擬量和數字量,只是接口后面的模型是仿真的,不需要使用實物來產生信號。
由于嵌入式軟件一般是實時軟件,算法、時序關系和代碼是非常精巧的。如果在測試時改變它,如插裝,或改寫一些程序,軟件的時序關系就變得不確定了,無法保證測試的準確性。為了避免這個問題,GESTE采用了非侵入式的方式,不對軟件進行改動,而是從外部的接口來測試、觸發。從模塊到組件,從組件到軟件系統,再從軟件系統與硬件系統結合到一起,到運行環境,是自下而上、自低級到的測試環境。單元和組件是可以改變和侵入的,只有到軟件集成階段,才是GESTE要解決的。
另外,通用和性能之間是一對矛盾。GESTE采用基于模型驅動的仿真測試原理,相當于把原來嵌入式軟件測試的兩層模型改成了三層模型,又通過精巧的算法解決了多增加一層所帶來的性能損失問題。
在仿真建模方面,GESTE提供了代碼自動生成功能。GESTE可以直接從接口控制文件,或者稱接口協議,自動地把這個仿真模型的框架生成出來,使測試人員可以專注于測試,而不用去管如何與環境之間交聯,這是GESTE所獨有的創新功能。
可定制的測試環境
劉斌領導的開發小組還設計了專用的測試腳本語言,解決了并發性、時序關系的描述性、多任務等測試需求。新腳本語言的解釋器和實時虛擬機是建立在實時操作系統VxWorks上,既可以半編譯半解釋執行,也可以完全編譯后執行。
GESTE在易用性、切合測試人員的實際需求方面下了很大功夫。如GESTE提供了測試用例的管理功能,采取了分級管理的方式。GESTE使用了Windows風格的界面和使用方式,迎合了中國用戶的習慣和實際情況。
GESTE 2.0里面有專門的數據收集模型,由設計人員進行定義,既可以機械地把數據全部采集進來,也可以設定觸發條件,如到某個時間點采集數據,或出現某種情況后采集,從而實現數據壓縮。
GESTE的特點之一是可以通過二次開發,變成專用的測試平臺。設計人員可以通過MatLab的建模生成模型框架,也可以通過統一通訊協議把其它工具開發的算法內嵌進來,使各個模型之間關聯起來。GESTE可以直接調用其它軟件生成的可執行的目標碼。劉斌說,統一通訊協議是測評中心自主開發的軟件接口,吸取了航天、軍工等很多行業在開發軟件接口方面的諸多經驗,現已成為標準的接口。
GESTE可以從早期的快速原型驗證,到中期的單元測試、集成測試中,起到輔助作用,而在系統測試中起到主導作用。在原型沒有做出來的時候,可以在GESTE上把所有的部件或接口仿真出來,看設計的時序關系是不是正常,也可以把MatLab引入進來。進行了單元測試與集成測試之后的軟件需要在實際運行環境中運行,這時可以利用GESTE的仿真源實現仿真和激勵,從而對軟件施加仿真測試。