袁陽 槐博超 陳巨龍
(1. 海軍駐葫蘆島431廠軍事代表室, 葫蘆島 125004;2. 中國船舶重工集團公司第712研究所,武漢 430064)
隨著計算機技術應用的不斷普及,嵌入式實時軟件在航空、航天、工業控制、交通、醫療和軍事安全等諸多領域發揮著愈來愈重要的作用。
VxWorks是美國Wind River公司推出的一種高性能、可裁減的嵌入式實時操作系統,由于其良好的可靠性和卓越的實時性被廣泛應用在通信、軍事、航空、航天等實時性要求極高的領域。Tornado是用于VxWorks嵌入式系統的交叉開發環境,運行在主機上,利用 Target Server-Agent模式建立主機與目標機的交叉開發環境[1]。
由于嵌入式實時軟件固有的嵌入性和實時性的特點,表現為嵌入式實時軟件的開發環境(宿主機)和運行環境(目標機)的不一致,及嵌入式實時軟件的運行環境的硬件資源比較匱乏[2]。
目前,對嵌入式系統的質量控制多停留在以硬件為主,軟件為輔的階段,問題的關鍵在于對嵌入系統的軟件的開發和測試缺乏行之有效的手段和工具[3]。而嵌入式系統往往應用在通信、工控、航天、軍事等對產品質量要求非常嚴格的領域,對嵌入式軟件實時性要求高,又常用于一些關鍵性任務的控制管理,所以,尋求有效的嵌入式軟件測試方法成為提高嵌入式系統質量關鍵所在。
根據測試所處的運行環境的不同,軟件測試的手段可分為兩類:靜態測試和動態測試。
靜態測試,相當于測試人員對代碼進行走查的過程,它主要是為軟件的質量保證提供依據,以提高軟件的可靠性和易維護性。靜態測試無須執行被測代碼,而是借助專用工具評審軟件文檔或程序,對代碼的一些靜態指標進行分析,借以發現程序的不足之處,減少錯誤出現的概率。靜態測試一般由純軟件在主機上即可完成,不需要下載到目標機,不需硬件支持。
動態測試,是使被測代碼在真實環境下有控制地運行,對代碼在運行情況下能體現的功能、邏輯、行為、結構等多角度觀察程序運行時的行為,以發現其中的錯誤現象。對于嵌入式系統,要想保證測試的真實性,就需將被測代碼下載到目標機運行,并且測試系統不要影響原有系統的運行,就需一定硬件支持。動態測試根據測試代碼層次的不同,又可以分為單元測試和系統測試。
由于軟件靜態測試只需要在主機上進行,方法簡單,工具較多,本文主要探討嵌入式軟件的動態測試方法。
由于嵌入式實時軟件的特點,嵌入式實時軟件測試必須基于嵌入式實時軟件目標機進行測試工作,典型的嵌入式實時軟件測試結構如圖1。

圖1 嵌入式實時軟件測試結構圖
該測試結構中,最核心的是目標機測試代理機制,測試代理服務器與主機測試環境通訊,根據主機測試環境發送來的測試代碼,監視被測試嵌入時軟件的運行,并將測試數據發送給主機測試環境。由于目標機的資源相對匱乏,測試所得的信息在目標機上不便分析,通過主機和目標機之間的通信把測試所得信息上傳回主機,再由主機中的測試結果分析工具對測試信息進行分析。
針對圖1所示的嵌入式實時軟件測試結構,實時嵌入式軟件測試的一般步驟是:在測試開始前制定測試計劃,在主機上根據不同的測試目的選擇相應的測試用例,生成測試腳本,通過腳本解釋器實時解釋非實時生成的測試命令,并將測試命令和數據通過目標機測試代理發送至被測試目標系統;測試代理接收測試命令后運行被測試實時嵌入式應用軟件,被測試軟件將測試后生成信息發送到測試代理中的一個專門任務的消息隊列中,此任務負責在適當的時候將這些信息發送到主機方,再由主機對測試結果進行分析和處理[6]。
Testbed是 LDRA公司開發的專業性軟件測試工具,不僅適合于主機平臺軟件測試,同時適合于嵌入式平臺的軟件測試。LDRA Testbed主要用于在軟件編程、軟件測試與軟件維護階段,以提高軟件產品的質量、提高軟件產品開發效率、縮短開發周期。
LDRA Testbed針對基于Tornado的開發環境能夠提供從編碼階段的靜態分析開始,包括單元測試,系統測試的一整套的測試和質量保證手段。
1) 靜態分析
LDRA Testbed的靜態分析是在對源代碼的語法分析的基礎上進行的,因此在編碼的同時就可以使用 LDRA Testbed對代碼進行相關的分析和檢查,具體包括如下內容:編碼規則驗證、復雜度分析、靜態數據流分析、信息流分析、交叉索引分析、數據對象分析等。
2) 單元測試
LDRA Testbed在單元測試階段,其單元測試模塊TBrun可以自動對被測軟件進行代碼插裝,以獲得被測軟件的動態執行信息,供 Testbed作動態測試分析。通過目標平臺配置工具TBconfig能夠很方便的完成TBrun和Tornado的集成配置。
3) 系統測試
LDRA Testbed針對VxWorks和Tornado開發環境提供了多種模式來進行系統級的測試:
(1)純軟件模式的系統測試
VxWorks在真實目標機上運行時是可以支持文件系統的,因此可以用最傳統的方式進行系統級的測試。即采用與主機平臺一樣的插裝模版進行插裝,然后將插裝后的代碼編譯鏈接在目標機上運行,插裝后的程序會將相應的測試信息寫到目標機的一個文件里去;在測試完成后或者測試進行到一定程度將該數據文件傳送到主機用Testbed進行分析,就可以得到相應的測試結果。
由于這種模式要進行文件的讀寫操作,所以對系統的實時性影響較大,因此我們在實際測試時基本不使用該模式。
(2)增強的軟件模式的系統測試
基于 Tornado的開發環境提供的強大的功能,再結合LDRA Testbed的BITMAP插裝技術,插裝后的代碼在目標機運行的時候將相應的特征值信息放到一個大小固定的數組中;當測試進行到一定階段,需要對覆蓋率信息進行分析時,通過Tornado的shell將該數組的內容讀取回主機進行分析即可。
增強的軟件模式的系統測試方法具有對系統實時性影響小,工程實施方便等特點,在大量的實際項目的測試中被廣泛使用,并且效果極好。
(3)軟/硬件結合模式的系統測試
對于系統有極端實時性要求,并且關心系統運行性能的情況,就需要采用軟/硬件結合的模式。該模式需要使用硬件數據采集器 RTInsight和目標機的硬件總線進行連接,在被測程序中插入的是向端口賦值的語句。
在這種模式下,對系統的實時性影響和資源占用都是最小的,但是該模式需要進行硬件連接,導致其工程實施性不如軟件模式好,但是其功能要多一些。
單元級軟件測試已經被公認為行之有效的軟件測試方法,使用單元級軟件測試可在軟件開發早期發現軟件故障或缺陷,從而提高軟件可靠性,減少軟件測試開銷。
傳統的用于單元級軟件測試采用人工方式編寫測試驅動與樁模塊,因此具有測試程序可靠性低、開銷大、依賴于測試人員經驗等問題,同時由于大多數測試時間花費在編寫測試程序上,因此測試人員積極性不高,給軟件測試效果帶來影響。有鑒于此,LDRA公司成功開發出單元級測試工具TBrun可自動幫助測試工程師進行單元級軟件測試。使用TBrun可自動產生軟件測試驅動、樁模塊,從而節省時間,測試人員可將重點放在設計測試用例上,提高軟件測試效率,同時提高軟件測試人員效率。
RTInsight充分考慮到嵌入式軟件實時性特點,結合使用LDRA公司靜態分析與代碼自動插裝技術,及 RTInsight硬件可實時地嵌入式系統進行代碼覆蓋率分析與性能分析。由于采用代碼插裝可準確的判斷代碼執行情況,同時由于采用RTInsight高速虛擬端口技術使得代碼插裝量可控制在每個特征點(即函數入口、出口,程序分支點)一到兩條指令或語句(代碼增加量可控制在 10%之內),大大減少插裝代碼增加對被測系統的影響。可成功用于實時嵌入式系統集成與系統測試,提供代碼覆蓋率分析、性能分析、變量監控、堆棧監控及系統跟蹤功能。RTInsight實物圖如圖2所示。

圖2 RTInsight實時監控器
RTInsight通過通用探頭或專用探頭與目標系統RAM芯片插座、CPU插座或專用總線(如PC104)相連,支持所有8位、16位及32位微處理器與微控制器。支持匯編語言,C/C++語言,ADA語言。
根據嵌入式系統的特點,我們提出了嵌入式實時軟件的測試結構,并以LDRA Testbed工具為例介紹了嵌入式實時軟件的測試的內容和方法。該工具集已經成功應用于某型潛艇電力推進系統嵌入式實時軟件的測試,取得了很好的測試效果。
[1]陳智育, 溫彥軍, 陳琪編著. VxWorks程序開發實踐[M]. 北京:人民郵電出版社,2004.5.
[2]陳敬原編著. VxWorks軟件開發項目實例完全解析[M]. 北京:中國電力出版社,2005.10
[3]康一梅, 張永革. 嵌入式軟件測試[M]. 北京: 機械工業出版社, 2008.7
[4]陳琦, 錢紅兵等. 一種基于仿真器的嵌入式軟件測試方法[J]. 計算機工程與科學,Vol.28, No.A2, 2006.
[5]Beque, L.T., Pra, T.D., Cota, E. Testing Requirements for an Embedded Operating System. Test Workshop,2009. LATW '09. 10th Latin American, March 2009.
[6]Liu Shuping, Pang Ling. The Research of V Model in Testing Embedded Software. Computer Science and Information Technology, 2008.