摘要:隨著計算機技術的普及,軟件系統已經深入到生活的各個方面,從普通的計算機軟件,到銀行或超市的終端系統,甚至到手機的軟件系統。對軟件的質量要求也在不斷提高,軟件測試及其技術也有了飛速發展。在對軟件測試技術相關基本概念研究解析的基礎上,分析軟件測試起源與發展,保證軟件產品的質量、提高產品的可靠性。對于嵌入式軟件系統,因其多樣性,基于操作系統,使用的開發環境,微控制器都是日益繁多的,所以嵌入式軟件測試與普通軟件測試相比有其自身的特點。
關鍵字:軟件測試;嵌入式測試;軟件質量
1、引言
嵌入式軟件的開發和測試也就與普通軟件的開發和測試策略有了很大的不同,嵌入式軟件系統是一種針對特殊任務、特殊環境而進行特殊設計的定制產品,有其專門的開發環境、軟硬件緊密結合、嚴格的實時要求等特點。使得嵌入式軟件測試與普通軟件測試雖有相似之處,但有也有其自身獨特的特點。
2、軟件測試和嵌入式軟件測試
2.1 軟件測試的定義及目的
軟件測試,即Software Testing。軟件測試的定義有很多,在1979年出版的一本經典著作《軟件測試藝術》(The art of software testing)中,GLEMFORD
J.MYERS曾經對軟件測試下過如下定義:軟件測試就是為了發現錯誤而執行程序或系統的過程。雖然它不太完善,但放在當時的情況下是可以說的通的。
隨著計算機和軟件技術的發展,軟件應用的復雜性和規模的不斷擴大,軟件測試技術的研究也取得了很大的突破。早期的定義已經不適用了,許多專家對軟件測試提出了各種各樣的定義。綜合起來,我們可以定義“軟件測試是由一個程序的行為在有限測試用例集合上,針對期望的行為的動態驗證組成,測試用例是從通常的無限執行域中適當選取的”。
長期以來對軟件測試存在著兩種不同的認識。一種觀點認為,軟件軟件測試的目的是證明 軟件的正確性;而另一種觀點則認為,軟件測試的目的是盡可能尋找軟件中隱藏的錯誤和缺陷。
2.2 軟件測試的特點
1)大多數硬件實驗失敗的方式和方法是固定的,而軟件測試失敗則是毫無規律的,探索所有軟件測試失敗的模式是不可能的。
2)軟件方面的許多缺陷都源于設計和實現上的錯誤,而不是源于生產制造方面的缺陷。
3)軟件質量保證的關鍵在于我們如何讓避免產生錯誤和消除已經產生的錯誤,是程序中的錯誤密度達到盡可能低的程度。
4)軟件測試是一個動態的執行過程,體現在輸入、行為和行為的輸出結果上。
5)軟件測試是一個有限的集合。
2.3 嵌入式軟件測試的定義及目的
嵌入式軟件是一種比較特出的軟件,軟件經過分析,設計,編碼后只有燒入硬件環境中才可以看見,比如數字電視的中間件軟件,洗衣機的自動控制軟件,手機游戲軟件等等。嵌入式軟件測試/嵌入式測試或叫交叉測試(cross-test)的目的與普通軟件測試是相同的,都是為了發現軟件缺陷,而后修正缺陷以提高軟件的可靠性。嵌入式系統安全性的失效可能會導致災難性的后果,即使非安全性失效,由于其應用場合特殊也會導致重大經濟損失。因此,往往嵌入式軟件對可靠性的要求比普通軟件高。這就要求對嵌入式軟件進行嚴格的測試、確認和驗證,以提高產品的可靠性。
2.4 嵌入式軟件測試的特點
嵌入式軟件測試與普通軟件測試相比,有其自身的特點:
嵌入式軟件測試是在特定的硬件環境下才能運行的軟件。
嵌入式軟件測試除了要保證嵌入式軟件在特定環境下運行的高可靠性,還要保證嵌入式軟件系統的實時性。
嵌入式軟件產品為了滿足高可靠性的要求,不允許內存在運行時有泄漏等情況發生,因此嵌入式軟件測試除了對軟件進行性能測試、GUI測試、覆蓋分析測試是同普通軟件測試一樣都不可或缺之外,還要對內存進行測試。
嵌入式產品不同于一般軟件產品,在嵌入式軟件和硬件集成測試完成之后,并不代表測試全部完成,在第一件嵌入式產品生產出來之后,還需對其進行產品測試。
嵌入式軟件測試的最終目的是使嵌入式產品在能夠滿足所有功能的同時安全可靠的進行。
3、嵌入式軟件測試與普通軟件測試的異同點
3.1 嵌入式軟件測試與普通軟件測試的相同點
嵌入式軟件測試作為一種特殊的軟件測試,它的目的和原則與普通軟件測試是相同的,都是為了發現軟件缺陷,而后修正缺陷以提高軟件的可靠性。它們的中心任務都是驗證和確認其實際實現是否符合需求要求,在驗證過程中發現系統缺陷。
嵌入式軟件測試與普通軟件測試具有相同的信息流,如圖3-1。

圖3-1 軟件測試信息流
嵌入式軟件測和普通軟件測試對象相同,包括軟件中所有內容,貫穿軟件定義與開發的整個過程。也就是說,需求分析、概要設計、詳細設計、程序編碼等各階段所得到的文檔及源程序,包括需求規格說明、概要設計規格說明、詳細設計規格說明以及源程序,都應當稱為軟件測試的對象。
3.2 嵌入式軟件測試與普通軟件測試的區別
由于嵌入式系統的自身特點,如實時性(Real-timing),內存不豐富,I/O通道少,開發工具昂貴,并且與硬件緊密相關CPU種類繁多,等等。嵌入式軟件的開發和測試也就與一般商用軟件的開發和測試策略有了很大的不同,可以說嵌入式軟件是最難測試的一種軟件。
嵌入式系統由于自己本身的特點,如實時性強、內存不豐富、I/O通道少、開發工具昂貴并且與硬件緊密相關、CPU種類繁多等等,決定了不同的嵌入式系統必須有不同的測試方法。
3.2.1 嵌入式軟件測試的各個階段測試的環境是不一樣的
嵌入式軟件開發和運行的環境是分開的,嵌入式軟件開發環境往往是交叉開發環境。因此,各個階段測試的環境是不一樣的。
單元測試階段:所有的單元測試都可以在宿主機環境下進行,只有個別情況下會特別指定單元測試要直接在目標機環境下進行。應該最大化在宿主機環境下進行軟件測試的比例,通過盡可能小的目標單元訪問其指定的目標單元界面,提高單元的有效性和針對性。
在宿主機平臺上運行測試的速度比在目標機平臺上快得多,當在宿主機平臺上完成測試后可以在目標機環境下重復做一次簡單的確認測試,確認測試結果在宿主機和目標機上沒有不同。在目標機環境下進行確認測試將確定一些未知的、未預料到的、未說明的宿主機與目標機的不同之處,例如,目標機編譯器可能有缺陷,但在宿主機編譯器上沒有。
集成測試階段:軟件集成也可在宿主機環境下完成,在宿主句平臺上模擬目標環境運行,在此級別上的確認測試可以確定一些與環境有關的問題,比如內存定位和分配方面的一些錯誤。
在宿主機環境上的集成測試的使用,依賴于目標系統的具體功能有多少。有些嵌入式系統與目標機環境耦合的非常緊密,這種情況下就不適合在宿主機環境下進行集成。對于一個大型的軟件開發而言,集成可以分幾個級別。低級別的軟件集成在宿主機平臺上完成有很大優勢,級別越高,集成越依賴于目標環境。
系統測試和確認測試:所有的系統測試和確認測試必須在目標機環境下執行。當然在宿主機上開發和執行系統測試,然后移植到目標機環境重復執行是很方便的。對目標系統的依賴性會妨礙將宿主機上的系統測試移植到目標系統上,況且只有少數開發者會卷入系統測試,所以有時放棄在宿主機上執行系統測試可能更方便。
確認測試最終必須在目標機環境中進行,因為系統的確認必須在真實系統下完成,而不能在宿主機環境下模擬,這關系到嵌入式軟件的最終使用。
3.2.2 嵌入式軟件測試的復雜多樣
因為嵌入式系統的一個突出的特點,是其專用性,即一個嵌入式系統只進行特定的一項或幾項工作,嵌入式軟件運行的平臺都是為進行這些工作而開發出來的專用硬件電路,他們的體系結構、硬件電路,甚至所用的元器件都是不一樣的,所以嵌入式軟件運行的平臺也是復雜多樣的。
由于開發平臺的復雜多樣性,使的嵌入式軟件的測試從測試環境的建立到測試用例的編寫也是復雜多樣的。與不同的開發平臺對應的嵌入式軟件是肯定不相同的。嵌入式軟件測試在一定程度的上并不只是對嵌入式軟件的測試,很多情況下是對嵌入式軟件在開發平臺中同硬件的兼容性測試。因此,對于任何一套嵌入式軟件系統,都需要有其自己的測試、創建其自己的測試環境、編寫其自己的測試用例。
3.2.3 嵌入式軟件測試中對實時性有嚴格要求
由于嵌入式系統的實時性,決定了嵌入式系統的運行時間也是受嚴格限制的。嵌入式軟件在測試時應當充分考慮系統實時響應的問題,很多嵌入式系統會要求系統的響應時間應在多少毫秒之內。在測試有嚴格響應時間要求的嵌入式系統時要做負載測試。
3.2.4 嵌入式軟件測試需要進行插樁測試
嵌入式軟件最終的測試需要在目標機平臺上進行,在對目標機進行測試時,我們需要對在宿主機上編譯通過的代碼進行插樁處理。插樁完成之后,需要重新對代碼進行編譯,如果編譯通過,就可以將編譯好的代碼下載到目標機上執行。在目標機執行程序的時候,需要將插樁時預測好的數據返回到宿主機上,因此,宿主機和目標機上要有能夠相互傳遞數據的網線或者串口線,宿主機上同時要有能夠處理返回的數據的處理程序或軟件
3.2.5 嵌入式軟件對系統的可靠性和安全性要求比一般的軟件系統高
因為嵌入式軟件對系統的可靠性和安全性要求比一般的軟件系統高,所以還需要進行系統的可靠性測試。對于不同的嵌入式系統,需要制定相應的符合系統需求的可靠級別,在進行可靠性測試時應該將系統的可靠性級別考慮進去。
一些嵌入式系統,比如工廠車間的某些控制系統,他們要在電磁很強的惡劣的環境下可靠的工作,而且要保證操作人員的安全。但是對于手機軟件來說,他的可靠性和安全性就不如工廠車間的車床控制系統要求的高。