關(guān)于仿真器的嵌入式測(cè)試平臺(tái)相關(guān)軟件比較論文
關(guān)于仿真器的嵌入式測(cè)試平臺(tái)相關(guān)軟件比較論文
仿真器是指以某一系統(tǒng)復(fù)現(xiàn)另一系統(tǒng)的功能。與計(jì)算機(jī)模擬系統(tǒng)(Computer Simulation)的區(qū)別在于,仿真器致力于模仿系統(tǒng)的外在表現(xiàn)、行為,而不是模擬系統(tǒng)的抽象模型。以下是學(xué)習(xí)啦小編今天為大家精心準(zhǔn)備的:關(guān)于仿真器的嵌入式測(cè)試平臺(tái)相關(guān)軟件比較相關(guān)論文。內(nèi)容僅供閱讀與參考!
關(guān)于仿真器的嵌入式測(cè)試平臺(tái)相關(guān)軟件比較全文如下:
1 純硬件形式
常見的有在線仿真器和邏輯分析儀。在線仿真器可以完全仿真目標(biāo)芯片的行為,準(zhǔn)確度高,運(yùn)行速度快,但工藝設(shè)計(jì)復(fù)雜,價(jià)格昂貴。邏輯分析儀通過(guò)監(jiān)控和采樣總線數(shù)據(jù)執(zhí)行測(cè)試,完備性受限于采樣頻率,而提高采樣頻率則會(huì)大幅提高成本?;谟布臏y(cè)試工具通常用于計(jì)算機(jī)硬件的設(shè)計(jì)和測(cè)試,很少用于嵌入式軟件的測(cè)試。
2 純軟件形式
包括插樁和軟件仿真兩種典型方法。插樁向被測(cè)程序的特定位置插入探針,據(jù)此獲得程序的運(yùn)行信息。優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,缺點(diǎn)是改變了被測(cè)程序,無(wú)法得到被測(cè)程序的精確執(zhí)行軌跡和執(zhí)行時(shí)間。軟件仿真通過(guò)構(gòu)建目標(biāo)機(jī)的虛擬仿真環(huán)境,在宿主機(jī)上加載待測(cè)程序執(zhí)行測(cè)試(目標(biāo)機(jī)指嵌入式軟件的運(yùn)行環(huán)境,宿主機(jī)指嵌入式軟件的開發(fā)環(huán)境,下同)。優(yōu)點(diǎn)是可獲得待測(cè)程序的精確執(zhí)行軌跡,缺點(diǎn)是速度較慢。
3 軟硬結(jié)合形式
綜合了純硬件和純軟件形式的特點(diǎn),代表工具是 CodeTEST。測(cè)試環(huán)境接近于真實(shí)環(huán)境,準(zhǔn)確性較高。缺點(diǎn)是硬件依賴性強(qiáng),靈活性及可移植性差,成本昂貴。
理論上講,嵌入式軟件測(cè)試應(yīng)在目標(biāo)機(jī)進(jìn)行,畢竟軟件最終運(yùn)行在目標(biāo)機(jī)上。但嵌入式系統(tǒng)多采用軟硬件協(xié)同開發(fā),在軟件開發(fā)過(guò)程中,目標(biāo)機(jī)環(huán)境很有限,甚至不可用,無(wú)法滿足軟件測(cè)試的需要。此外,由于目標(biāo)機(jī)的專用性,目標(biāo)機(jī)下的測(cè)試工具比宿主機(jī)下的同類工具往往昂貴得多??紤]到上述因素,應(yīng)將盡可能多的測(cè)試工作放在宿主機(jī)進(jìn)行。但由于體系結(jié)構(gòu)的差異,目標(biāo)機(jī)軟件一般不能在宿主機(jī)直接運(yùn)行,這就需要建立目標(biāo)機(jī)的仿真環(huán)境,即通過(guò)軟件仿真進(jìn)行測(cè)試。
軟件仿真是一種經(jīng)濟(jì)靈活的測(cè)試策略,可在沒(méi)有目標(biāo)機(jī)硬件的情況下測(cè)試,準(zhǔn)確性高,可以獲取精確的運(yùn)行時(shí)間,能靈活控制程序的運(yùn)行狀態(tài)。采用軟件仿真測(cè)試也可以避免將程序燒錄到目標(biāo)機(jī) ROM 造成的測(cè)試?yán)щy,降低開發(fā)成本。
3.1 當(dāng)前嵌入式測(cè)試工具的不足
不少嵌入式測(cè)試工具采用軟件仿真測(cè)試。傳統(tǒng)仿真工具的測(cè)試流程是:編譯獲得被測(cè)程序的可執(zhí)行程序,加載到仿真器運(yùn)行,獲得測(cè)試結(jié)果。這些工具對(duì)集成測(cè)試和系統(tǒng)測(cè)試支持較好,對(duì)單元測(cè)試的支持不佳,看一個(gè)具體例子。
通過(guò)例 1 可得到以下結(jié)論:?jiǎn)卧獪y(cè)試時(shí)很多模塊尚未編寫完畢,若采用傳統(tǒng)的嵌入式軟件測(cè)試方法,需要編寫大量的樁函數(shù),工作量大。
測(cè)試者需熟悉嵌入式軟件的開發(fā)語(yǔ)言,這樣才能編寫樁函數(shù)。軟件開發(fā)者通常會(huì)參與單元測(cè)試,這類人員可滿足要求。但為提高軟件質(zhì)量,一般需安排專門的測(cè)試人員測(cè)試。嵌入式開發(fā)通常采用匯編等底層語(yǔ)言,種類繁多且較難學(xué)習(xí),對(duì)測(cè)試者要求較高。修改樁函數(shù)和外部變量后,需重新編譯生成可執(zhí)行程序,重新加載到仿真器測(cè)試。每做一點(diǎn)修改,均需重復(fù)上述步驟,測(cè)試過(guò)程繁瑣。測(cè)試的針對(duì)性不強(qiáng),只能加載整個(gè)可執(zhí)行程序測(cè)試,無(wú)法針對(duì)特定的關(guān)注單元測(cè)試。
以航天某院為例,盡管購(gòu)置了CodeTEST、Logiscope等昂貴的測(cè)試工具,但上述測(cè)試問(wèn)題仍非常突出,其它工具也普遍存在類似的局限性。
本文介紹了一種新的嵌入式軟件測(cè)試方法,可以彌補(bǔ)上述不足。其特色和創(chuàng)新體現(xiàn)在三方面:
1) 通過(guò)自行構(gòu)建鏈接器,而不采用缺省的鏈接器完成鏈接,生成“內(nèi)存映像”(此處的“內(nèi)存映像”與可執(zhí)行程序類似,但并不完全一致,本文采用該術(shù)語(yǔ)以區(qū)分二者),可在程序代碼不完備的情況下執(zhí)行測(cè)試,能更好地支持單元測(cè)試。
2) 構(gòu)建軟件仿真器,加載內(nèi)存映像測(cè)試。除具備傳統(tǒng)仿真測(cè)試的優(yōu)點(diǎn)外,還增加了交互式腳
本處理能力,運(yùn)行過(guò)程中可直接修改樁函數(shù)和變量,無(wú)需頻繁地編譯、加載,測(cè)試更加便捷。普通測(cè)試人員可以通過(guò)高級(jí)腳本語(yǔ)言編寫測(cè)試用例,無(wú)需精通嵌入式平臺(tái)的專用開發(fā)語(yǔ)言。
3) 能對(duì)指定的關(guān)注單元進(jìn)行測(cè)試,支持設(shè)定源代碼斷點(diǎn),支持設(shè)定仿真的起止范圍,測(cè)試更有針對(duì)性,測(cè)試效率較高。
2 基于仿真器的嵌入式測(cè)試平臺(tái)
1) 編譯被測(cè)程序生成目標(biāo)文件(x86 平臺(tái)的.obj 文件就屬于典型的目標(biāo)文件)和鏈接描述文件(link description file,后文簡(jiǎn)稱 LDF 文件)。
2)利用自行構(gòu)建的鏈接器分析目標(biāo)文件和庫(kù)文件,提取符號(hào)表、數(shù)據(jù)段、代碼段、可重定位段、行號(hào)信息等,按照 LDF 文件的說(shuō)明進(jìn)行鏈接,生成內(nèi)存映像、總符號(hào)表和行號(hào)信息表。
3) 將內(nèi)存映像加載到仿真器測(cè)試。測(cè)試過(guò)程中,可以修改內(nèi)存變量、寄存器值、樁函數(shù)等。結(jié)合測(cè)試用例注入,可實(shí)現(xiàn)單元測(cè)試和動(dòng)態(tài)測(cè)試。
3.2 鏈接器構(gòu)造
鏈接器根據(jù) LDF 文件的說(shuō)明,提取并拼裝目標(biāo)文件中的各個(gè)段,得到內(nèi)存映像、符號(hào)表和行號(hào)信息表(圖 3)。其中,內(nèi)存映像和可執(zhí)行程序功能類似;符號(hào)表定義了各個(gè)符號(hào)(包括函數(shù)、變量、標(biāo)號(hào)等)的名稱、地址、文件、作用域等信息;行號(hào)信息定義了源文件中行號(hào)與內(nèi)存映像中地址的映射關(guān)系。關(guān)于行號(hào)信息的更多介紹,請(qǐng)參考2.3節(jié)。
目標(biāo)文件中的未定義符號(hào)在鏈接時(shí)會(huì)以UNDEF 標(biāo)記,只分析本文件無(wú)法解析,需要進(jìn)一步分析其它文件。如果在所有文件中都沒(méi)有找到該符號(hào),該符號(hào)就無(wú)法解析,使用標(biāo)準(zhǔn)的鏈接器無(wú)法鏈接,不能生成可執(zhí)行程序進(jìn)行仿真測(cè)試。
SimAD 自行設(shè)計(jì)了鏈接器,可以有效控制鏈接過(guò)程。對(duì)于未定義符號(hào),自動(dòng)分配特殊的內(nèi)存地址,使得這些符號(hào)可以通過(guò)“解析”,進(jìn)而構(gòu)造可被仿真器執(zhí)行的內(nèi)存映像。這是實(shí)現(xiàn)本文測(cè)試方法的關(guān)鍵所在。這樣的設(shè)計(jì)思路有以下優(yōu)點(diǎn):1) 單元測(cè)試時(shí)很多模塊不完備,可避免使用嵌入式開發(fā)語(yǔ)言編寫大量樁函數(shù)。即使存在未定義符號(hào),也可以正常鏈接,提升了測(cè)試效率。
仿真器執(zhí)行時(shí)可以檢測(cè)到未定義符號(hào),并檢查是否定義了樁函數(shù)或者進(jìn)行了變量賦值。這樣,就把樁函數(shù)和外部變量的綁定由編譯期調(diào)整到了運(yùn)行期。這帶來(lái)了兩個(gè)好處:可通過(guò)腳本語(yǔ)言設(shè)計(jì)樁函數(shù),進(jìn)行變量賦值,避免了學(xué)習(xí)嵌入式開發(fā)語(yǔ)言的代價(jià)。 可實(shí)現(xiàn)交互式的樁函數(shù)聲明和變量賦值,避免了傳統(tǒng)的“修改樁函數(shù)和外部變量→編譯→加載運(yùn)行”的繁瑣測(cè)試流程。
3.3 仿真器實(shí)現(xiàn)
仿真器完成對(duì)目標(biāo)機(jī)的模擬,其基本特征是行為等價(jià),注重對(duì)目標(biāo)機(jī)行為功能的仿真,對(duì)內(nèi)部結(jié)構(gòu)的仿真要求不高。重點(diǎn)關(guān)注:真實(shí)性、全面性、運(yùn)行速度、通用性和可擴(kuò)展性等指標(biāo)。
SimAD 仿真器實(shí)現(xiàn)了以下模擬:①譯碼:包括運(yùn)算指令譯碼,移位指令譯碼,地址寄存器譯碼,通用寄存器譯碼等;②運(yùn)算模擬:包括加法器模擬、乘法器模擬及移位器模擬;③控制流處理:包括中斷、循環(huán)、跳轉(zhuǎn)、調(diào)用等;④ 地址產(chǎn)生模擬; 內(nèi)存訪問(wèn)模擬; ⑤ 模擬:包括外部?jī)?nèi)存方式和串口 DMA 方式;定時(shí)器模擬。
在實(shí)現(xiàn)功能模擬的同時(shí),仿真器還提供了測(cè)試接口和外部交互接口,包括內(nèi)存映像的加載接口、內(nèi)存和寄存器的查看/修改接口、樁函數(shù)的設(shè)定/修改接口、數(shù)據(jù)的輸入/
輸出接口等。
對(duì)單元測(cè)試的良好支持是 SimAD 仿真器的特色之一。單元測(cè)試中不可避免地會(huì)用到樁函數(shù),仿真器提供了 setstub 樁函數(shù)設(shè)置接口。設(shè)置樁函數(shù)后,仿真器查詢其內(nèi)存地址,連同函數(shù)名一并保存到樁函數(shù)表中。在運(yùn)行過(guò)程中,仿真器檢查調(diào)用的函數(shù)名是否存在于樁函數(shù)表中,若存在則不執(zhí)行內(nèi)存映像中的函數(shù)代碼,而轉(zhuǎn)去執(zhí)行測(cè)試腳本中設(shè)定的樁函數(shù)。為便于理解上述過(guò)程,看一下例2。.......
4 SimAD 測(cè)試工具介紹
本文方法已在 SimAD 測(cè)試工具中實(shí)現(xiàn)。該工具目前支持 AD21060 和 AD21020兩類芯片,可實(shí)現(xiàn)靜態(tài)分析和動(dòng)態(tài)測(cè)試。已實(shí)現(xiàn)的功能包括:集成測(cè)試環(huán)境(圖 6)、鏈接器、仿真器、測(cè)試腳本解釋執(zhí)行、測(cè)試報(bào)表生成等。
圖6 SimAD 集成測(cè)試環(huán)境對(duì)測(cè)試腳本的良好支持是 SimAD 的特色。
支持新建和保存測(cè)試腳本,雙擊運(yùn)行測(cè)試腳本(圖5 中的右側(cè)窗口),批量執(zhí)行測(cè)試腳本,從而提高了回歸測(cè)試[10]的執(zhí)行效率。SimAD 還提供了控制臺(tái)交互窗口,支持在仿真過(guò)程中輸入交互式的測(cè)試命令,即時(shí)控制測(cè)試過(guò)程。
圖7 交互式執(zhí)行測(cè)試命令SimAD 還支持其它測(cè)試功能,如語(yǔ)句覆蓋率報(bào)表、控制流著色、函數(shù)調(diào)用圖生成等,這些措施對(duì)提高測(cè)試效果也有裨益。
5 相關(guān)系統(tǒng)比較
在嵌入式軟件測(cè)試領(lǐng)域,國(guó)內(nèi)外使用較多的測(cè)試工具是 CodeTEST和 Logiscope。它們與SimAD 的比較見表。
3 種工具中 CodeTEST 功能最強(qiáng)。動(dòng)態(tài)內(nèi)存分析和性能分析是其主要特點(diǎn),采用軟硬件結(jié)合形式實(shí)現(xiàn),準(zhǔn)確度較高,缺點(diǎn)是價(jià)格昂貴。使用CodeTEST 必須具備目標(biāo)機(jī)硬件,必須生成執(zhí)行程序,對(duì)單元測(cè)試的支持不佳。
Logiscope 主要用于軟件的質(zhì)量分析和測(cè)試,其突出特點(diǎn)是對(duì)軟件全生命周期的支持。采用插裝方式測(cè)試,對(duì)執(zhí)行速度和運(yùn)行結(jié)果會(huì)造成一定影響,無(wú)法獲得精確的執(zhí)行時(shí)間和運(yùn)行軌跡。
SimAD 通過(guò)軟件仿真測(cè)試,不依賴目標(biāo)機(jī)硬件,自行構(gòu)造的鏈接器可處理未定義符號(hào),可通過(guò)高級(jí)語(yǔ)言腳本編寫測(cè)試用例和樁函數(shù),對(duì)單元測(cè)試的支持較好。.....
6 結(jié) 論
目前的嵌入式軟件測(cè)試工具對(duì)單元測(cè)試的支持不佳,本文對(duì)此進(jìn)行了研究和探索,提出了相應(yīng)的解決思路,相關(guān)方法已在 SimAD 測(cè)試工具中實(shí)現(xiàn),并在航天某院的項(xiàng)目測(cè)試中得到實(shí)際應(yīng)用,得到了該院的高度評(píng)價(jià)。與成熟的嵌入式軟件測(cè)試工具相比,SimAD仍有很多地方需要完善。
未來(lái)的主要工作包括:完善仿真器和測(cè)試框架的接口,方便第三方仿真器接入,以支持更多的嵌入式平臺(tái)軟件測(cè)試;針對(duì) COFF、PE 等常用目標(biāo)文件開發(fā)鏈接器,使之能分析鏈接多種平臺(tái)的目標(biāo)文件;增加自動(dòng)生成測(cè)試腳本功能,目前純手工編寫腳本,使用不太方便;增強(qiáng)覆蓋率分析。目前只支持語(yǔ)句覆蓋,需進(jìn)一步支持判定覆蓋、條件覆蓋等。
參考文獻(xiàn)(References):
[1] 國(guó)家安全生產(chǎn)監(jiān)督管理總局.“7 23”甬溫線特別重大鐵路交通事故調(diào)查報(bào)告[EB/OL]. 北京: 國(guó)家安全生產(chǎn)監(jiān)督管理總局網(wǎng)站, 2011 .
[2] 薛偉. 利用在線仿真器(ICE)設(shè)計(jì)微機(jī)故障自動(dòng)診斷系統(tǒng)[J]. 小型微型計(jì)算機(jī)系統(tǒng), 1988, 9(6): 40-44
[3] 師奕兵, 王厚軍. 高速邏輯分析儀產(chǎn)品化設(shè)計(jì)的關(guān)鍵技術(shù)[J].儀器儀表學(xué)報(bào), 2002, 23(5): 38-40
[4] 李躍飛, 郭君紅, 白成剛, 等. 飛行控制軟件測(cè)試中的插樁技術(shù)[J]. 北京航空航天大學(xué)學(xué)報(bào), 2009, 35(5): 580-583
[5] 周慶, 劉斌, 余正偉, 等. 綜合模塊化航電軟件仿真測(cè)試環(huán)境
研究[J]. 航空學(xué)報(bào), 2012, 33(4): 722-733
[6] Rihar Marjan. www.51lunwen.com/software/ Software Simulator as an Effective Tool for TestingControl Algorithms [J]. Simulation, 1994, 63(1): 6-14