嵌入式軟體的測試方法
由於嵌入式系統的自身特點,如實時性(Real-timing),記憶體不豐富,I/O通道少,開發工具昂貴,並且與硬體緊密相關CPU種類繁多,等等。嵌入式軟體的開發和測試也就與一般商用軟體的開發和測試策略有了很大的不同,可以說嵌入式軟體是最難測試的一種軟體。嵌入式軟體測試使用有效的測試策略是唯一的出路,它可以使開發的效率最大化,避免目標系統的瓶頸,使用線上模擬器節省昂貴的目標資源。
一般來說,軟體測試有7個基本階段,即單元或模組測試、整合測試、外部功能測試、迴歸測試、系統測試、驗收測試、安裝測試。嵌入式軟體測試在4個階段上進行,即模組測試、整合測試、系統測試、硬體/軟體整合測試。前3個階段適用於任何軟體的測試,硬體/軟體整合測試階段是嵌入式軟體所特有的,目的是驗證嵌入式軟體與其所控制的硬體裝置能否正確地互動。
1. 白盒測試與黑盒測試
一般來說,軟體測試有兩種基本的方式,即白盒測試方法與黑盒測試方法,嵌入式軟體測試也不例外。
白盒測試或基於程式碼的測試檢查程式的內部設計。根據原始碼的組織結構查詢軟體缺陷,一般要求測試人員對軟體的結構和作用有詳細的瞭解。白盒測試與程式碼覆蓋率密切相關,可以在白盒測試的同時計算出測試的程式碼覆蓋率,保證測試的充分性。把100%的程式碼都測試到幾乎是不可能的,所以要選擇最重要的程式碼進行白盒測試。由於嚴格的安全性和可靠性的要求,嵌入式軟體測試同非嵌入式軟體測試相比,通常要求有更高的程式碼覆蓋率。對於嵌入式軟體,白盒測試一般不必在目標硬體上進行,更為實際的方式是在開發環境中通過硬體模擬進行,所以選取的測試工具應該支援在宿主環境中的測試。
黑盒測試在某些情況下也稱為功能測試。這類測試方法根據軟體的用途和外部特徵查詢軟體缺陷,不需要了解程式的內部結構。黑盒測試最大的優勢在於不依賴程式碼,而是從實際使用的角度進行測試,通過黑盒測試可以發現白盒測試發現不了的問題。因為黑盒測試與需求緊密相關,需求規格說明的質量會直接影響測試的結果,黑盒測試只能限制在需求的範圍內進行。在進行嵌入式軟體黑盒測試時,要把系統的預期用途作為重要依據,根據需求中對負載、定時、效能的要求,判斷軟體是否滿足這些需求規範。為了保證正確地測試,還須要檢驗軟硬體之間的介面。嵌入式軟體黑盒測試的一個重要方面是極限測試。在使用環境中,通常要求嵌入式軟體的失效過程要平穩,所以,黑盒測試不僅要檢查軟體工作過程,也要檢查軟體失效過程。
2. 目標環境測試和宿主環境測試
在嵌入式軟體測試中,常常要在基於目標的測試和基於宿主的測試之間作出折衷。基於目標的測試消耗較多的經費和時間,而基於宿主的測試代價較小,但畢竟是在模擬環境中進行的。目前的趨勢是把更多的測試轉移到宿主環境中進行,但是,目標環境的複雜性和獨特性不可能完全模擬。
在兩個環境中可以發現不同的軟體缺陷,重要的是對目標環境和宿主環境的測試內容有所選擇。在宿主環境中,可以進行邏輯或介面的測試、其它非實時測試以及與硬體無關的測試。在模擬或宿主環境中的測試消耗時間通常相對較少,用除錯工具可以更快地完成除錯和測試任務。而與定時問題有關的白盒測試、中斷測試、硬體介面測試只能在目標環境中進行。在軟體測試周期中,基於目標的測試是在較晚的"硬體/軟體整合測試"階段開始的,如果不更早地在模擬環境中進行白盒測試,而是等到"硬體/軟體整合測試"階段進行全部的白盒測試,將耗費更多的財力和人力。
3.模組測試
把大型的嵌入式軟體系統劃分為若干個相對較小的任務模組,由不同的程式設計師分別同時對其進行編碼。編碼完成後,把各個模組整合起來前,必須對單個模組進行測試。由於沒有其它資料模組進行資料傳遞的支援,該階段測試一段是在宿主機上進行的此階段主要是進行白盒測試,儘可能地測試。每一個函式、每一個條件分支、每一個程式語句,提高程式碼測試的覆蓋率。由於只有單個模組正確才有整體整合的必要性,因此,單個模組測試時測試一定要充分、完整。模組測試階段,測試用例的構造不但要測試系統正常的執行情況,還要進行邊界測試。邊界測試就是進行某一資料變數的最大值和最小值的測試,同時進行越界測試,即輸入不該輸入的資料變數測試系統的執行情況。理想的嵌入式系統是不應該由使用者的資訊互動導致宕機的,這也是嵌入式設計的一個基本要求。因此,不論進行何種測試,系統宕機都該被作為測試錯誤處理。在模組測試階段,由模組化程式設計的基本思想,根據模組內部的緊湊程式,也可以把大的模組劃分成小的模組。在程式內部,小模組之間資料傳遞的入口設計介面函式,用於快速地定位錯誤。用此模組巢狀的思想進行軟體測試,需要模組內部結構清晰,資料鏈路簡單。
4.系統平臺測試
這部分包括硬體電路測試、作業系統及底層驅動程式的測試等。硬體電路的測試需要用專門的測試工具進行測試。這裡不再多述。作業系統和底層驅動程式的測試主要包括測試作業系統的任務排程、實時效能、通訊埠的資料傳輸率。該階段測試完成後,系統應為一個完整的嵌入式系統平臺,使用者只需新增應用程式即可完成特定的任務。