張 翔 彭 琿 張曉娜 金朋飛
(復雜電磁環境效應國家重點實驗室,河南 洛陽 471003)
隨著人們對嵌入式設備的功能多樣化的要求和行為智能化的期望,嵌入式軟件作為嵌入式設備的“大腦”,軟件復雜度將更高,規模將更大,如何更準、更快、更高效地對嵌入式軟件測試,是擺在嵌入式軟件測試行業的首要問題。為更好地進行嵌入式軟件的測試,測試環境的構建是測試工作的重要基礎。
嵌入式軟件的實時性、嵌入性和反應性特點[1],使得軟件測試面臨更多的困難。因此,根據不同種類的嵌入式軟件運行的需求,構建正確有效的測試環境是保證測試過程順利進行,提高測試效率,保證測試質量的基礎。實踐過程中,測試人員需根據嵌入式軟件的特點搭建相應的測試環境,主要分為:仿真測試環境、交叉測試環境和插樁環境[2]。在嵌入式軟件測試過程中,仿真測試技術提高了測試效率,縮短了測試周期,加強了嵌入式軟件測試的充分性和全面性。
由于嵌入式設備種類的多樣性和運行環境的不同,使得嵌入式軟件測試環境的構建必須根據實際條件選擇合適的策略方法。目前三種產生方式即真實、純軟件虛擬、硬件和軟件結合的半實物,嵌入式仿真測試環境包括全實物仿真測試環境、半實物仿真測試環境和全數字仿真測試環境三類[3]。
全實物仿真測試環境直接將嵌入式軟件運行所需要的整個系統,包括目標硬件平臺和其交聯的物理設備建立真實的連接,在實際運行條件下對軟件進行測試,測試框架如圖1所示。

圖1 嵌入式軟件全實物仿真測試環境框架
嵌入式軟件的開發環境安裝在宿主機,開發人員利用開發工具完成后,通過仿真軟件調試,而嵌入式軟件最終實際工作運行在目標機上。測試方法通常是外接一些測試輔助設備,比如:示波器、邏輯分析儀等。示波器是應用廣泛的電子測量儀器,通過示波器測量目標機電信號,轉化成波形圖像,測試人員分析信號幅度、周期、頻率和相位等參數,與目標機的期望信號進行分析對比。邏輯分析儀的主要作用是時序判定,測試人員需要設定不同的邏輯條件,實時記錄內存訪問行為,通常采用統計采樣的方式進行測試。
全實物仿真測試側重于被測系統與其交聯設備的接口進行測試,是整個軟件系統和硬件系統總體運行情況的全面測試,是適用于系統測試階段采取的測試方法。
半實物仿真測試環境是被測軟件運行在真實目標硬件上,而與之連接的交互設備用仿真模型來替代,利用仿真模型模擬被測軟件的整體運行環境。測試環境主要模擬在真實環境中與被測軟件有數據交互的輸入和輸出關系,并能通過外部仿真模型控制對被測軟件輸入信號,也可以接收被測軟件的輸出信號并實時分析和記錄。交聯仿真模型為目標硬件提供激勵信號輸入,接收并處理目標硬件的輸出數據,進行對被測軟件自動、實時、非侵入性的閉環測試。但是并不是所有的交聯設備都必須構建仿真模型,可以隨著項目的進展以及根據外設的復雜性,有選擇性地加入真實外部設備[4]。
嵌入式軟件半實物仿真測試環境通常可實現對被測系統進行接口測試、功能測試和性能測試等。利用搭建好的仿真環境模擬被測系統在真實運行環境中的輸入,乃至從邊界條件、極端條件等不同情況下可能出現的輸入,在運行過程對被測系統進行全面的測試,從而盡可能在正式交付前發現嵌入式軟件的缺陷問題,提高嵌入式軟件的可靠性。半實物仿真測試環境的形式可能多種多樣,但基本的實現體系結構由上位機、下位機和被測系統構成,在一些情況下可能還包含部分與被測硬件交聯的設備。
嵌入式軟件半實物仿真測試環境的工作原理和結構如圖2所示,上位機和下位機之間通過TCP/IP協議交互,下位機通過總線、AD/DA轉換接口,串口和USB接口等不同板卡接口與被測系統通信。

圖2 嵌入式軟件半實物仿真測試環境結構圖
3.1 全數字仿真測試環境框架
全數字仿真測試環境是指將被測軟件運行的目標硬件全部以仿真的方式進行替代,還包括有交互關系的外圍設備。全數字仿真環境在宿主機上構造嵌入式軟件運行所硬件環境,硬件功能全部由仿真模型替代,被測軟件的測試過程全部在計算機上完成,無須被測系統硬件參與。
嵌入式軟件全數字仿真測試環境基本框架如圖3所示,被測軟件可以是源代碼也可以是目標碼,嵌入式軟件測試的主要對象是目標碼,目標碼導入虛擬目標機中運行,測試過程由測試控制端管理和控制。測試控制端進行外設建模仿真、測試用例生成,測試腳本載入、測試數據采集記錄和測試結果分析等功能。通常可為測試環境配置各種模型庫,增強測試用例、外設仿真模型、嵌入式處理器模型庫的復用性,減少測試過程重復性工作,提高軟件測試效率。

圖3 嵌入式軟件全數字仿真測試環境框架圖
3.2 全數字仿真測試環境關鍵實現技術
3.2.1 嵌入式處理器仿真技術。利用仿真技術實現全數字嵌入式軟件測試環境構建的一個核心技術就是處理器的仿真,嵌入式處理器的仿真實際上是相應嵌入式處理器指令集的仿真,即指令集仿真器,是用軟件模擬一個處理器上程序執行過程的軟件工具,它建立了處理器的仿真模型,通過模擬每條指令在目標處理器上的執行效果來模擬執行被測程序。
指令集仿真器的實現方式主要分為解釋型和編譯型兩類。解釋型方式是對每條目標機機器指令按照取指、譯碼、本地執行的流程進行處理和執行。編譯型方式是將目標處理器的可執行二進制機器指令整體直接編譯為本地機器的二進制機器指令,然后統一執行。兩種方式各有優缺點,解釋型設計實現簡單,可控性好,但執行速度較慢。編譯型執行速度快,但可控性和可移植性較差。
3.2.2 外設仿真及故障定位。被測軟件的目標機硬件通常只是真實系統中的一部分,外圍設備環境為軟件運行提供必要的資源。全數字仿真測試環境要模擬被測軟件的整個運行系統,與目標硬件產生數據交互連接的外部設備同樣通過仿真模型的方式實現。全數字仿真測試環境外圍設備仿真與半實物交聯設備仿真的主要不同點是,半實物的交聯設備仿真模型最終通過硬件接口將信號傳入真實的被測硬件系統,而全數字仿真都是以軟件方式實現,即通過建立硬件接口的仿真模型實現信號傳輸過程的模擬。由于運行在宿主機平臺,不受目標機硬件資源制約,可以對不同故障類型下軟件進行充分測試,相比硬件更容易實現故障定位和復現。
3.2.3 調試與測試。調試通常由測試人員使用調試工具進行,使用調試器可以對虛擬目標機和被測軟件的運行狀態進行控制和查看。通過調試器設置運行斷點,記錄運行中的某一時刻寄存器中的數據,記錄函數執行的時間和覆蓋率等。良好的調試器可以測試人員提供更加靈活的測試,在運行過程中隨時產生指定故障,隨時采集指定數據,查看并修改寄存器的值,隨時可對已執行代碼進行覆蓋率分析等功能,并且在獲取狀態后不影響被測軟件的繼續運行。普通的調試器設置斷點是使用指令替換的方式,在斷點處獲得程序執行過程中的內部狀態信息。但如果軟件中存在將指令本身作為數據輸入的功能,例如,計算自身校驗和,則計算校驗和的輸入就會隨著斷點的設置而發生改變,從而影響被測軟件的運行,這和軟件插樁技術面臨的問題是相同的。
全數字仿真測試環境有較高的靈活性和可控性,能夠實現各種異常數據和異常狀態的輸入,對測試用例的支持較好,不受目標硬件及其外圍設備的限制。同時也要認識到全數字仿真測試環境無法替代真實硬件,如果仿真的完整性和準確性差,則無法反映出真實系統的實時特性,就無法完成與硬件時序特性聯系緊密的測試。
本文整理分析了嵌入式軟件仿真測試環境構建的類型和方法,梳理了每種測試環境框架的適用場景和優缺點,可為測試人員構建仿真測試環境提供參考和借鑒。測試用例和測試腳本的自動生成等技術促使軟件測試的自動化程度不斷增強,逐步向智能化測試發展,并且使通用化進一步加強。隨著嵌入式軟件自動化測試框架的不斷豐富,嵌入式軟件測試方法技術會不斷完善發展,尤其隨著大數據、深度學習技術在測試領域深入應用,會出現越來越多的測試方法和測試工具,提高測試人員的效率和改善測試的效果。