• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于仿真器的嵌入式軟件單元測試方法

      2012-06-22 05:44:02
      關(guān)鍵詞:仿真器測試工具嵌入式軟件

      許 福

      金茂忠 劉 輝 陳 琦

      (北京林業(yè)大學(xué)信息學(xué)院,北京100083)

      (北京航空航天大學(xué) 計算機學(xué)院,北京100191)

      嵌入式軟件廣泛應(yīng)用于航空航天、工業(yè)控制、交通管控等領(lǐng)域.可靠性是這類軟件的重要指標,因為一旦發(fā)生故障,往往會造成嚴重損失,2011年“7·23”甬溫線特別重大鐵路交通事故就是典型例子[1].因此,必須對這類軟件執(zhí)行嚴格的、有效的測試.按實現(xiàn)方式不同,可將嵌入式測試工具分為3類.

      1)純硬件形式.常見的有在線仿真器[2]和邏輯分析儀[3].在線仿真器可以完全仿真目標芯片的行為,準確度高,運行速度快,但工藝設(shè)計復(fù)雜,價格昂貴.邏輯分析儀通過監(jiān)控和采樣總線數(shù)據(jù)執(zhí)行測試,完備性受限于采樣頻率,而提高采樣頻率則會大幅提高成本.基于硬件的測試工具通常用于計算機硬件的設(shè)計和測試,很少用于嵌入式軟件的測試.

      2)純軟件形式.包括插樁[4]和軟件仿真[5]兩種典型方法.插樁向被測程序的特定位置插入探針,據(jù)此獲得程序的運行信息.優(yōu)點是實現(xiàn)簡單,缺點是改變了被測程序,無法得到被測程序的精確執(zhí)行軌跡和執(zhí)行時間.軟件仿真通過構(gòu)建目標機的虛擬仿真環(huán)境,在宿主機上加載待測程序執(zhí)行測試(目標機指嵌入式軟件的運行環(huán)境,宿主機指嵌入式軟件的開發(fā)環(huán)境,下同).優(yōu)點是可獲得待測程序的精確執(zhí)行軌跡,缺點是速度較慢.

      3)軟硬結(jié)合形式.綜合了純硬件和純軟件形式的特點,代表工具是 CodeTEST[6].測試環(huán)境接近于真實環(huán)境,準確性較高.缺點是硬件依賴性強,靈活性及可移植性差,成本昂貴.

      理論上講,嵌入式軟件測試應(yīng)在目標機進行,畢竟軟件最終運行在目標機上.但嵌入式系統(tǒng)多采用軟硬件協(xié)同開發(fā),在軟件開發(fā)過程中,目標機環(huán)境很有限,甚至不可用,無法滿足軟件測試的需要.此外,由于目標機的專用性,目標機下的測試工具比宿主機下的同類工具往往昂貴得多.考慮到上述因素,應(yīng)將盡可能多的測試工作放在宿主機進行.但由于體系結(jié)構(gòu)的差異,目標機軟件一般不能在宿主機直接運行,這就需要建立目標機的仿真環(huán)境,即通過軟件仿真進行測試.

      軟件仿真是一種經(jīng)濟靈活的測試策略,可在沒有目標機硬件的情況下測試,準確性高,可以獲取精確的運行時間,能靈活控制程序的運行狀態(tài).采用軟件仿真測試也可以避免將程序燒錄到目標機ROM造成的測試困難,降低開發(fā)成本.

      1 當前嵌入式測試工具的不足

      不少嵌入式測試工具采用軟件仿真測試[7-8].傳統(tǒng)仿真工具的測試流程是:編譯獲得被測程序的可執(zhí)行程序,加載到仿真器運行,獲得測試結(jié)果.這些工具對集成測試和系統(tǒng)測試支持較好,對單元測試的支持不佳.

      例1 對圖1中AD21060芯片[9]的匯編代碼進行單元測試時,若sub1(第7行)和sub2(第9行)未定義,必須用AD21060匯編語言編寫樁函數(shù)[10].類似地,若被測單元引用了外部變量,也需要在被測源程序中聲明.否則,編譯器會報錯,不能生成可執(zhí)行程序,從而無法加載到仿真器測試.

      圖1 AD21060匯編代碼片段

      通過例1可得到以下結(jié)論:①單元測試時很多模塊尚未編寫完畢,若采用傳統(tǒng)的嵌入式軟件測試方法,需要編寫大量的樁函數(shù),工作量大.②測試者需熟悉嵌入式軟件的開發(fā)語言,這樣才能編寫樁函數(shù).軟件開發(fā)者通常會參與單元測試,這類人員可滿足要求.但為提高軟件質(zhì)量,一般需安排專門的測試人員測試.嵌入式開發(fā)通常采用匯編等底層語言,種類繁多且較難學(xué)習(xí),對測試者要求較高.③修改樁函數(shù)和外部變量后,需重新編譯生成可執(zhí)行程序,重新加載到仿真器測試.每做一點修改,均需重復(fù)上述步驟,測試過程繁瑣.④測試的針對性不強,只能加載整個可執(zhí)行程序測試,無法針對特定的關(guān)注單元測試.

      以航天某院為例,盡管購置了CodeTEST[6]和Logiscope[11]等昂貴的測試工具,但上述測試問題仍非常突出,其它工具也普遍存在類似的局限性.本文介紹了一種新的嵌入式軟件測試方法,可以彌補上述不足.其特色和創(chuàng)新體現(xiàn)在3方面:

      1)通過自行構(gòu)建鏈接器,而不采用缺省的鏈接器完成鏈接,生成“內(nèi)存映像”(此處的“內(nèi)存映像”與可執(zhí)行程序類似,但并不完全一致,本文采用該術(shù)語以區(qū)分二者),可在程序代碼不完備的情況下執(zhí)行測試,能更好地支持單元測試.

      2)構(gòu)建軟件仿真器,加載內(nèi)存映像測試.除具備傳統(tǒng)仿真測試的優(yōu)點外,還增加了交互式腳本處理能力,運行過程中可直接修改樁函數(shù)和變量,無需頻繁地編譯、加載,測試更加便捷.普通測試人員可以通過高級腳本語言編寫測試用例,無需精通嵌入式平臺的專用開發(fā)語言.

      3)能對指定的關(guān)注單元進行測試,支持設(shè)定源代碼斷點,支持設(shè)定仿真的起止范圍,測試更有針對性,測試效率較高.

      2 基于仿真器的嵌入式測試平臺

      圖2給出了本文開發(fā)的測試平臺SimAD的測試流程圖.其測試流程如下:

      1)編譯被測程序生成目標文件(x86平臺的.obj文件就屬于典型的目標文件)和鏈接描述文件(LDF,Link Description File).

      2)利用自行構(gòu)建的鏈接器分析目標文件和庫文件,提取符號表、數(shù)據(jù)段、代碼段、可重定位段、行號信息等,按照LDF文件的說明進行鏈接,生成內(nèi)存映像、總符號表和行號信息表.

      3)將內(nèi)存映像加載到仿真器測試.測試過程中,可以修改內(nèi)存變量、寄存器值、樁函數(shù)等.結(jié)合測試用例注入,可實現(xiàn)單元測試和動態(tài)測試.

      2.1 鏈接器構(gòu)造

      鏈接器根據(jù)LDF文件的說明,提取并拼裝目標文件中的各個段,得到內(nèi)存映像、符號表和行號信息表(圖3).其中,內(nèi)存映像和可執(zhí)行程序功能類似;符號表定義了各個符號(包括函數(shù)、變量、標號等)的名稱、地址、文件、作用域等信息;行號信息定義了源文件中行號與內(nèi)存映像中地址的映射關(guān)系.關(guān)于行號信息的更多介紹,請參考2.3節(jié).

      圖3 鏈接過程示意圖

      目標文件中的未定義符號在鏈接時會以UNDEF標記,只分析本文件無法解析,需要進一步分析其它文件.如果在所有文件中都沒有找到該符號,該符號就無法解析,使用標準的鏈接器無法鏈接,不能生成可執(zhí)行程序進行仿真測試.

      SimAD自行設(shè)計了鏈接器,可以有效控制鏈接過程.對于未定義符號,自動分配特殊的內(nèi)存地址,使得這些符號可以通過“解析”,進而構(gòu)造可被仿真器執(zhí)行的內(nèi)存映像.這是實現(xiàn)本文測試方法的關(guān)鍵所在.這樣的設(shè)計思路有以下優(yōu)點:

      1)單元測試時很多模塊不完備,可避免使用嵌入式開發(fā)語言編寫大量樁函數(shù).即使存在未定義符號,也可以正常鏈接,提升了測試效率.

      2)仿真器執(zhí)行時可以檢測到未定義符號,并檢查是否定義了樁函數(shù)或者進行了變量賦值.這樣,就把樁函數(shù)和外部變量的綁定由編譯期調(diào)整到了運行期.這帶來了2個好處:①可通過腳本語言設(shè)計樁函數(shù),進行變量賦值,避免了學(xué)習(xí)嵌入式開發(fā)語言的代價.②可實現(xiàn)交互式的樁函數(shù)聲明和變量賦值,避免了傳統(tǒng)的“修改樁函數(shù)和外部變量→編譯→加載運行”的繁瑣測試流程.

      2.2 仿真器實現(xiàn)

      仿真器完成對目標機的模擬,其基本特征是行為等價,注重對目標機行為功能的仿真,對內(nèi)部結(jié)構(gòu)的仿真要求不高.重點關(guān)注:真實性、全面性、運行速度、通用性和可擴展性等指標.

      SimAD仿真器實現(xiàn)了以下模擬:①譯碼,包括運算指令譯碼、移位指令譯碼、地址寄存器譯碼、通用寄存器譯碼等;②運算模擬,包括加法器模擬、乘法器模擬及移位器模擬;③控制流處理,包括中斷、循環(huán)、跳轉(zhuǎn)、調(diào)用等;④地址產(chǎn)生模擬;⑤內(nèi)存訪問模擬;⑥I/O模擬,包括外部內(nèi)存方式和串口DMA方式;⑦定時器模擬.

      在實現(xiàn)功能模擬的同時,仿真器還提供了測試接口和外部交互接口,包括內(nèi)存映像的加載接口、內(nèi)存和寄存器的查看/修改接口、樁函數(shù)的設(shè)定/修改接口、數(shù)據(jù)的輸入/輸出接口等.

      對單元測試的良好支持是SimAD仿真器的特色之一.單元測試中不可避免會用到樁函數(shù),仿真器提供了setstub樁函數(shù)設(shè)置接口.設(shè)置樁函數(shù)后,仿真器查詢其內(nèi)存地址,連同函數(shù)名一并保存到樁函數(shù)表中.在運行過程中,仿真器檢查調(diào)用的函數(shù)名是否存在于樁函數(shù)表中,若存在則不執(zhí)行內(nèi)存映像中的函數(shù)代碼,而轉(zhuǎn)去執(zhí)行測試腳本中設(shè)定的樁函數(shù).為了便于理解上述過程,請參考例2.

      例2 圖4是一個SimAD測試腳本示例.其中,第11~13行代碼將函數(shù)set1,set2和add3設(shè)為樁函數(shù),第19行啟動仿真器.仿真器遇到樁函數(shù)時會暫停運行,并返回一個特定值.第20行將返回值保存在result中.第22~33行通過仿真器的getstub命令查詢遇到了哪個樁函數(shù),并執(zhí)行樁函數(shù)對應(yīng)的測試腳本.假設(shè)仿真器遇到了set1樁函數(shù),則執(zhí)行第24~25行,即輸出“set1”字符串,并將寄存器R1的值設(shè)為6.

      圖4 樁函數(shù)實例

      2.3 對關(guān)注單元的測試

      對關(guān)注單元的測試是SimAD仿真器的另一個特色,通過2種手段實現(xiàn).

      1)利用“set startaddr”和“set endaddr”設(shè)置仿真執(zhí)行的起止地址.考慮到直接輸入地址不方便,可通過“getsymaddr”查詢符號的實際地址.比如,圖4中的第16~17行,將標號為“start”和“end”間的代碼設(shè)置為仿真運行代碼.

      2)為仿真器添加斷點運行機制.實現(xiàn)該功能需要獲取源程序中語句行與內(nèi)存映像中指令地址的對應(yīng)關(guān)系,這種對應(yīng)關(guān)系稱為行號信息.

      SimAD 仿真 AD21060[9]芯片,其目標文件格式是 ELF[12],行號格式是 DWARF[13],保存在目標文件的.debug_line段中.通過分析該段,可解析出源程序行號和指令地址的映射關(guān)系.仿真器運行時,檢查執(zhí)行的指令地址處是否設(shè)置了斷點.若設(shè)置了斷點,暫停仿真,顯示被測單元的詳細信息,如寄存器值、內(nèi)存變量值等.

      借助行號信息,還可以支持動態(tài)測試.仿真器可以記錄執(zhí)行過的指令地址,通過查詢地址與源碼行的對應(yīng)關(guān)系,可計算出覆蓋了哪些代碼行,進而計算出語句覆蓋率.語句覆蓋率是單元測試的重要指標.對于嵌入式應(yīng)用,尤其是高可靠性的嵌入式應(yīng)用,一般要求語句覆蓋率達到100%.

      圖5為某次仿真后的語句覆蓋率著色情況,其中已覆蓋的語句和未覆蓋的語句在軟件中會分別著色為綠色和紅色.為便于使用,SimAD可對單次仿真結(jié)果著色,也可以對多次仿真結(jié)果合并著色.

      圖5 SimAD語句覆蓋率測試

      3 SimAD測試工具介紹

      本文方法已在SimAD測試工具中實現(xiàn).該工具目前支持AD21060和AD21020[9]2類芯片,可實現(xiàn)靜態(tài)分析和動態(tài)測試.已實現(xiàn)的功能包括集成測試環(huán)境(圖6)、鏈接器、仿真器、測試腳本解釋執(zhí)行、測試報表生成等.

      對測試腳本的良好支持是SimAD的特色.支持新建和保存測試腳本,雙擊運行測試腳本(圖5中的右側(cè)窗口),批量執(zhí)行測試腳本,從而提高了回歸測試[10]的執(zhí)行效率.SimAD還提供了控制臺交互窗口,支持在仿真過程中輸入交互式的測試命令,即時控制測試過程(圖7).

      圖6 SimAD集成測試環(huán)境

      圖7 交互式執(zhí)行測試命令

      SimAD還支持其它測試功能,如語句覆蓋率報表、控制流著色、函數(shù)調(diào)用圖生成等,這些措施對提高測試效果也有裨益.

      4 相關(guān)系統(tǒng)比較

      在嵌入式軟件測試領(lǐng)域,國內(nèi)外使用較多的測試工具是 CodeTEST[6]和 Logiscope[11].它們與SimAD的比較見表1.

      3種工具中CodeTEST功能最強.動態(tài)內(nèi)存分析和性能分析是其主要特點,采用軟硬件結(jié)合形式實現(xiàn),準確度較高,缺點是價格昂貴.使用CodeTEST必須具備目標機硬件,必須生成執(zhí)行程序,對單元測試的支持不佳.

      Logiscope主要用于軟件的質(zhì)量分析和測試,其突出特點是對軟件全生命周期的支持.采用插裝方式測試,對執(zhí)行速度和運行結(jié)果會造成一定影響,無法獲得精確的執(zhí)行時間和運行軌跡.

      SimAD通過軟件仿真測試,不依賴目標機硬件,自行構(gòu)造的鏈接器可處理未定義符號,可通過高級語言腳本編寫測試用例和樁函數(shù),對單元測試的支持較好.

      表1 常用嵌入式軟件測試工具與SimAD的比較

      5 結(jié)束語

      目前的嵌入式軟件測試工具對單元測試的支持不佳,本文對此進行了研究,提出了相應(yīng)的解決思路,相關(guān)方法已在SimAD測試工具中實現(xiàn),并在航天某院的項目測試中得到實際應(yīng)用.與成熟的嵌入式軟件測試工具相比,SimAD仍有很多地方需要完善.未來的主要工作包括:①完善仿真器和測試框架的接口,方便第三方仿真器接入,以支持更多的嵌入式平臺軟件測試;②針對COFF[14]和PE等常用目標文件開發(fā)鏈接器,使之能分析鏈接多種平臺的目標文件;③增加自動生成測試腳本功能,目前純手工編寫腳本,使用不太方便;④增強覆蓋率分析,目前只支持語句覆蓋,需進一步支持判定覆蓋、條件覆蓋等.

      References)

      [1]國家安全生產(chǎn)監(jiān)督管理總局.“7·23”甬溫線特別重大鐵路交通事故調(diào)查報告[EB/OL].北京:國家安全生產(chǎn)監(jiān)督管理總局,2011[2012-06-15].http://www.chinasafety.gov.cn/newpage/Contents/Channel_5498/2011/1228/160577/content_160577.htm

      State Administration of Work Safety of China.The investigation report of 7·23 Yong-wen major rail accident[EB/OL].Beijing:State Administration of Work Safety of China Official Website,2011[2012-06-15].http://www.chinasafety.gov.cn/newpage/Contents/Channel_5498/2011/1228/160577/content_160577.htm(in Chinese)

      [2]薛偉.利用在線仿真器(ICE)設(shè)計微機故障自動診斷系統(tǒng)[J].小型微型計算機系統(tǒng),1988,9(6):40-44

      Xue Wei.The microcomputer automatic fault diagnosis system based on circuit emulator[J].Mini-Micro Systems,1988,9(6):40-44(in Chinese)

      [3]師奕兵,王厚軍.高速邏輯分析儀產(chǎn)品化設(shè)計的關(guān)鍵技術(shù)[J].儀器儀表學(xué)報,2002,23(5):38-40

      Shi Yibing,Wang Houjun.Key techniques in product design of high-speed logic analyzer[J].Chinese Journal of Scientific Instrument,2002,23(5):38-40(in Chinese)

      [4]李躍飛,郭君紅,白成剛,等.飛行控制軟件測試中的插樁技術(shù)[J].北京航空航天大學(xué)學(xué)報,2009,35(5):580-583

      Li Yuefei,Guo Junhong,Bai Chenggang,et al.Instrumentation in flight-control software testing[J].Journal of Beijing University of Aeronautics and Astronautics,2009,35(5):580-583(in Chinese)

      [5]周慶,劉斌,余正偉,等.綜合模塊化航電軟件仿真測試環(huán)境研究[J].航空學(xué)報,2012,33(4):722-733

      Zhou Qing,Liu Bin,Yu Zhengwei,et al.A framework of simulation testing environment for integrated modular avionics software[J].Acta Aeronautica et Astronautica Sinica,2012,33(4):722-733(in Chinese)

      [6]吳曉葵.基于CodeTEST的嵌入式軟件測試技術(shù)[J].電子設(shè)計工程,2010,18(9):74-76

      Wu Xiaokui.Embedded software testing technology based on CodeTEST[J].Electronic Design Engineering,2010,18(9):74 -76(in Chinese)

      [7]Rihar Marjan.Software simulator as an effective tool for testing control algorithms[J].Simulation,1994,63(1):6-14

      [8]Anuradha P S,Kumar K S S,Arindam C.Commercial dynamic software satellite simulator[J].Journal of Spacecraft Technology,2010,20(2):1-8

      [9]Analog Devices Corporation.ADSP-21XX processor architectural overview[EB/OL].Norwood:Analog Devices Corporation,2012[2012-05-20].http://www.analog.com/en/processors-dsp/products/adsp21xx_processor_architectural_overview/fca.html

      [10]路曉麗,葛偉,龔曉慶,等.軟件測試技術(shù)[M].北京:機械工業(yè)出版社,2007:32-46

      Lu Xiaoli,Ge Wei,Gong Xiaoqing,et al.Software testing technology[M].Beijing:China Machine Press,2007:32-46(in Chinese)

      [11]IBM Corporation.Rational logiscope[EB/OL].New York:IBM Corporation,2012[2012-06-20].http://www-01.ibm.com/software/awdtools/logiscope/

      [12]Wikipedia.Executable and linkable format[EB/OL].London:Wikipedia,2012[2012-06-25].http://en.wikipedia.org/wiki/Executable_and_Linkable_Format

      [13]Wikipedia.DWARF[EB/OL].London:Wikipedia,2012[2012-06-25].http://en.wikipedia.org/wiki/DWARF

      [14]Wikipedia.The common object file format[EB/OL].London:Wikipedia,2012[2012-06-30].http://en.wikipedia.org/wiki/COFF

      猜你喜歡
      仿真器測試工具嵌入式軟件
      邊緣智力兒童及其智力測試工具的研究進展
      Http并發(fā)連接測試工具
      實時嵌入式軟件的測試技術(shù)
      電子測試(2018年10期)2018-06-26 05:54:08
      全景相機遙控器嵌入式軟件V1.0 相關(guān)操作分析
      電子制作(2017年17期)2017-12-18 06:40:56
      基于多線程的慣導(dǎo)邏輯仿真器設(shè)計
      計算機工程(2015年4期)2015-07-05 08:28:57
      基于Eclipse的航天嵌入式軟件集成開發(fā)環(huán)境設(shè)計與實現(xiàn)
      航天嵌入式軟件浮點運算誤差分析與控制
      福祿克推出先進的連接式測試工具系統(tǒng)
      天文測量仿真器模擬星圖精度分析
      并行片上網(wǎng)絡(luò)仿真器ParaNSim的設(shè)計及性能分析
      菏泽市| 临夏县| 雅安市| 泾阳县| 庄浪县| 贵州省| 平度市| 凤阳县| 射阳县| 三江| 贡嘎县| 上蔡县| 军事| 伊春市| 兴文县| 修水县| 磐石市| 玛纳斯县| 夏津县| 富蕴县| 连南| 高州市| 毕节市| 前郭尔| 张家口市| 灵台县| 措勤县| 贡山| 潞城市| 资溪县| 邯郸县| 仁布县| 广安市| 鸡泽县| 札达县| 桓仁| 临海市| 田东县| 丰城市| 肥乡县| 清远市|