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

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