左蕓 張楊
摘要:目標碼覆蓋測試是星載嵌入式軟件測試過程的關(guān)鍵步驟,能夠進一步保證軟件測試的完整性和充分性。VTest測試工具模擬嵌入式虛擬測試平臺,導入被測源代碼,VTest自動分析源代碼的函數(shù)信息,對程序目標碼進行插樁,執(zhí)行目標碼程序,統(tǒng)計目標碼程序語句和分支覆蓋信息,分析目標碼的執(zhí)行情況,進一步提升星載嵌入式軟件質(zhì)量。
關(guān)鍵詞:VTest;目標碼;覆蓋率;嵌入式軟件
中圖分類號:TP311? ? 文獻標識碼:A? ? ?文章編號:1007-9416(2018)10-0000-00
1引言
近年來我國衛(wèi)星技術(shù)發(fā)展迅速,為人類帶來了巨大的社會和經(jīng)濟效益。目前使用的導航衛(wèi)星使用壽命都在十年以上,要求星載軟件在太空正常運行時間長,這樣對于星載嵌入式軟件的可靠性和安全性有著極高的要求,促使航天星載軟件在各個開發(fā)階段都需要經(jīng)過完整嚴格的測試。軟件覆蓋測試是驗證軟件功能、處理流程正確性的一種重要的方法和手段。傳統(tǒng)的覆蓋率測試是源代碼級別的測試執(zhí)行和覆蓋信息統(tǒng)計,但是隨著航天技術(shù)的發(fā)展,航天產(chǎn)品功能越來越強大,航天軟件設計也越來越復雜,越來越多的軟件采用C語言或高級語言編制,高級語言需要轉(zhuǎn)換成目標碼在才能在處理機上運行。隨著C語言和其他高級語言編制的軟件越來越多,源代碼和目標碼差異產(chǎn)生的問題的幾率也就越來越大。編譯器不同、編譯選項的不同都會產(chǎn)生不同的目標碼程序,因此對高安全等級的星載嵌入式軟件進行目標碼語句和分支覆蓋測試,才能滿足完全高安全等級軟件測試覆蓋的要求。
2虛擬平臺構(gòu)建
嵌入式軟件編譯器的編譯過程和優(yōu)化技術(shù)會導致產(chǎn)生的目標碼與源代碼之間非100%對應,因此需要借助測試工具插樁和統(tǒng)計。VTest測試工具可以進行目標碼覆蓋率測試。VTest平臺中的各種仿真模型都可以封裝成獨立的Windows動態(tài)鏈接庫,以便于通過“搭建”的方式快速構(gòu)建虛擬目標系統(tǒng)。VTest中已建立了常用的嵌入式處理器,如80x86、TSC695、TI C3X、ADSP21020/60、8031/32、AT697的CPU模擬器模型庫、以及常用的芯片仿真模型庫,如8252、CAN總線、1553芯片等。在構(gòu)建虛擬目標系統(tǒng)時,從已有的仿真模型庫中選取所需的模型庫,并進行必要的配置連接即可,避免了重復開發(fā)工作。
在進行目標碼測試之前,需要事先知悉被測的軟件的運行芯片、外部接口類型、開始運行地址、主頻、內(nèi)存使用范圍等信息。VTest為用戶提供圖形化方式構(gòu)建虛擬系統(tǒng),本次例舉的軟件為AT697F芯片上運行軟件,開發(fā)環(huán)境為Eclipse,編程語言為C語言。在VTest中新建項目,選擇芯片型號“AT697F”,在芯片屬性設置中設置主頻,項目名,項目版本,檢查文件日期,設置目標文件為被測軟件的elf,選擇解析庫,選擇全部的源文件路徑,保存設置的項目信息。
項目信息設置完成后選擇菜單“調(diào)試->開始調(diào)試/結(jié)束調(diào)試”進入調(diào)試狀態(tài),如果前期設置步驟均正確,則可在調(diào)試框中查看到“創(chuàng)建虛擬機成功”的提示。如果創(chuàng)建不成功,則提示相應的錯誤原因。如圖1所示。
3目標碼覆蓋測試過程
在VTest中成功建立AT697F虛擬測試平臺后即可開展下一步測試工作。VTest主界面是標準的windows多窗口樣式,主界面頂部包含菜單欄、工具欄,界面中間部分是源代碼編輯/顯示窗口,其它還包括工作區(qū)、寄存器、函數(shù)調(diào)用棧、函數(shù)統(tǒng)計、代碼追蹤、變量顯示、信息輸出等調(diào)試輔助窗口。這些窗口可以根據(jù)個人需要打開和關(guān)閉,可以自行拖放并調(diào)整其顯示位置和大小。根據(jù)源代碼文件路徑導入的源程序,VTest自動分析C語言源程序所有的函數(shù)信息,并在對應源文件下展現(xiàn)其列表。用戶雙擊函數(shù)名稱時,工具自動打開源代碼文件窗口并將光標定位至相應函數(shù)開始的位置。在VTest的項目信息上查看工程的源代碼文件,選擇被測函數(shù),以Frame_ACK函數(shù)為例,右鍵選擇“匯合匯編模式”可以查看目標碼,VTest顯示窗口以列表形式顯示目標軟件的反匯編代碼,所有目標代碼根據(jù)地址自小至大進行排列,依次顯示目標碼地址、目標碼數(shù)據(jù)值以及反匯編字符串。如圖2所示。
CPU模擬器處于停止狀態(tài)時,可對寄存器值進行修改,直接點擊需修改的寄存器值,進入文本編輯模式后輸入數(shù)值并按回車即可。寄存器數(shù)值本次執(zhí)行改變時,窗口中寄存器數(shù)值采用紅色文本高亮顯示。在寄存器中選擇NPC,寫入下一次需要運行到的地址,這樣程序可以快速運行至設置的地址,工具也提供單步運行的方式運行目標碼程序。
VTest判斷當前正在執(zhí)行的函數(shù),自動添加函數(shù)中的全部局部變量以及函數(shù)參數(shù),變量監(jiān)視窗口中,運行過程中不可刪除和添加變量,也不可更改變量值信息,只能顯示局部變量信息。運行函數(shù)前,根據(jù)實際情況分別設置參數(shù)值分別運行TRUE分支和FLASE分支,運行完相應分支后,將覆蓋信息輸出保存為后綴名為.cox的覆蓋文件。多次執(zhí)行可以保存多個覆蓋信息文件。如圖3所示。
4目標碼覆蓋率信息查看
使用覆蓋統(tǒng)計工具UCA.exe查看覆蓋信息文件和覆蓋統(tǒng)計報告,查看目標碼覆蓋信息需要被測軟件信息、處理器信息、目標碼信息。在UCA工具中打開VTest工程,添加源程序文件,設置主頻,添加擴展名為.cox的覆蓋文件,統(tǒng)計并輸出報告。覆蓋率報告生成后,UCA自動打開目標文件覆蓋率統(tǒng)計報告。覆蓋率報告分4部分組成,第一部分是項目的基本信息,包括項目名稱、版本、覆蓋率統(tǒng)計時間、所統(tǒng)計的覆蓋率文件列表等;第二部分是覆蓋率總體情況概述,包括項目總語句分支數(shù)及覆蓋率表格;第三部分是函數(shù)覆蓋率統(tǒng)計,使用柱狀圖顯示每個函數(shù)的語句分支覆蓋率;第四部分是目標碼反匯編覆蓋率詳情。覆蓋統(tǒng)計報告顯示所有函數(shù)的目標碼語句和分支的目標碼覆蓋信息,選擇單個函數(shù)可以查看單個函數(shù)的具體覆蓋信息。
已經(jīng)執(zhí)行過的目標碼語句句首以“EXECUTED”顯示,未執(zhí)行語句句首以紅色“NOTEXECU”進行區(qū)分,方便用戶定位特定目標碼地址覆蓋率的覆蓋原因,以便于用戶分析用例的執(zhí)行情況。進行目標碼覆蓋率統(tǒng)計時可添加多個后綴名為.cox的覆蓋文件,測試工具將統(tǒng)計各個覆蓋文件的覆蓋信息,并顯示最終的目標碼覆蓋情況。如圖4所示。
5 結(jié)語
對于星載嵌入式軟件要求越來越嚴格的形勢下,對星載嵌入式軟件進行目標碼覆蓋測試是十分必要的。本文描述了VTest測試工具對星載嵌入式軟件目標碼覆蓋測試的過程和方法,采用測試工具虛擬目標平臺,加載被測星載嵌入式軟件,采用插樁的方法記錄程序語句和分支的執(zhí)行,使用統(tǒng)計工具查看目標碼的覆蓋信息,查看程序目標碼語句和分支的執(zhí)行情況,對已執(zhí)行和未執(zhí)行的目標碼進行分析和研究,完成對星載嵌入式軟件的目標碼覆蓋測試。
參考文獻
[1]楊芳,賀紅衛(wèi),謝鵬,饒京宏.嵌入式軟件目標碼仿真測試平臺的研究與設計[J].計算機工程與設計,2009,30(19):4364-4367.
[2]黃晨,董燕,于倩,虞礪琨.基于目標碼的測試覆蓋不可達分析方法[J].測控技術(shù),2017,(36):100-103+107.
[3]王永孟,馬利東.嵌入式軟件目標碼測試分析[J].科技經(jīng)濟市場,2009,(4):12+11.
[4]喬文軍.嵌入式軟件測試平臺的研究與實現(xiàn)[D].南京航空航天大學,2007.
[5]劉穎,王英,劉漫丹.嵌入式軟件測測試覆蓋[J].自動化儀表,2012,33(6):63-66
[6]孫隴平.嵌入式軟件覆蓋率測試的研究與應用[J].現(xiàn)代電子技術(shù),2014,37(18):67-69.
The Spaceborne Embedded Software Object Code Coverage Testing based on VTest
ZUO Yun, ZHANG Yang
(China Electronics Technology Group Corporation Thirty-two Institute, Shanghai 201808)
Abstract: Test coverage based on object code is a key step of spaceborne embedded software testing process, it can ensure the integrity and adequacy of the test. Test tool of VTest can simulate the embedded virtual test platform, it can import the source code, it can automatically analyze the function information of source code, the pile foundation is inserted into object code, execute object code, count the statement and branch coverage based on object code, analysis of object code execution, it can help to further improve the spaceborne embedded software quality.
Key words: VTest; object code; coverage; embedded software