天天看點

嵌入式軟體測試與一般軟體測試之異同研究

  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 嵌入式軟體測試的特點

  嵌入式軟體測試與普通軟體測試相比,有其自身的特點:

  嵌入式軟體測試是在特定的硬體環境下才能運作的軟體。

  嵌入式軟體測試除了要保證嵌入式軟體在特定環境下運作的高可靠性,還要保證嵌入式軟體系統的實時性。

  嵌入式産品不同于一般軟體産品,在嵌入式軟體和硬體內建測試完成之後,并不代表測試全部完成,在第一件嵌入式産品生産出來之後,還需對其進行産品測試。

  嵌入式軟體測試的最終目的是使嵌入式産品在能夠滿足所有功能的同時安全可靠的進行。

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 嵌入式軟體對系統的可靠性和安全性要求比一般的軟體系統高

  因為嵌入式軟體對系統的可靠性和安全性要求比一般的軟體系統高,是以還需要進行系統的可靠性測試。對于不同的嵌入式系統,需要制定相應的符合系統需求的可靠級别,在進行可靠性測試時應該将系統的可靠性級别考慮進去。

  一些嵌入式系統,比如工廠工廠中的房間的某些控制系統,他們要在電磁很強的惡劣的環境下可靠的工作,而且要保證操作人員的安全。但是對于手機軟體來說,他的可靠性和安全性就不如工廠工廠中的房間的車床控制系統要求的高。

====================================分割線================================

最新内容請見作者的github頁:http://qaseven.github.io/