張 翔 彭 琿 張曉娜 金朋飛
(復(fù)雜電磁環(huán)境效應(yīng)國家重點(diǎn)實(shí)驗(yàn)室,河南 洛陽 471003)
隨著人們對(duì)嵌入式設(shè)備的功能多樣化的要求和行為智能化的期望,嵌入式軟件作為嵌入式設(shè)備的“大腦”,軟件復(fù)雜度將更高,規(guī)模將更大,如何更準(zhǔn)、更快、更高效地對(duì)嵌入式軟件測試,是擺在嵌入式軟件測試行業(yè)的首要問題。為更好地進(jìn)行嵌入式軟件的測試,測試環(huán)境的構(gòu)建是測試工作的重要基礎(chǔ)。
嵌入式軟件的實(shí)時(shí)性、嵌入性和反應(yīng)性特點(diǎn)[1],使得軟件測試面臨更多的困難。因此,根據(jù)不同種類的嵌入式軟件運(yùn)行的需求,構(gòu)建正確有效的測試環(huán)境是保證測試過程順利進(jìn)行,提高測試效率,保證測試質(zhì)量的基礎(chǔ)。實(shí)踐過程中,測試人員需根據(jù)嵌入式軟件的特點(diǎn)搭建相應(yīng)的測試環(huán)境,主要分為:仿真測試環(huán)境、交叉測試環(huán)境和插樁環(huán)境[2]。在嵌入式軟件測試過程中,仿真測試技術(shù)提高了測試效率,縮短了測試周期,加強(qiáng)了嵌入式軟件測試的充分性和全面性。
由于嵌入式設(shè)備種類的多樣性和運(yùn)行環(huán)境的不同,使得嵌入式軟件測試環(huán)境的構(gòu)建必須根據(jù)實(shí)際條件選擇合適的策略方法。目前三種產(chǎn)生方式即真實(shí)、純軟件虛擬、硬件和軟件結(jié)合的半實(shí)物,嵌入式仿真測試環(huán)境包括全實(shí)物仿真測試環(huán)境、半實(shí)物仿真測試環(huán)境和全數(shù)字仿真測試環(huán)境三類[3]。
全實(shí)物仿真測試環(huán)境直接將嵌入式軟件運(yùn)行所需要的整個(gè)系統(tǒng),包括目標(biāo)硬件平臺(tái)和其交聯(lián)的物理設(shè)備建立真實(shí)的連接,在實(shí)際運(yùn)行條件下對(duì)軟件進(jìn)行測試,測試框架如圖1所示。
圖1 嵌入式軟件全實(shí)物仿真測試環(huán)境框架
嵌入式軟件的開發(fā)環(huán)境安裝在宿主機(jī),開發(fā)人員利用開發(fā)工具完成后,通過仿真軟件調(diào)試,而嵌入式軟件最終實(shí)際工作運(yùn)行在目標(biāo)機(jī)上。測試方法通常是外接一些測試輔助設(shè)備,比如:示波器、邏輯分析儀等。示波器是應(yīng)用廣泛的電子測量儀器,通過示波器測量目標(biāo)機(jī)電信號(hào),轉(zhuǎn)化成波形圖像,測試人員分析信號(hào)幅度、周期、頻率和相位等參數(shù),與目標(biāo)機(jī)的期望信號(hào)進(jìn)行分析對(duì)比。邏輯分析儀的主要作用是時(shí)序判定,測試人員需要設(shè)定不同的邏輯條件,實(shí)時(shí)記錄內(nèi)存訪問行為,通常采用統(tǒng)計(jì)采樣的方式進(jìn)行測試。
全實(shí)物仿真測試側(cè)重于被測系統(tǒng)與其交聯(lián)設(shè)備的接口進(jìn)行測試,是整個(gè)軟件系統(tǒng)和硬件系統(tǒng)總體運(yùn)行情況的全面測試,是適用于系統(tǒng)測試階段采取的測試方法。
半實(shí)物仿真測試環(huán)境是被測軟件運(yùn)行在真實(shí)目標(biāo)硬件上,而與之連接的交互設(shè)備用仿真模型來替代,利用仿真模型模擬被測軟件的整體運(yùn)行環(huán)境。測試環(huán)境主要模擬在真實(shí)環(huán)境中與被測軟件有數(shù)據(jù)交互的輸入和輸出關(guān)系,并能通過外部仿真模型控制對(duì)被測軟件輸入信號(hào),也可以接收被測軟件的輸出信號(hào)并實(shí)時(shí)分析和記錄。交聯(lián)仿真模型為目標(biāo)硬件提供激勵(lì)信號(hào)輸入,接收并處理目標(biāo)硬件的輸出數(shù)據(jù),進(jìn)行對(duì)被測軟件自動(dòng)、實(shí)時(shí)、非侵入性的閉環(huán)測試。但是并不是所有的交聯(lián)設(shè)備都必須構(gòu)建仿真模型,可以隨著項(xiàng)目的進(jìn)展以及根據(jù)外設(shè)的復(fù)雜性,有選擇性地加入真實(shí)外部設(shè)備[4]。
嵌入式軟件半實(shí)物仿真測試環(huán)境通常可實(shí)現(xiàn)對(duì)被測系統(tǒng)進(jìn)行接口測試、功能測試和性能測試等。利用搭建好的仿真環(huán)境模擬被測系統(tǒng)在真實(shí)運(yùn)行環(huán)境中的輸入,乃至從邊界條件、極端條件等不同情況下可能出現(xiàn)的輸入,在運(yùn)行過程對(duì)被測系統(tǒng)進(jìn)行全面的測試,從而盡可能在正式交付前發(fā)現(xiàn)嵌入式軟件的缺陷問題,提高嵌入式軟件的可靠性。半實(shí)物仿真測試環(huán)境的形式可能多種多樣,但基本的實(shí)現(xiàn)體系結(jié)構(gòu)由上位機(jī)、下位機(jī)和被測系統(tǒng)構(gòu)成,在一些情況下可能還包含部分與被測硬件交聯(lián)的設(shè)備。
嵌入式軟件半實(shí)物仿真測試環(huán)境的工作原理和結(jié)構(gòu)如圖2所示,上位機(jī)和下位機(jī)之間通過TCP/IP協(xié)議交互,下位機(jī)通過總線、AD/DA轉(zhuǎn)換接口,串口和USB接口等不同板卡接口與被測系統(tǒng)通信。
圖2 嵌入式軟件半實(shí)物仿真測試環(huán)境結(jié)構(gòu)圖
3.1 全數(shù)字仿真測試環(huán)境框架
全數(shù)字仿真測試環(huán)境是指將被測軟件運(yùn)行的目標(biāo)硬件全部以仿真的方式進(jìn)行替代,還包括有交互關(guān)系的外圍設(shè)備。全數(shù)字仿真環(huán)境在宿主機(jī)上構(gòu)造嵌入式軟件運(yùn)行所硬件環(huán)境,硬件功能全部由仿真模型替代,被測軟件的測試過程全部在計(jì)算機(jī)上完成,無須被測系統(tǒng)硬件參與。
嵌入式軟件全數(shù)字仿真測試環(huán)境基本框架如圖3所示,被測軟件可以是源代碼也可以是目標(biāo)碼,嵌入式軟件測試的主要對(duì)象是目標(biāo)碼,目標(biāo)碼導(dǎo)入虛擬目標(biāo)機(jī)中運(yùn)行,測試過程由測試控制端管理和控制。測試控制端進(jìn)行外設(shè)建模仿真、測試用例生成,測試腳本載入、測試數(shù)據(jù)采集記錄和測試結(jié)果分析等功能。通常可為測試環(huán)境配置各種模型庫,增強(qiáng)測試用例、外設(shè)仿真模型、嵌入式處理器模型庫的復(fù)用性,減少測試過程重復(fù)性工作,提高軟件測試效率。
圖3 嵌入式軟件全數(shù)字仿真測試環(huán)境框架圖
3.2 全數(shù)字仿真測試環(huán)境關(guān)鍵實(shí)現(xiàn)技術(shù)
3.2.1 嵌入式處理器仿真技術(shù)。利用仿真技術(shù)實(shí)現(xiàn)全數(shù)字嵌入式軟件測試環(huán)境構(gòu)建的一個(gè)核心技術(shù)就是處理器的仿真,嵌入式處理器的仿真實(shí)際上是相應(yīng)嵌入式處理器指令集的仿真,即指令集仿真器,是用軟件模擬一個(gè)處理器上程序執(zhí)行過程的軟件工具,它建立了處理器的仿真模型,通過模擬每條指令在目標(biāo)處理器上的執(zhí)行效果來模擬執(zhí)行被測程序。
指令集仿真器的實(shí)現(xiàn)方式主要分為解釋型和編譯型兩類。解釋型方式是對(duì)每條目標(biāo)機(jī)機(jī)器指令按照取指、譯碼、本地執(zhí)行的流程進(jìn)行處理和執(zhí)行。編譯型方式是將目標(biāo)處理器的可執(zhí)行二進(jìn)制機(jī)器指令整體直接編譯為本地機(jī)器的二進(jìn)制機(jī)器指令,然后統(tǒng)一執(zhí)行。兩種方式各有優(yōu)缺點(diǎn),解釋型設(shè)計(jì)實(shí)現(xiàn)簡單,可控性好,但執(zhí)行速度較慢。編譯型執(zhí)行速度快,但可控性和可移植性較差。
3.2.2 外設(shè)仿真及故障定位。被測軟件的目標(biāo)機(jī)硬件通常只是真實(shí)系統(tǒng)中的一部分,外圍設(shè)備環(huán)境為軟件運(yùn)行提供必要的資源。全數(shù)字仿真測試環(huán)境要模擬被測軟件的整個(gè)運(yùn)行系統(tǒng),與目標(biāo)硬件產(chǎn)生數(shù)據(jù)交互連接的外部設(shè)備同樣通過仿真模型的方式實(shí)現(xiàn)。全數(shù)字仿真測試環(huán)境外圍設(shè)備仿真與半實(shí)物交聯(lián)設(shè)備仿真的主要不同點(diǎn)是,半實(shí)物的交聯(lián)設(shè)備仿真模型最終通過硬件接口將信號(hào)傳入真實(shí)的被測硬件系統(tǒng),而全數(shù)字仿真都是以軟件方式實(shí)現(xiàn),即通過建立硬件接口的仿真模型實(shí)現(xiàn)信號(hào)傳輸過程的模擬。由于運(yùn)行在宿主機(jī)平臺(tái),不受目標(biāo)機(jī)硬件資源制約,可以對(duì)不同故障類型下軟件進(jìn)行充分測試,相比硬件更容易實(shí)現(xiàn)故障定位和復(fù)現(xiàn)。
3.2.3 調(diào)試與測試。調(diào)試通常由測試人員使用調(diào)試工具進(jìn)行,使用調(diào)試器可以對(duì)虛擬目標(biāo)機(jī)和被測軟件的運(yùn)行狀態(tài)進(jìn)行控制和查看。通過調(diào)試器設(shè)置運(yùn)行斷點(diǎn),記錄運(yùn)行中的某一時(shí)刻寄存器中的數(shù)據(jù),記錄函數(shù)執(zhí)行的時(shí)間和覆蓋率等。良好的調(diào)試器可以測試人員提供更加靈活的測試,在運(yùn)行過程中隨時(shí)產(chǎn)生指定故障,隨時(shí)采集指定數(shù)據(jù),查看并修改寄存器的值,隨時(shí)可對(duì)已執(zhí)行代碼進(jìn)行覆蓋率分析等功能,并且在獲取狀態(tài)后不影響被測軟件的繼續(xù)運(yùn)行。普通的調(diào)試器設(shè)置斷點(diǎn)是使用指令替換的方式,在斷點(diǎn)處獲得程序執(zhí)行過程中的內(nèi)部狀態(tài)信息。但如果軟件中存在將指令本身作為數(shù)據(jù)輸入的功能,例如,計(jì)算自身校驗(yàn)和,則計(jì)算校驗(yàn)和的輸入就會(huì)隨著斷點(diǎn)的設(shè)置而發(fā)生改變,從而影響被測軟件的運(yùn)行,這和軟件插樁技術(shù)面臨的問題是相同的。
全數(shù)字仿真測試環(huán)境有較高的靈活性和可控性,能夠?qū)崿F(xiàn)各種異常數(shù)據(jù)和異常狀態(tài)的輸入,對(duì)測試用例的支持較好,不受目標(biāo)硬件及其外圍設(shè)備的限制。同時(shí)也要認(rèn)識(shí)到全數(shù)字仿真測試環(huán)境無法替代真實(shí)硬件,如果仿真的完整性和準(zhǔn)確性差,則無法反映出真實(shí)系統(tǒng)的實(shí)時(shí)特性,就無法完成與硬件時(shí)序特性聯(lián)系緊密的測試。
本文整理分析了嵌入式軟件仿真測試環(huán)境構(gòu)建的類型和方法,梳理了每種測試環(huán)境框架的適用場景和優(yōu)缺點(diǎn),可為測試人員構(gòu)建仿真測試環(huán)境提供參考和借鑒。測試用例和測試腳本的自動(dòng)生成等技術(shù)促使軟件測試的自動(dòng)化程度不斷增強(qiáng),逐步向智能化測試發(fā)展,并且使通用化進(jìn)一步加強(qiáng)。隨著嵌入式軟件自動(dòng)化測試框架的不斷豐富,嵌入式軟件測試方法技術(shù)會(huì)不斷完善發(fā)展,尤其隨著大數(shù)據(jù)、深度學(xué)習(xí)技術(shù)在測試領(lǐng)域深入應(yīng)用,會(huì)出現(xiàn)越來越多的測試方法和測試工具,提高測試人員的效率和改善測試的效果。