西安郵電大學計算機學院 張明英 王曙燕
隨著數(shù)字化時代的到來,大量系統(tǒng)架構(gòu)復雜、功能日益強大的嵌入式系統(tǒng)正不斷進入市場,應用也日趨復雜,這對嵌人式軟件的開發(fā)技術和測試技術提出了更高的要求。嵌人式系統(tǒng)的復雜性和集成度越來越高,其中的軟件部分也開始在整個嵌入式系統(tǒng)中占有越來越多的比例,并經(jīng)常實現(xiàn)硬件的功能。嵌入式系統(tǒng)的專用程度較高,所以對其可靠性的要求也比較高,為了保證系統(tǒng)的穩(wěn)定性,避免由于其可能出現(xiàn)的失效而導致災難性的后果,要求對嵌人式系統(tǒng),包括嵌入式軟件進行嚴格的測試、確認和驗證?;谇度胧杰浖陨淼奶攸c,如實時性(Real-timing),內(nèi)存不豐富,I/O通道少,開發(fā)工具昂貴,并且與硬件緊密相關,CPU種類繁多,其缺陷不像PC軟件的缺陷容易修補等等。傳統(tǒng)的軟件測試理論不能直接用于嵌入式軟件測試,因此,研究嵌入式軟件的測試方法和策略,對于提高和改善嵌入式軟件的質(zhì)量有重要意義。
嵌入式系統(tǒng)是以應用為中心,以計算機技術為基礎,軟件硬件可剪裁,適應應用系統(tǒng)對功能、可靠性、成本、體積及功耗嚴格要求的專用計算機系統(tǒng)[1]。嵌入式系統(tǒng)的軟硬件功能界限模糊,測試比PC系統(tǒng)軟件測試要困難得多,嵌入式軟件系統(tǒng)測試具有如下特點[2]:
(1)測試軟件功能依賴不需編碼的硬件功能,快速定位軟硬件錯誤困難;
(3)交叉測試平臺的測試用例、測試結(jié)果上載困難;
(4)基于消息系統(tǒng)測試的復雜性,包括線程、任務、子系統(tǒng)之間的交互,并發(fā)、容錯和對時間的要求;
(5)性能測試、確定性能瓶頸困難;
(6)實施測試自動化技術困難。大量統(tǒng)計資料表明,軟件測試的工作量往往占軟件開發(fā)總工作量的40%以上,在極端情況,測試那種關系人的生命安全的重要的行業(yè)中的嵌入式軟件所花費的成本,可能相當于軟件工程其他開發(fā)步驟總成本的三倍到五倍。
在嵌入式軟件測試中,既要考慮軟件本身,還要考慮軟件同硬件平臺和操作系統(tǒng)的集成,同時還有條件苛刻的時間約束和實時要求,以及其他合性能相關的要求。
全數(shù)字模擬測試是指采用數(shù)學平臺的方法,將嵌入式軟件從系統(tǒng)中剝離出來,通過開發(fā)CPU指令、常用芯片、I/O、中斷、時鐘等模擬器在開發(fā)主機平臺(Host)上實現(xiàn)嵌入式軟件的測試。該方法操作簡單,適用于功能測試,是一種可以借鑒的常規(guī)軟件測試方法。但是全數(shù)字模擬測試有較大的局限性,使用不同語言編寫的嵌入式軟件需要不同的仿真程序來執(zhí)行,通用性差,實時性與準確性難以反映出嵌入式軟件的真實情況,當并發(fā)事件要求一定的同步關系時,維護統(tǒng)一、精確地系統(tǒng)時鐘,理順時序關系相當困難。因此,設計一個能進行系統(tǒng)測試的環(huán)境代價太大,全數(shù)字模擬測試只能作為嵌入式軟件測試的輔助手段。
自從出現(xiàn)高級語言,嵌入式系統(tǒng)的開發(fā)環(huán)境和運行環(huán)境通常是存在差異的,開發(fā)環(huán)境被認為是主機平臺(Host),軟件運行環(huán)境為目標平臺(Target),相應的測試為Host Target測試(交叉測試)。測試過程中,充分利用高級語言的可移植性,將系統(tǒng)中與目標環(huán)境無關的部分工作轉(zhuǎn)移到PC平臺上完成,在硬件環(huán)境未建好或調(diào)試工具缺乏時就可以開展,這時可以借鑒常規(guī)的軟件測試方法。系統(tǒng)中與硬件密切相關的部分在Target上完成,用到的測試工具需要支持目標環(huán)境。最后,在目標環(huán)境中進行驗證確認。交叉測試適用于高級語言,操作方便,測試成本較低,但是實時性受調(diào)試環(huán)境的制約,在目標環(huán)境中測試時要占用一定的目標資源。
3.3.3 中、微量元素肥 根據(jù)蘋果樹需肥特點及土壤養(yǎng)分狀況,中、微量元素肥料應以鈣、硼、鋅、鐵等為主,可采用基施和葉面噴肥兩種方法。
嵌入式系統(tǒng)中與目標環(huán)境無關的大部分測試工作可以在PC平臺上完成,這就可以充分借用PC軟件的測試方法。
靜態(tài)測試(Static Test)包括代碼檢查、靜態(tài)結(jié)構(gòu)分析等,是指對軟件文檔或程序進行掃描分析,無需運行程序,與嵌入式環(huán)境無關。人工或借助專用的軟件測試工具評審軟件文檔或程序,度量程序靜態(tài)復雜度,檢查軟件是否符合編程標準,借以發(fā)現(xiàn)編寫的程序的不足之處。
動態(tài)測試(Dynamic Test)是指選擇適當?shù)臏y試用例,實際運行被測代碼,觀察代碼運行時所體現(xiàn)的功能、邏輯、行為、結(jié)構(gòu)等,檢查運行結(jié)果與預期結(jié)果的差異,并分析運行效率和健壯性等性能。
白盒測試和黑盒測試是動態(tài)測試的兩種主要方法。
白盒測試又稱為結(jié)構(gòu)化測試,是一種基于結(jié)構(gòu)的測試,主要進行軟件的控制流測試(語句覆蓋、分支覆蓋等)和數(shù)據(jù)流測試。覆蓋率和性能是衡量軟件質(zhì)量的重要指標,也是白盒側(cè)試的主要內(nèi)容。白盒測試主要測試依據(jù)是軟件設計,它對軟件內(nèi)部工作過程的細致檢查,允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關信息,設計或選擇測試用例,對程序所有邏輯路徑進行測試。
黑盒測試又稱為功能測試或行為測試,是一種基于需求的測試,目的是驗證被測軟件是否符合軟件的需求。它著眼于軟件的外部結(jié)構(gòu),不考慮程序的邏輯結(jié)構(gòu)和內(nèi)部特性,僅依據(jù)軟件的需求規(guī)格說明書,在軟件界面上檢查程序的功能是否符合要求,以此判定測試結(jié)果的正確性[3]。黑盒測試不是白盒測試的替代品,而是輔助白盒測試發(fā)現(xiàn)其他類型的錯誤。嵌人式軟件的黑盒測試一般在嵌入式系統(tǒng)上進行,不需借助于測試工具和測試平臺。
單元測試和集成測試是軟件測試的兩個階段。
單元測試又稱模塊測試,是指依據(jù)詳細的設計描述對每一個功能相對獨立的程序模塊逐個測試,多個模塊可以平行的獨立進行單元測試。所有單元級測試都可以在主機環(huán)境上進行,除非少數(shù)情況,特別具體指定了單元測試直接在目標環(huán)境進行。在主機平臺上運行測試的速度比在目標平臺上快得多,當在主機平臺完成測試時,可以在目標環(huán)境上重復作一次簡的確認測試,確認測試結(jié)果在主機和目標機上沒有被它們的不同影響。
集成測試是指在單元測試的基礎上,將所有模塊按照設計要求組裝起來進行測試,主要測試內(nèi)容有程序模塊間的接口參數(shù)傳遞、集成后的功能實現(xiàn)以及模塊間的相互影響等。軟件集成可在主機環(huán)境上完成,在主機平臺上模擬目標環(huán)境運行,當然在目標環(huán)境上重復測試也是必須的,在此級別上的確認測試將確定一些環(huán)境上的問題,比如內(nèi)存定位和分配上的一些錯誤。在主機環(huán)境上的集成測試的使用,依賴于目標系統(tǒng)的具體功能有多少。有些嵌入式系統(tǒng)與目標環(huán)境耦合的非常緊密,若在主機環(huán)境做集成是不切實際的。一個大型軟件的開發(fā)可以分幾個級別的集成。低級別的軟件集成在主機平臺上完成有很大優(yōu)勢,越往后的集成越依賴干目標環(huán)境[4]。由于嵌入式軟件最終要運行在目標環(huán)境中,所以必須在實際運行環(huán)境中,將嵌入式軟件與計算機硬件、外設、某些支持軟件、數(shù)據(jù)和人員等元素結(jié)合在一起,對整個系統(tǒng)進行的測試。
在嵌入式軟件的測試過程中使用有效的測試策略,可以使開發(fā)的效率最大化,避免目標系統(tǒng)的瓶頸。
(1)先靜態(tài)測試后動態(tài)測試
從代碼規(guī)則檢查做起,測試開展的越早,付出的代價就越小。靜態(tài)分析簡單、方便、成本低、見效快,能為動態(tài)測試打下良好的基礎,從而大大降低測試的成本。
(2)先單元測試后集成測試
單元測試是集成測試的基礎,單元測試得越好,集成測試的工作量就越小。
(3)先黑盒測試后白盒測試
先驗證軟件的功能是否滿足需求,后驗證程序覆蓋率,補充測試。
軟件模塊的邏輯結(jié)構(gòu)能客觀地反映出軟件的質(zhì)量,結(jié)構(gòu)越“良好”,代碼就越可靠。結(jié)構(gòu)化測試是軟件代碼質(zhì)量分析的好方法。由于代碼復雜度與代碼出錯的關聯(lián)性非常強,在測試工程中,充分應用結(jié)構(gòu)化測試技術,從結(jié)構(gòu)入手分析代碼的復雜程度,可以指導測試的進行,指出代碼質(zhì)量改進的方向。
工欲善其事,必先利其器。進行軟件測試,通常工具是必需的,但不是萬能的。根據(jù)測試的需要和測試工具的特長選擇合適的測試工具,不但可以客觀、準確的獲得測試結(jié)果,還可以減輕人的工作量,降低測試成本。軟件測試是一項長期化、系統(tǒng)化、常態(tài)化的工作,并且需要維護和更新,因此,需要對整個測試過程進行嚴格管理。
嵌入式系統(tǒng)設計中,硬件集成度越來越高,軟件的功能越來越強大,為了降低系統(tǒng)的成本,獲得更大的靈活性,軟件正越來越多地取代硬件,軟件的重要性逐漸引起人們的重視。因此,進行嵌入式軟件測試方法和策略的研究,能夠?qū)θ找鎻碗s的嵌入式軟件進行快速有效的測試,提高軟件測試效率,確保軟件質(zhì)量。
[1]周立功等.ARM嵌入式系統(tǒng)基礎教程[M].北京:北京航空航天大學出版社,2005.
[2]池云.嵌入式軟件測試研究[J].中國科技信息,2009.[3]宮云戰(zhàn).軟件測試[M].北京:國防工業(yè)出版社,2005.[4]郭群.嵌入式軟件測試技術[J].微處理機,2008.