用創(chuàng)新架構(gòu)實現(xiàn)實時嵌入式軟件測試環(huán)境
日常生活當中我們經(jīng)常接觸到的軟件是PC機上運行的桌面軟件,我們用這些軟件寫文章、填報表、玩游戲、瀏覽互聯(lián)網(wǎng)。
但實際生活當中使用最多的其實是嵌入式軟件,從最簡單的電子表、遙控器、MP3播放器,到手機、汽車、工業(yè)控制系統(tǒng),再到極其復雜的飛機、火箭、核電站,在所有采用電子控制裝置的系統(tǒng)中,都或多或少地存在著嵌入式軟件的蹤跡。從使用數(shù)量來看,世界上絕大多數(shù)的軟件是嵌入式軟件。
嵌入式軟件的測試挑戰(zhàn)
由于其自身的特點,嵌入式軟件的測試與傳統(tǒng)桌面軟件的測試有很大不同。嵌入式軟件的開發(fā)環(huán)境是通用的PC,但運行環(huán)境是內(nèi)嵌的一個小型計算機系統(tǒng),導致測試時的運行環(huán)境不是實際的運行環(huán)境,因此在開發(fā)環(huán)境中對嵌入式軟件的測試必然是不充分的。
其次,大多數(shù)嵌入式軟件都有實時性的要求,要求測試環(huán)境本身也是實時的,否則軟件的實時特性就無法測出來。在PC機上的測試往往是仿真運行的,很難測出軟件的時序關(guān)系、邏輯關(guān)系,以及精度、性能等和時間相關(guān)的因素。
第三,是對整個測試環(huán)境的構(gòu)建。如心臟起搏器和飛機的飛控系統(tǒng)軟件,是無法在實際的運行過程中測試的。因此如何構(gòu)建仿真的測試環(huán)境,并盡可能提高測試環(huán)境的真實程度是一個挑戰(zhàn)。
中航一集團計算機軟件可靠性管理與測評中心是國內(nèi)專業(yè)的嵌入式軟件測試工具和服務提供商,先后推出了通用嵌入式軟件仿真測試環(huán)境GESTE 1.0和2.0版,為解決嵌入式軟件的測試提供了易用、靈活、可擴展的解決方案。
本刊記者采訪了中航一集團計算機軟件可靠性管理與測評中心、中航二集團計算機質(zhì)量可靠性管理與測評中心的主任劉斌博士,詳細了解了GESTE 2.0的特點和創(chuàng)新之處。
組件化與分層設計實現(xiàn)通用性
劉斌介紹說,GESTE 2.0采用了組件化和構(gòu)件化設計,可以通過模塊直接的疊加,完成對通用的嵌入式軟件進行測試。GESTE把半實物仿真的技術(shù)應用于嵌入式軟件的測試,同時又實現(xiàn)了通用性,這是它的創(chuàng)新之處(圖1)。
仿真方式首先是要讓被測系統(tǒng)感覺到它捕捉到的信號和控制的東西都是真實的,接口輸入和輸出的都是真實的模擬量和數(shù)字量,只是接口后面的模型是仿真的,不需要使用實物來產(chǎn)生信號。
由于嵌入式軟件一般是實時軟件,算法、時序關(guān)系和代碼是非常精巧的。如果在測試時改變它,如插裝,或改寫一些程序,軟件的時序關(guān)系就變得不確定了,無法保證測試的準確性。為了避免這個問題,GESTE采用了非侵入式的方式,不對軟件進行改動,而是從外部的接口來測試、觸發(fā)。從模塊到組件,從組件到軟件系統(tǒng),再從軟件系統(tǒng)與硬件系統(tǒng)結(jié)合到一起,到運行環(huán)境,是自下而上、自低級到高級的測試環(huán)境。單元和組件是可以改變和侵入的,只有到軟件集成階段,才是GESTE要解決的。
另外,通用和性能之間是一對矛盾。GESTE采用基于模型驅(qū)動的仿真測試原理,相當于把原來嵌入式軟件測試的兩層模型改成了三層模型,又通過精巧的算法解決了多增加一層所帶來的性能損失問題。
在仿真建模方面,GESTE提供了代碼自動生成功能。GESTE可以直接從接口控制文件,或者稱接口協(xié)議,自動地把這個仿真模型的框架生成出來,使測試人員可以專注于測試,而不用去管如何與環(huán)境之間交聯(lián),這是GESTE所獨有的創(chuàng)新功能。
可定制的測試環(huán)境
劉斌領(lǐng)導的開發(fā)小組還設計了專用的測試腳本語言,解決了并發(fā)性、時序關(guān)系的描述性、多任務等測試需求。新腳本語言的解釋器和實時虛擬機是建立在實時操作系統(tǒng)VxWorks上,既可以半編譯半解釋執(zhí)行,也可以完全編譯后執(zhí)行。
GESTE在易用性、切合測試人員的實際需求方面下了很大功夫。如GESTE提供了測試用例的管理功能,采取了分級管理的方式。GESTE使用了Windows風格的界面和使用方式,迎合了中國用戶的習慣和實際情況。
GESTE 2.0里面有專門的數(shù)據(jù)收集模型,由設計人員進行定義,既可以機械地把數(shù)據(jù)全部采集進來,也可以設定觸發(fā)條件,如到某個時間點采集數(shù)據(jù),或出現(xiàn)某種情況后采集,從而實現(xiàn)數(shù)據(jù)壓縮。
GESTE的特點之一是可以通過二次開發(fā),變成專用的測試平臺。設計人員可以通過MatLab的建模生成模型框架,也可以通過統(tǒng)一通訊協(xié)議把其它工具開發(fā)的算法內(nèi)嵌進來,使各個模型之間關(guān)聯(lián)起來。GESTE可以直接調(diào)用其它軟件生成的可執(zhí)行的目標碼。劉斌說,統(tǒng)一通訊協(xié)議是測評中心自主開發(fā)的軟件接口,吸取了航天、軍工等很多行業(yè)在開發(fā)軟件接口方面的諸多經(jīng)驗,現(xiàn)已成為標準的接口。
GESTE可以從早期的快速原型驗證,到中期的單元測試、集成測試中,起到輔助作用,而在系統(tǒng)測試中起到主導作用。在原型沒有做出來的時候,可以在GESTE上把所有的部件或接口仿真出來,看設計的時序關(guān)系是不是正常,也可以把MatLab引入進來。進行了單元測試與集成測試之后的軟件需要在實際運行環(huán)境中運行,這時可以利用GESTE的仿真源實現(xiàn)仿真和激勵,從而對軟件施加仿真測試。
硬件與軟件結(jié)構(gòu)
GESTE的體系機構(gòu)采用主從式設計,整個測試環(huán)境由兩臺通過以太網(wǎng)連接的計算機構(gòu)成,宿主機主要負責測試準備階段的任務,實時處理機主要負責測試運行時任務。測試環(huán)境與被測系統(tǒng)之間的連接是依靠實時處理機與被測系統(tǒng)之間的硬件I/O接口(圖2)。
GESTE的這種主從式結(jié)構(gòu),通過基于Windows的宿主機為用戶提供圖形化的測試用例管理、測試腳本和仿真模型的開發(fā)環(huán)境,而基于VxWorks的實時處理機用來運行測試用例,實現(xiàn)自動化的測試執(zhí)行過程,并滿足被測系統(tǒng)的實時性要求。宿主機和實時處理機之間是非實時通信機制,實時處理機則采用強實時通信機制,確保與被測系統(tǒng)之間的實時數(shù)據(jù)通信。
實時處理機軟件是仿真測試環(huán)境與被測系統(tǒng)之間的橋。用戶在宿主機上開發(fā)的測試腳本和仿真模型通過以太網(wǎng)下載到實時處理機,以測試任務的形式在實時處理機上實時地運行,并且被有序地組織成被測系統(tǒng)可以接收的數(shù)據(jù),通過I/O驅(qū)動發(fā)送到被測系統(tǒng),同時接收從被測系統(tǒng)返回的數(shù)據(jù)結(jié)果并進行保存。
實時處理機軟件采用三層結(jié)構(gòu)設計:應用層、系統(tǒng)服務層和核心層。核心層是軟件的關(guān)鍵部分,它提供了整個系統(tǒng)的任務管理和實時調(diào)度機制,以及測試任務間數(shù)據(jù)通信的實現(xiàn)機制。系統(tǒng)服務層是測試環(huán)境為滿足測試要求而提供的一系列系統(tǒng)服務的集合,包括數(shù)據(jù)的實時收集、顯示,以及下載數(shù)據(jù)信息等測試服務。系統(tǒng)服務層建立在核心層中提供的各種機制之上,同時又為應用層提供服務。應用層面向用戶,用戶可以根據(jù)測試需求,并通過服務層提供的各種服務組織測試過程,其中包括開發(fā)仿真模型和編寫測試腳本等。
通常一次完整的系統(tǒng)仿真測試包括:測試準備、測試執(zhí)行和測試結(jié)果分析三個階段。GESTE可以在上述三個階段都提供相應的工具支持,盡量提高測試的自動化水平。
劉斌總結(jié)到,GESTE把傳統(tǒng)的技術(shù)和通用原理巧妙地組合在一起,把基于半實物仿真的平臺擴展到嵌入式軟件的實時測試。自1998年設計出這個體系結(jié)構(gòu)以后,迄今為止都沒有大的改動。在GESTE中以模型為單元運行。在模型間通過協(xié)議保證協(xié)同工作,模型間通過測試總線相連,稱為測試統(tǒng)一通信協(xié)議。各個模型可以組合,也可分開,可以有時序,也可以并行執(zhí)行。GESTE在測試腳本和硬件測試中間加了一層,解決了性能和通用性問題。
劉斌透露,GESTE的后繼版本也可能支持QNX、RTLinux等RTOS,并且,有一個小組正在開發(fā)基于開源RTOS的專用于嵌入式軟件測試的操作系統(tǒng),把一些軟件測試的常用服務和模式做成一個服務,這樣就可以大大提高應用性、系統(tǒng)精度和性能。由于GESTE采用分層設計,已經(jīng)把操作系統(tǒng)屏蔽掉了,只要設計新的接口,就可以在新的操作系統(tǒng)上運行起來。