齊齊樂
(中國航空工業集團公司金城南京機電液壓工程研究中心,江蘇南京,211000)
計算機軟件在開發的過程中難免會存在BUG,而BUG的存在不僅會影響軟件運行的速率,還會降低軟件使用的體驗感。為了解決計算機軟件開發過程中遺留的BUG問題,需要采用嵌入式軟件對原設計軟件進行不足。由于嵌入式軟件本身的意義在于不足原開發軟件的不足,其設計需求也與原設計元件保持一致。嵌入式軟件相對于一般的計算機軟件的開發流程更加復雜,難度更高,需要綜合考慮硬件和軟件的條件,并結合二者的關系進行軟件細節的優化。嵌入式軟件作為計算機系統不可缺少的一部分,其本身要求有強實時性,且軟件測試只能在計算機運行的特定目標機上進行測試,只能采用更底層的語言或匯編語言進行編寫,因此測試和維護的難度極高。研究嵌入式計算機軟件測試的關鍵技術對提升嵌入式計算機軟件系統運行的穩定性有著重要的意義。
嵌入式軟件指嵌入式計算機系統中的軟件。它的運行建立在一定的硬件平臺,對專用性及運行開的環境要求極高。嵌入式軟件測試具有以下特點:(1)嵌入式軟件測試包含幾乎全部的專用計算機外部設備;(2)嵌入式元件運行平臺及系統常因沒有一般的外部設備而很難在測試古城中進行檢測及觀察,如沒有顯示、打印、鍵盤及存儲設備等;(3)嵌入式軟件的強實時性要求使輸出僅在某個有限的時間內完成,且必須在該時間段內生效;(4)嵌入式軟件可能存在以上交互因素,增加測試的難度。
靜態測試法是宿主機測試技術常用的方法之一。這種測試方法方便測試人員明確及理解程序邏輯,也有利于幫助開發者審視開發過程。在講述測試流程中易于幫助開發著發現問題。靜態測試法的流程如下:靜態測試的技術準備→編程人員向測試小組介紹UR案件思路及內容→測試人員查找缺陷→確定有無疑問。有疑問時測試人員與編程人員進行問題討論及確認。當確定有問題存在時及時排除,沒有問題時重新進入測試人員查找缺陷,重復以上流程。確定沒有疑問時由測試人員提出嚴謹性建議→記錄測試過程并更新軟件文檔→結束測試。
采用靜態測試方法測試函數結構時,可以借助一系列規則從程序推導出流程模型圖,再將其與設計文檔流圖對比,校驗設計與源代碼的一致性。通過對流圖的走查,以及應用邏輯覆蓋、分支覆蓋、分支覆蓋、路徑覆蓋的方法測試函數的健壯性,最后對函數結構做封閉性測試。
在采用靜態方法測試細節及專項檢查時,需憑借測試人員豐富的經驗羅列錯誤清單,并依次執行清單所列問題錯誤的檢查。常見的專項錯誤清單如下:(1)數組下表有無越界,變量值有無越界;(2)有無依賴程序設計語言中的缺省值代碼;(3)除數有無可能為零;(4)浮點數運算有無分析檢查;(5)棧有無溢出;(6)用過的內存有無釋放;(7)函數的引用中變量類型與個數有無對應;(8)全局變量的使用有無必要;(9)代碼有無包含無窮循環;(10)遞歸有無存在問題等等。
動態測試法也是宿主機測試技術常用的方法之一。動態測試技術是以軟件代碼的動態執行能力為基礎。它需要對代碼的覆蓋率、內存分配使用信息等進行全面的分析。測試軟件代碼在測試執行時的狀態就是代碼覆蓋率。提升嵌入式軟件測試的有效性就需要通過加強代碼覆蓋率的監控,以便全面及時的掌握測試力度及進度,精準的識別是否存在被遺漏的測試數據。代碼覆蓋率的計算指標包含語句覆蓋、分支/判定覆蓋及MC/DC。內存分配信息需要關注每個函數、內存分配點的內存分配及釋放情況,并實時監控動態內存分配中的錯誤。動態法內存分配信息具有識別內存遺漏BUG的優點,它是內存分配優化的依據。
仿真機測試技術能夠通過真實仿真模擬目標機功能及性能,采集真實的物理性能監測結果。它是宿主機與目標測試機的紐帶。其中的關鍵技術包含嵌入式仿真技術、測試數據獲取技術。嵌入式仿真技術是以局域網為基礎建立的數據集中性管理及處理系統。仿真系統由仿真機、軟件測試控制模板、總線仿真及總線監控模板、測試結果分析工具、I/O系統、實時調度模板等。其中以仿真測評控制技術應用最為廣泛。通過對計算機硬件及系統做仿真測試,模擬現場總線系統數據,依據測試主體分析電信號激勵仿真源,測定和分析現場總線的運行情況。仿真分析利用了人機交互界面控制實時在線測評平臺設備,用于對嵌入式軟件進行測試。
該技術以目標機測試為主,用于評估真實的物理目標機,從而對嵌入式軟件及系統的交互性、可靠性、穩定性做專門的獲取。該技術常用故障注入、內存分析、性能分析的方法分析物理目標測試機的性能。其中故障注入技術能便于進行系統邊界測試、容錯性測試、魯棒性測試、強度性測試等。內存分析技術用于處理動態內存分配中存在的不足,常用分析手段有硬件分析、軟件分析。以上測試技術各有優劣。基于硬件的內存分析方法測試的精準度更高,但測試價格較高。而基于軟件的內存分析方法性價比更高,但代碼性能在測試中易受操作干擾,測試執行中對性能分析是消耗的時間更長。性能分析工具聯合調試工具,并引導開發人員進行函數結構優化,對系統調用錯誤等進行補足,更有利在執行測試過程中發現代碼遺漏問題,提高嵌入式軟件測試的精確度。
上文已提到,關于宿主機測試的兩種方法。靜態測試法需要優先對所有數據做分析,并通過監測實時追蹤源代碼,根據源代碼繪制出程序邏輯圖及嵌入式計算機系統軟件對應的程序結構框圖。它的優點在于邏輯圖、框架圖、流程圖之間可隨意轉換,便于加強對遺漏代碼的檢測與及系統錯誤的識別,降低人工測試的錯誤率,同時還有利于提高嵌入式軟件測試的效率。應用靜態測試技術測試硬件設備及系統運行情況時,并不需要對媒體設備做測試,而知需要依據數據分析系統BUG即可。因此,靜態測試技術還有利于縮短嵌入式計算機軟件測試時間,便于執行操作的優勢。動態測試法的借助軟件代碼,通過尋找軟件代碼中執行問題來確定嵌入式計算機軟件系統中的問題及缺陷,并提供針對性的調整。在采用動態測試技術做嵌入式軟件測試時,必須注意對源代碼完整的分析,以確保嵌入式軟件系統錯誤檢測的完整性。此外,還可以配合對函數結構的分析,來確定函數結構中各元素的分配情況,并根據內存將函數元素的分配展示出來。
嵌入式計算機軟件測試難度大的主要原因在于一般的測試技術及測試工具的實施缺乏基本的條件。
(1)加強真實硬件運行情況的監測
在對嵌入式系統真實硬件運行情況進行監測時,可以采用某種對目標機及宿主機都適用的編譯器高級語言,來生成宿主機代碼在宿主機上進行目標程序的運行和測試。執行廁所時,需要認真評估目標機與宿主機的差異,并注意存在的問題,如算法字長等問題。宿主機上測試的正確運行智能作為測試在目標機上正確運行的參考依據?;虿捎弥噶罘抡嫫骷訌妼φ鎸嵱布\行情況的監測。使用指令仿真器監測的手段一般適用與沒有目標機外圍設備仿真,或沒有實際外圍設備及不涉及或少涉及時間的情況。
(2)采用實時性測試及交互式測試聯用
執行嵌入式計算機軟件系統測試時可采用實時性系統測試聯用交互式測試的方式。實時系統測試先需確定功能是否正確,再確定時間師傅正確。通過對功能、時間正確性的判定,來解決嵌入式系統測試執行時間延長而不滿滿足實時性要求的問題。對目標機硬件測試,仍可借助指令仿真器或高級語言編譯器來實現。單元和集成測試則不適用于在目標硬件上實行實時測試。在交互式軟件測試時,可用文件模擬字符序列的輸入,程序運行時從文件讀入字符就如同從交互式硬件上輸入一樣。如鍵盤、鼠標測試。
(3)加強全數字仿真技術的應用
全數字仿真技術在解決綜合嵌入式軟件測試問題中環境帶來的測試困擾中應用優勢極為明顯。采用計算機仿真技術構造全入市軟件所需的硬件環境,即目標機。再仿真嵌入式軟件運行時所需的數據源。根據數據源特性及變化就可以確定嵌入式軟件的實際運行情況。
(4)專用設備問題及并發系統網絡通信問題的解決
專用設備的測試需要根據實際情況額定,如果專用設備已經可用,并能用來測試,可用實際設備進行測試。專用設備不能用于測試的情況,可借助某種軟件仿真所需要的設備來加速進程。在仿真困難的情況下,如傳感器噪聲特性、失效模式等情況下,需要考慮程序在仿真設備測試時運行的正確,以及在真實設備下運行時經常發生的錯誤。
嵌入式計算機軟件系統作為計算機系統的重要組成部分,其軟件測試是必不可少的。通過本文研究,確定軟如是計算機軟件測試系統的復雜性和難度,其根本原因受一般測試技術及測試工具缺乏實施條件所影響。想要解決軟件測試的難題,就必須測試技術及工具的研究,對原有的一般測試技術進行創新,并在原有的數據及系統基礎上完善,融合仿真機測試技術、目測機測試技術、宿主機測試技術,加強硬件及系統運行的監測,加強全仿真技術的應用,結合實際情況對目標機硬件及系統性能進行改善,以提升嵌入式計算機軟件系統在硬件及計算機系統下運行的流產性、可靠性及穩定性。