嵌入式軟件測試/嵌入式測試或叫交叉測試(cross-test)的日的與非嵌入式軟件是相同的。但是,在嵌入式系統設計中,軟件正越來(lái)越多地取代硬件,以降低系統的成本,獲得更大的靈活性,這就需要使用更好的測試方法和工具進(jìn)行嵌入式和實(shí)時(shí)軟件的測試。
通常嵌入式系統對可靠性的要求比較高。嵌入式系統安全性的失效可能會(huì )導致災難性的后果,即使是非安全性系統,由于大批量生產(chǎn)也會(huì )導致嚴重的經(jīng)濟損失。這就要求對嵌入式系統,包括嵌入式軟件進(jìn)行嚴格的測試、確認和驗證。隨著(zhù)越來(lái)越多的領(lǐng)域使用軟件和微處理器控制各種嵌入式設備,對門(mén)益復雜的嵌入式軟件進(jìn)行快速有效的測試愈加顯得重要。
軟件測試的目的是保證軟件滿(mǎn)足需求規格說(shuō)明。系統失效是系統沒(méi)有滿(mǎn)足—個(gè)或多個(gè)正式需求規范中所要求的需求項。嵌入式軟件有其特殊的失效判定準則,但是,嵌入式軟件測試的日的與非嵌入式軟件是相同的。在嵌入式系統設計中,軟件正越來(lái)越多地取代硬件,以降低系統的成本,獲得更大的靈活性,這就需要使用更好的測試方法和工具進(jìn)行嵌入式和實(shí)時(shí)軟件的測試。
一、嵌入式軟件的測試方法
一般來(lái)說(shuō),軟件測試有7個(gè)基本階段,即單元或模塊測試、集成測試、外部功能測試、回歸測試、系統測試、驗收測試、安裝測試。嵌入式軟件測試在4個(gè)階段上進(jìn)行,即模塊測試、集成測試、系統測試、硬件/軟件集成測試。前3個(gè)階段適用于任何軟件的測試,硬件/軟件集成測試階段是嵌入式軟件所特有的,目的是驗證嵌入式軟件與其所控制的硬件設備能否正確地交互。
一般來(lái)說(shuō),軟件測試有兩種基本的方式,即白盒測試方法與黑盒測試方法,嵌入式軟件測試也不例外。
白盒測試或基本代碼的測試檢查程序的內部設計。根據源代碼的組織結構查找軟件缺陷,一股要求測試人員對軟件的結構和作用有詳細的了解,白盒測試與代碼覆蓋率密切相關(guān),可以在白盒測試的同時(shí)計算出測試的代碼的覆蓋率,保證測試的充分性。把100%的代碼都測試到幾乎是不可能的, 所以要選擇最重要的代碼進(jìn)行白盒測試。由于嚴格的安全性和可靠性的要求,嵌入式軟件測試同非嵌入式軟件測試相比,通常要求有更高的代碼覆蓋率。對于嵌入式軟件,白盒測試一般不必在目標硬件上進(jìn)行,更為實(shí)際的方式是在開(kāi)發(fā)環(huán)境中通過(guò)硬件仿真進(jìn)行,所以選取的測試工具應該支持在宿主環(huán)境中的測試。
黑盒測試在某些情況下也稱(chēng)為功能測試。這類(lèi)測試方法根據軟件的用途和外部特征查找軟件缺陷,不需要了解程序的內部結構。黑盒測試最大的優(yōu)勢在于不依賴(lài)代碼,而是從實(shí)際使用的角度進(jìn)行測試,通過(guò)黑盒測試可以發(fā)現白盒測試發(fā)現不了的問(wèn)題。因為黑盒測試與需求緊密相關(guān),需求規格說(shuō)明的質(zhì)量會(huì )直接影響測試的結果,黑盒測試只能限制在需求的范圍內進(jìn)行。在進(jìn)行嵌入式軟件黑盒測試時(shí),要把系統的預期用途作為重要依據,根據需求中對負載、定時(shí)、性能的要求,判斷軟件是否滿(mǎn)足這些需求規范。為了保證正確地測試,還須要檢驗軟硬件之間的接口。嵌入式軟件黑盒測試的一個(gè)重要方面是極限測試。在使用環(huán)境中,通常要求嵌入式軟件的失效過(guò)程要平穩,所以,黑盒測試不儀要檢查軟件工作過(guò)程,也要檢查軟件換效過(guò)程。
2、目標環(huán)境測試和宿主環(huán)境測試
在嵌入式軟件測試中,常常要在基于目標的測試和基于宿主的測試之間作出折衷?;谀繕说臏y試消耗較多的經(jīng)費和時(shí)間,而基于宿主的測試代價(jià)較小,但畢竟是在模擬環(huán)境中進(jìn)行的。目前的趨勢是把更多的測試轉移到宿主環(huán)境中進(jìn)行,但是,目標環(huán)境的復雜性和獨特性不可能完全模擬。
在兩個(gè)環(huán)境中可以出現不同的軟件缺陷,重要的是目標環(huán)境和宿主環(huán)境的測試內容有所選擇。在宿主環(huán)境中,可以進(jìn)行邏輯或界面的測試、以及與硬件無(wú)關(guān)的測試。在模擬或宿主環(huán)境中的測試消耗時(shí)間通常相對較少,用調試工具可以更快地完成調試和測試任務(wù)。而與定時(shí)問(wèn)題有關(guān)的白盒測試、中斷測試、硬件接口測試只能在目標環(huán)境中進(jìn)行。在軟件測試周期中,基于目標的測試是在較晚的“硬件/軟件集成測試”階段開(kāi)始的,如果不更早地在模擬環(huán)境中進(jìn)行白盒測試,而是等到“硬件/軟件集成測試”階段進(jìn)行全部的白盒測試,將耗費更多的財力和人力。
二、嵌入式軟件的測試工具
用于輔助嵌入式軟件測試的工具很多,下面對幾類(lèi)比較有用的有關(guān)嵌入式軟件的測試工具加以介紹和分析。
1、內存分析工具
在嵌入式系統中,內存約束通常是有限的。內存分析工具用來(lái)處理在動(dòng)態(tài)內存分配中存在的缺陷。當動(dòng)態(tài)內存被錯誤地分配后,通常難以再現,可能導致的失效難以追蹤,使用內存分析工具可以避免這類(lèi)缺陷進(jìn)入功能測試階段。目前有兩類(lèi)內存分析工具——軟件和硬件的?;谲浖膬却娣治龉ぞ呖赡軙?huì )對代碼的性能造成很大影響,從而嚴重影響實(shí)時(shí)操作;基于硬件的內存分析工具價(jià)格昂貴,而且只能在工具所限定的運行環(huán)境中使用。
2、性能分析工具
在嵌入式系統中,程序的性能通常是非常重要的。經(jīng)常會(huì )有這樣的要求,在特定時(shí)間內處理一個(gè)中斷,或生成具有特定定時(shí)要求的一幀。開(kāi)發(fā)人面臨的問(wèn)題是決定應該對哪一部分代碼進(jìn)行優(yōu)化來(lái)改進(jìn)性能,常常會(huì )花大量的時(shí)間去優(yōu)化那些對性能沒(méi)有任何影響的代碼。性能分析工具會(huì )提供有關(guān)的數據,說(shuō)明執行時(shí)間是如何消耗的,是什么時(shí)候消耗的,以及每個(gè)例程所用的時(shí)間。根據這些數據,確定哪些例程消耗部分執行時(shí)間,從而可以決定如何優(yōu)化軟件,獲得更好的時(shí)間性能。對于大多數應用來(lái)說(shuō),大部分執行時(shí)間用在相對少量的代碼上,費時(shí)的代碼估計占所有軟件總量的5%-20%。性能分析工具不僅能指出哪些例程花費時(shí)間,而且與調試工具聯(lián)合使用可以引導開(kāi)發(fā)人員查看需要優(yōu)化的特定函數,性能分析工具還可以引導開(kāi)發(fā)人員發(fā)現在系統調用中存在的錯誤以及程序結構上的缺陷。
3、GUI測試工具
很多嵌入式應用帶有某種形式的圖形用戶(hù)界面進(jìn)行交互,有些系統性能測試足根掘用戶(hù)輸入響應時(shí)間進(jìn)行的。GUI測試工具可以作為腳本工具有開(kāi)發(fā)環(huán)境中運行測試用例,其功能包括對操作的記錄和回放、抓取屏幕顯示供以后分析和比較、設置和管理測試過(guò)程。很多嵌入式設備沒(méi)有GUI,但常??梢詫η度胧皆O備進(jìn)行插裝來(lái)運行GUI測試腳本,雖然這種方式可能要求對被測代碼進(jìn)行更改,但是節省了功能測試和回歸測試的時(shí)間。
4、覆蓋分析工具
在進(jìn)行白盒測試時(shí),可以使用代碼覆蓋分析工具追蹤哪些代碼被執行過(guò)。分析過(guò)程可以通過(guò)插裝來(lái)完成,插裝可以是在測試環(huán)境中嵌入硬件,也可以是在可執行代碼中加入軟件,也可以是二者相結合。測試人員對結果數據加以總結,確定哪些代碼被執行過(guò),哪些代碼被巡漏了。覆蓋分析工具一般會(huì )提供有關(guān)功能覆蓋、分支覆蓋、條件覆蓋的信息。對于嵌入式軟件來(lái)說(shuō),代碼覆蓋分析工具可能侵入代碼的執行,影響實(shí)時(shí)代碼的運行過(guò)程?;谟布拇a覆蓋分析工具的侵入程度要小一些,但是價(jià)格一般比較昂貴,而且限制被測代碼的數量。
三、嵌入式軟件測試策略
在嵌入式領(lǐng)域目標系統的應用系統日趨復雜,而由于競爭要求產(chǎn)品快速上市,開(kāi)發(fā)技術(shù)日新月異,同時(shí)硬件發(fā)展的日益穩定,而軟件故障卻日益突出,軟件的重要性逐漸引起人們的重視,越來(lái)越多的人認識到嵌入式系統的測試勢在必行。提到嵌入式軟件測試,首先要簡(jiǎn)單介紹一些軟件工程的一些觀(guān)點(diǎn),現在,被普遍接受的軟件的定義是:軟件(software)是計算機系統中與硬件(hardware)相互依存的另一部分,它包括程序(program)、相關(guān)數據(data)及其說(shuō)明文檔(document)。其中程序是按照事先設計的功能和性能要求執行的指令序列;數據是是程序能正常操縱信息的數據結構;文檔是與程序開(kāi)發(fā)維護和使用有關(guān)的各種圖文資料。
對于一般商用軟件的測試,嵌入式軟件測試有其自身的特點(diǎn)和測試困難。
由于嵌入式系統的自身特點(diǎn),如實(shí)時(shí)性(Real-timing),內存不豐富,I/O通道少,開(kāi)發(fā)工具昂貴,并且與硬件緊密相關(guān)CPU種類(lèi)繁多,等等。嵌入式軟件的開(kāi)發(fā)和測試也就與一般商用軟件的開(kāi)發(fā)和測試策略有了很大的不同,可以說(shuō)嵌入式軟件是最難測試的一種軟件。
嵌入式軟件測試使用有效的測試策略是唯一的出路,它可以使開(kāi)發(fā)的效率最大化,避免目標系統的瓶頸,使用在線(xiàn)仿真器節省昂貴的目標資源。自從出現高級語(yǔ)言,開(kāi)發(fā)環(huán)境與最終運行環(huán)境通常都是存在差異的,嵌入式系統更是如此。開(kāi)發(fā)環(huán)境被認為是主機平臺,軟件運行環(huán)境為目標平臺。相應的測試為host-target測試或cross-testing。
討論嵌入式軟件測試首先就會(huì )遇到一個(gè)問(wèn)題:為什么不把所有測試都放在目標上進(jìn)行呢?因為若所有測試都放在目標平臺上有很多不利的因素:
1)測試軟件,可能會(huì )造成與開(kāi)發(fā)者爭奪時(shí)間的瓶頸,避免它只有提供更多的目標環(huán)境。
2)目標環(huán)境可能還不可行。
3)比起主機平臺環(huán)境,目標環(huán)境通常是不精密的和不方便的。
4)提供給開(kāi)發(fā)者的目標環(huán)境和聯(lián)合開(kāi)發(fā)環(huán)境通常是很昂貴的。
5)開(kāi)發(fā)和測試工作可能會(huì )妨礙目標環(huán)境已存在持續的應用
從經(jīng)濟上和開(kāi)發(fā)效率上考慮,軟件開(kāi)發(fā)周期中盡可能大的比例在主機系統環(huán)境中進(jìn)行,其中包括測試。
確定host-target測試環(huán)境后,開(kāi)發(fā)測試人員又會(huì )遇到以下的問(wèn)題:
1)多少開(kāi)發(fā)人員會(huì )卷入測試工作(單元測試,軟件集成,系統測試)?
2)多少軟件應該測試,測試會(huì )花費多長(cháng)時(shí)間?
3)在主機環(huán)境和目標環(huán)境有哪些軟件工具,價(jià)格怎樣,適合怎樣?
4)多少目標環(huán)境可以提供給開(kāi)發(fā)者,什么時(shí)候?
5)主機和目標機之間的連接怎樣?
6)被測軟件下載到目標機有多快?
7)使用主機與目標環(huán)境之間有什么限制(如軟件安全標準)?
任何人或組織進(jìn)行嵌入式軟件的測試都應深入考慮以上問(wèn)題,結合自身實(shí)際情況,選定合理測試策略和方案。
對于嵌入式軟件測試或叫交叉測試(cross-test),在測試的各個(gè)階段有著(zhù)通用的策略:
1.單元測試
所有單元級測試都可以在主機環(huán)境上進(jìn)行,除非少數情況,特別具體指定了單元測試直接在目標環(huán)境進(jìn)行。最大化在主機環(huán)境進(jìn)行軟件測試的比例,通過(guò)盡可能小的目標單元訪(fǎng)問(wèn)所有目標指定的界面。
在主機平臺上運行測試速度比在目標平臺上快的多,當在主機平臺完成測試,可以在目標環(huán)境上重復作一簡(jiǎn)單的確認測試,確認測試結果在主機和目標機上沒(méi)有被他們的不同影響。在目標環(huán)境上進(jìn)行確認測試將確定一些未知的,未預料到的,未說(shuō)明的主機與目標機的不同。例如,目標編譯器可能有bug,但在主機編譯器上沒(méi)有。
2.集成測試
軟件集成也可在主機環(huán)境上完成,在主機平臺上模擬目標環(huán)境運行,當然在目標環(huán)境上重復測試也是必須的,在此級別上的確認測試將確定一些環(huán)境上的問(wèn)題,比如內存定位和分配上的一些錯誤。
在主機環(huán)境上的集成測試的使用,依賴(lài)于目標系統的具體功能有多少。有些嵌入式系統與目標環(huán)境耦合的非常緊密,若在主機環(huán)境做集成是不切實(shí)際的。一個(gè)大型軟件的開(kāi)發(fā)可以分幾個(gè)級別的集成。低級別的軟件集成在主機平臺上完成有很大優(yōu)勢,越往后的集成越依賴(lài)于目標環(huán)境。
3.系統測試和確認測試
所有的系統測試和確認測試必須在目標環(huán)境下執行。當然在主機上開(kāi)發(fā)和執行系統測試,然后移植到目標環(huán)境重復執行是很方便的。對目標系統的依賴(lài)性會(huì )妨礙將主機環(huán)境上的系統測試移植到目標系統上,況且只有少數開(kāi)發(fā)者會(huì )卷入系統測試,所以有時(shí)放棄在主機環(huán)境上執行系統測試可能更方便。
確認測試最終的實(shí)施舞臺必須在目標環(huán)境中,系統的確認必須在真實(shí)系統之下測試,而不能在主機環(huán)境下模擬。這關(guān)系到嵌入式軟件的最終使用。
包括恢復測試、安全測試、強度測試、性能測試,已超出了軟件測試的范疇,本文暫不討論。
使用有效的cross-test測試策略可極大的提高嵌入式軟件開(kāi)發(fā)測試的水平和效率,當然正確的測試工具使用也是必不可少的:
總結一下,應用以上測試工具進(jìn)行.Cross-test時(shí)的策略:
A)使用測試工具的插裝功能(主機環(huán)境)執行靜態(tài)測試分析,并且為動(dòng)態(tài)覆蓋測試準備好一插裝好的軟件代碼。
B)使用源碼在主機環(huán)境執行功能測試,修正軟件的錯誤和測試腳本中的錯誤。
C)使用插裝后的軟件代碼執行覆蓋率測試,添加測試用例或修正軟件的錯誤,保證達到所要求的覆蓋率目標。
D)在目標環(huán)境下重復(B),確認軟件在目標環(huán)境中執行測試的正確性。
E)若測試需要達到極端的完整性,最好在目標系統上重復(C),確定軟件的覆蓋率沒(méi)有改變。
通常在主機環(huán)境執行多數的測試,只是在最終確定測試結果和最后的系統測試才移植到目標環(huán)境,這樣可以避免發(fā)生訪(fǎng)問(wèn)目標系統資源上的瓶頸,也可以減少在昂貴資源如在線(xiàn)仿真器上的費用。另外,若目標系統的硬件由于某種原因而不能使用時(shí),最后的確認測試可以推遲直到目標硬件可用,這為嵌入式軟件的開(kāi)發(fā)測試提供了彈性。設計軟件的可移植性是成功進(jìn)行cross-test的先決條件,它通??梢蕴岣哕浖馁|(zhì)量,并且度軟件的維護大有益處。以上所提到的測試工具,都可以通過(guò)各自的方式提供測試在主機與目標之間的移植,從而使嵌入式軟件的測試得以方便的執行。
使用有效的cross-test測試策略可極大的提高嵌入式軟件開(kāi)發(fā)測試的水平和效率,提高嵌入式軟件的質(zhì)量。
附錄:
1). HOST-TARGET的連接方法簡(jiǎn)介:






四、結論
嵌入式系統在人類(lèi)生活中發(fā)揮著(zhù)重要的作用,包括飛行控制器這樣的控制系統,以及洗衣機這樣的家用電器。日前,嵌入式系統中軟件的比重越來(lái)越大,也越來(lái)越復雜,保證嵌入式軟件的可靠性正面臨嚴峻的挑戰。
大多數軟件測試方法都可以直接或間接地用于嵌入式軟件的測試,但是由于操作系統的實(shí)時(shí)和嵌入式特性,嵌入式軟件測試也面臨一些特殊的問(wèn)題。雖然日前已經(jīng)有一些針對嵌入式軟件的測試和調試工具,但是在有些方面仍存在不足,包括許多任務(wù)操作系統的并發(fā)、非侵入式的測試和凋試、嵌入式系統的軟件抽象等。對于嵌入式軟件測試技術(shù)的研究人選測試工具有待開(kāi)發(fā),仍須要做很多進(jìn)一步的工作。
聯(lián)系客服