袁陽 槐博超 陳巨龍
(1. 海軍駐葫蘆島431廠軍事代表室, 葫蘆島 125004;2. 中國船舶重工集團(tuán)公司第712研究所,武漢 430064)
隨著計(jì)算機(jī)技術(shù)應(yīng)用的不斷普及,嵌入式實(shí)時軟件在航空、航天、工業(yè)控制、交通、醫(yī)療和軍事安全等諸多領(lǐng)域發(fā)揮著愈來愈重要的作用。
VxWorks是美國Wind River公司推出的一種高性能、可裁減的嵌入式實(shí)時操作系統(tǒng),由于其良好的可靠性和卓越的實(shí)時性被廣泛應(yīng)用在通信、軍事、航空、航天等實(shí)時性要求極高的領(lǐng)域。Tornado是用于VxWorks嵌入式系統(tǒng)的交叉開發(fā)環(huán)境,運(yùn)行在主機(jī)上,利用 Target Server-Agent模式建立主機(jī)與目標(biāo)機(jī)的交叉開發(fā)環(huán)境[1]。
由于嵌入式實(shí)時軟件固有的嵌入性和實(shí)時性的特點(diǎn),表現(xiàn)為嵌入式實(shí)時軟件的開發(fā)環(huán)境(宿主機(jī))和運(yùn)行環(huán)境(目標(biāo)機(jī))的不一致,及嵌入式實(shí)時軟件的運(yùn)行環(huán)境的硬件資源比較匱乏[2]。
目前,對嵌入式系統(tǒng)的質(zhì)量控制多停留在以硬件為主,軟件為輔的階段,問題的關(guān)鍵在于對嵌入系統(tǒng)的軟件的開發(fā)和測試缺乏行之有效的手段和工具[3]。而嵌入式系統(tǒng)往往應(yīng)用在通信、工控、航天、軍事等對產(chǎn)品質(zhì)量要求非常嚴(yán)格的領(lǐng)域,對嵌入式軟件實(shí)時性要求高,又常用于一些關(guān)鍵性任務(wù)的控制管理,所以,尋求有效的嵌入式軟件測試方法成為提高嵌入式系統(tǒng)質(zhì)量關(guān)鍵所在。
根據(jù)測試所處的運(yùn)行環(huán)境的不同,軟件測試的手段可分為兩類:靜態(tài)測試和動態(tài)測試。
靜態(tài)測試,相當(dāng)于測試人員對代碼進(jìn)行走查的過程,它主要是為軟件的質(zhì)量保證提供依據(jù),以提高軟件的可靠性和易維護(hù)性。靜態(tài)測試無須執(zhí)行被測代碼,而是借助專用工具評審軟件文檔或程序,對代碼的一些靜態(tài)指標(biāo)進(jìn)行分析,借以發(fā)現(xiàn)程序的不足之處,減少錯誤出現(xiàn)的概率。靜態(tài)測試一般由純軟件在主機(jī)上即可完成,不需要下載到目標(biāo)機(jī),不需硬件支持。
動態(tài)測試,是使被測代碼在真實(shí)環(huán)境下有控制地運(yùn)行,對代碼在運(yùn)行情況下能體現(xiàn)的功能、邏輯、行為、結(jié)構(gòu)等多角度觀察程序運(yùn)行時的行為,以發(fā)現(xiàn)其中的錯誤現(xiàn)象。對于嵌入式系統(tǒng),要想保證測試的真實(shí)性,就需將被測代碼下載到目標(biāo)機(jī)運(yùn)行,并且測試系統(tǒng)不要影響原有系統(tǒng)的運(yùn)行,就需一定硬件支持。動態(tài)測試根據(jù)測試代碼層次的不同,又可以分為單元測試和系統(tǒng)測試。
由于軟件靜態(tài)測試只需要在主機(jī)上進(jìn)行,方法簡單,工具較多,本文主要探討嵌入式軟件的動態(tài)測試方法。
由于嵌入式實(shí)時軟件的特點(diǎn),嵌入式實(shí)時軟件測試必須基于嵌入式實(shí)時軟件目標(biāo)機(jī)進(jìn)行測試工作,典型的嵌入式實(shí)時軟件測試結(jié)構(gòu)如圖1。
圖1 嵌入式實(shí)時軟件測試結(jié)構(gòu)圖
該測試結(jié)構(gòu)中,最核心的是目標(biāo)機(jī)測試代理機(jī)制,測試代理服務(wù)器與主機(jī)測試環(huán)境通訊,根據(jù)主機(jī)測試環(huán)境發(fā)送來的測試代碼,監(jiān)視被測試嵌入時軟件的運(yùn)行,并將測試數(shù)據(jù)發(fā)送給主機(jī)測試環(huán)境。由于目標(biāo)機(jī)的資源相對匱乏,測試所得的信息在目標(biāo)機(jī)上不便分析,通過主機(jī)和目標(biāo)機(jī)之間的通信把測試所得信息上傳回主機(jī),再由主機(jī)中的測試結(jié)果分析工具對測試信息進(jìn)行分析。
針對圖1所示的嵌入式實(shí)時軟件測試結(jié)構(gòu),實(shí)時嵌入式軟件測試的一般步驟是:在測試開始前制定測試計(jì)劃,在主機(jī)上根據(jù)不同的測試目的選擇相應(yīng)的測試用例,生成測試腳本,通過腳本解釋器實(shí)時解釋非實(shí)時生成的測試命令,并將測試命令和數(shù)據(jù)通過目標(biāo)機(jī)測試代理發(fā)送至被測試目標(biāo)系統(tǒng);測試代理接收測試命令后運(yùn)行被測試實(shí)時嵌入式應(yīng)用軟件,被測試軟件將測試后生成信息發(fā)送到測試代理中的一個專門任務(wù)的消息隊(duì)列中,此任務(wù)負(fù)責(zé)在適當(dāng)?shù)臅r候?qū)⑦@些信息發(fā)送到主機(jī)方,再由主機(jī)對測試結(jié)果進(jìn)行分析和處理[6]。
Testbed是 LDRA公司開發(fā)的專業(yè)性軟件測試工具,不僅適合于主機(jī)平臺軟件測試,同時適合于嵌入式平臺的軟件測試。LDRA Testbed主要用于在軟件編程、軟件測試與軟件維護(hù)階段,以提高軟件產(chǎn)品的質(zhì)量、提高軟件產(chǎn)品開發(fā)效率、縮短開發(fā)周期。
LDRA Testbed針對基于Tornado的開發(fā)環(huán)境能夠提供從編碼階段的靜態(tài)分析開始,包括單元測試,系統(tǒng)測試的一整套的測試和質(zhì)量保證手段。
1) 靜態(tài)分析
LDRA Testbed的靜態(tài)分析是在對源代碼的語法分析的基礎(chǔ)上進(jìn)行的,因此在編碼的同時就可以使用 LDRA Testbed對代碼進(jìn)行相關(guān)的分析和檢查,具體包括如下內(nèi)容:編碼規(guī)則驗(yàn)證、復(fù)雜度分析、靜態(tài)數(shù)據(jù)流分析、信息流分析、交叉索引分析、數(shù)據(jù)對象分析等。
2) 單元測試
LDRA Testbed在單元測試階段,其單元測試模塊TBrun可以自動對被測軟件進(jìn)行代碼插裝,以獲得被測軟件的動態(tài)執(zhí)行信息,供 Testbed作動態(tài)測試分析。通過目標(biāo)平臺配置工具TBconfig能夠很方便的完成TBrun和Tornado的集成配置。
3) 系統(tǒng)測試
LDRA Testbed針對VxWorks和Tornado開發(fā)環(huán)境提供了多種模式來進(jìn)行系統(tǒng)級的測試:
(1)純軟件模式的系統(tǒng)測試
VxWorks在真實(shí)目標(biāo)機(jī)上運(yùn)行時是可以支持文件系統(tǒng)的,因此可以用最傳統(tǒng)的方式進(jìn)行系統(tǒng)級的測試。即采用與主機(jī)平臺一樣的插裝模版進(jìn)行插裝,然后將插裝后的代碼編譯鏈接在目標(biāo)機(jī)上運(yùn)行,插裝后的程序會將相應(yīng)的測試信息寫到目標(biāo)機(jī)的一個文件里去;在測試完成后或者測試進(jìn)行到一定程度將該數(shù)據(jù)文件傳送到主機(jī)用Testbed進(jìn)行分析,就可以得到相應(yīng)的測試結(jié)果。
由于這種模式要進(jìn)行文件的讀寫操作,所以對系統(tǒng)的實(shí)時性影響較大,因此我們在實(shí)際測試時基本不使用該模式。
(2)增強(qiáng)的軟件模式的系統(tǒng)測試
基于 Tornado的開發(fā)環(huán)境提供的強(qiáng)大的功能,再結(jié)合LDRA Testbed的BITMAP插裝技術(shù),插裝后的代碼在目標(biāo)機(jī)運(yùn)行的時候?qū)⑾鄳?yīng)的特征值信息放到一個大小固定的數(shù)組中;當(dāng)測試進(jìn)行到一定階段,需要對覆蓋率信息進(jìn)行分析時,通過Tornado的shell將該數(shù)組的內(nèi)容讀取回主機(jī)進(jìn)行分析即可。
增強(qiáng)的軟件模式的系統(tǒng)測試方法具有對系統(tǒng)實(shí)時性影響小,工程實(shí)施方便等特點(diǎn),在大量的實(shí)際項(xiàng)目的測試中被廣泛使用,并且效果極好。
(3)軟/硬件結(jié)合模式的系統(tǒng)測試
對于系統(tǒng)有極端實(shí)時性要求,并且關(guān)心系統(tǒng)運(yùn)行性能的情況,就需要采用軟/硬件結(jié)合的模式。該模式需要使用硬件數(shù)據(jù)采集器 RTInsight和目標(biāo)機(jī)的硬件總線進(jìn)行連接,在被測程序中插入的是向端口賦值的語句。
在這種模式下,對系統(tǒng)的實(shí)時性影響和資源占用都是最小的,但是該模式需要進(jìn)行硬件連接,導(dǎo)致其工程實(shí)施性不如軟件模式好,但是其功能要多一些。
單元級軟件測試已經(jīng)被公認(rèn)為行之有效的軟件測試方法,使用單元級軟件測試可在軟件開發(fā)早期發(fā)現(xiàn)軟件故障或缺陷,從而提高軟件可靠性,減少軟件測試開銷。
傳統(tǒng)的用于單元級軟件測試采用人工方式編寫測試驅(qū)動與樁模塊,因此具有測試程序可靠性低、開銷大、依賴于測試人員經(jīng)驗(yàn)等問題,同時由于大多數(shù)測試時間花費(fèi)在編寫測試程序上,因此測試人員積極性不高,給軟件測試效果帶來影響。有鑒于此,LDRA公司成功開發(fā)出單元級測試工具TBrun可自動幫助測試工程師進(jìn)行單元級軟件測試。使用TBrun可自動產(chǎn)生軟件測試驅(qū)動、樁模塊,從而節(jié)省時間,測試人員可將重點(diǎn)放在設(shè)計(jì)測試用例上,提高軟件測試效率,同時提高軟件測試人員效率。
RTInsight充分考慮到嵌入式軟件實(shí)時性特點(diǎn),結(jié)合使用LDRA公司靜態(tài)分析與代碼自動插裝技術(shù),及 RTInsight硬件可實(shí)時地嵌入式系統(tǒng)進(jìn)行代碼覆蓋率分析與性能分析。由于采用代碼插裝可準(zhǔn)確的判斷代碼執(zhí)行情況,同時由于采用RTInsight高速虛擬端口技術(shù)使得代碼插裝量可控制在每個特征點(diǎn)(即函數(shù)入口、出口,程序分支點(diǎn))一到兩條指令或語句(代碼增加量可控制在 10%之內(nèi)),大大減少插裝代碼增加對被測系統(tǒng)的影響??沙晒τ糜趯?shí)時嵌入式系統(tǒng)集成與系統(tǒng)測試,提供代碼覆蓋率分析、性能分析、變量監(jiān)控、堆棧監(jiān)控及系統(tǒng)跟蹤功能。RTInsight實(shí)物圖如圖2所示。
圖2 RTInsight實(shí)時監(jiān)控器
RTInsight通過通用探頭或?qū)S锰筋^與目標(biāo)系統(tǒng)RAM芯片插座、CPU插座或?qū)S每偩€(如PC104)相連,支持所有8位、16位及32位微處理器與微控制器。支持匯編語言,C/C++語言,ADA語言。
根據(jù)嵌入式系統(tǒng)的特點(diǎn),我們提出了嵌入式實(shí)時軟件的測試結(jié)構(gòu),并以LDRA Testbed工具為例介紹了嵌入式實(shí)時軟件的測試的內(nèi)容和方法。該工具集已經(jīng)成功應(yīng)用于某型潛艇電力推進(jìn)系統(tǒng)嵌入式實(shí)時軟件的測試,取得了很好的測試效果。
[1]陳智育, 溫彥軍, 陳琪編著. VxWorks程序開發(fā)實(shí)踐[M]. 北京:人民郵電出版社,2004.5.
[2]陳敬原編著. VxWorks軟件開發(fā)項(xiàng)目實(shí)例完全解析[M]. 北京:中國電力出版社,2005.10
[3]康一梅, 張永革. 嵌入式軟件測試[M]. 北京: 機(jī)械工業(yè)出版社, 2008.7
[4]陳琦, 錢紅兵等. 一種基于仿真器的嵌入式軟件測試方法[J]. 計(jì)算機(jī)工程與科學(xué),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.