張蕾
摘 要:如今,嵌入式軟件在越來越多的場合應用,嵌入式軟件測試工作是保證軟件質(zhì)量必不可少的重要一環(huán),也必將會得到更多的重視。本文介紹了嵌入式軟件的特點和測試方法,并針對不同的測試方法討論了流行的測試工具。
關鍵詞:嵌入式軟件;軟件測試;測試方法;測試工具
中圖分類號:TP317 文獻標識碼:A
0.引言
由于嵌入式軟件設計開發(fā)的方法、技術、過程以及工具都與通用計算機軟件不同,所以需要使用更先進的測試方法和工具對嵌入式系統(tǒng)進行測試。隨著越來越多的領域使用軟件來控制各種嵌入式設備,如何對嵌入式軟件進行測試和驗證,如何保證軟件能夠滿足系統(tǒng)要求,就顯得尤為重要。
1.嵌入式軟件測試特點
嵌入式軟件測試與通用軟件不同,它是一種特殊的軟件測試,具備自身的一些特點(特別是對于沒有操作系統(tǒng)的嵌入式應用軟件而言):
(1)特定的硬件環(huán)境。
(2)更加關注可靠性、實時性。
(3)對進行性能測試和功能測試外,還需要對內(nèi)存進行測試。
(4)在嵌入式軟件和硬件集成測試完成之后,并不代表測試全部完成,需要對其進行產(chǎn)品測試。
2.嵌入式軟件測試方法
本文重點介紹了針對嵌入式軟件的幾種測試方法:靜態(tài)分析、軟件質(zhì)量度量、性能分析、內(nèi)存分析、覆蓋率分析、單元/集成測試、系統(tǒng)測試。
2.1靜態(tài)分析
靜態(tài)分析是一種利用測試工具對代碼進行的機械性和程序化的分析方法。靜態(tài)分析是直接對源代碼進行代碼走讀、靜態(tài)掃描和分析,不需要編譯或運行代碼,也不會受到其他缺陷和其他模塊的影響。
工具舉例:PolySpace工具是一種嵌入式軟件的靜態(tài)分析工具。它包括PolySpace Bug Finder和PolySpace Code Prover兩個模塊。PolySpace Bug Finder是靜態(tài)代碼分析軟件,可以發(fā)現(xiàn)C/C++代碼中的各類缺陷,包括運行時錯誤,數(shù)據(jù)流問題,編程問題等各類代碼缺陷。PolySpace Code Prover使用抽象解釋和靜態(tài)分析方法來證明,識別和分析運行時錯誤,例如溢出,除零和指針的越界。
2.2軟件質(zhì)量度量
軟件質(zhì)量度量是衡量軟件是否符合需求、標準的重要體現(xiàn),它的目的在于利用度量來改進軟件過程。要確保軟件的整體質(zhì)量,就需要在各個環(huán)節(jié)嚴格控制。
工具舉例:很多嵌入式軟件是用C或C++語言編寫,但編程語言本身并不安全,QAC/QAC++是一種代碼靜態(tài)分析工具,它的靜態(tài)分析能力包括:質(zhì)量度量和軟件結構分析。
2.3性能分析
近年來,嵌入式系統(tǒng)被廣泛應用于汽車、家電、通信、制造等各個領域,領域間的競爭也激發(fā)了嵌入式技術的快速發(fā)展,對軟件性能分析是嵌入式開發(fā)過程中至關重要的一部分,嵌入軟件的性能分析是嵌入式環(huán)境下重要的測試方法。
工具舉例:RapiTime是一種軟件運行時間評估工具:它能夠進行軟件時間性能的測量,通過分析得出最差執(zhí)行時間數(shù)據(jù),并為代碼優(yōu)化提供指導。它的特點包括檢查不同的函數(shù)對于最差、最優(yōu)以及平均執(zhí)行時間的影響;通過大量調(diào)用來查看執(zhí)行時間的變化;對于函數(shù)自身的上下文、循環(huán)以及數(shù)據(jù)塊進行分析等。
2.4內(nèi)存分析
嵌入式系統(tǒng)的內(nèi)存是有限的,但對實時性要求又很高。內(nèi)存問題主要包括內(nèi)存泄露、內(nèi)存崩潰、內(nèi)存碎片。其中內(nèi)存泄露問題尤為嚴重,它會導致系統(tǒng)可用內(nèi)存減少,甚至導致系統(tǒng)崩潰。
現(xiàn)在已經(jīng)有許多工具來解決內(nèi)存泄露問題,如Mtrace、 Memwatch、Purify等。這些工具使用庫跟蹤、動態(tài)檢測、程序插樁等技術來發(fā)現(xiàn)和定位內(nèi)存泄露的問題。
2.5覆蓋率分析
覆蓋率測試(也成邏輯測試)是度量測試完整性和查找軟件問題的必要手段,是測試有效性的度量。覆蓋率測試的目的是確保軟件所有的程序至少被執(zhí)行一次,盡可能全的覆蓋軟件程序的各個語句及其分支結構,以便發(fā)現(xiàn)軟件中的錯誤和問題。
工具舉例:RapiCover 是一款基于目標硬件的嵌入式軟件的測試覆蓋率分析工具, 針對所使用的測試用例給出對應的現(xiàn)場測試覆蓋率信息,其插樁點的開銷極小,并能針對目標板的實際情況提供靈活的支持方式。它的特點包括:支持C、C++、Ada編程語言;極小的時間開銷;語句覆蓋,變量定義、條件判斷或循環(huán)等。
2.6單元/集成測試
嵌入式軟件的單元測試大多是在宿主機環(huán)境下進行的,只有少數(shù)情況下需要在目標機環(huán)境下進行。單元測試主要是進行白盒測試,應盡可能地測試每一個函數(shù),每一個條件分支、每一個程序語句,提高代碼的測試覆蓋率。
在單元測試完成后,接下來需要進行集成測試。集成測試又稱為組裝測試,是將各模塊合成一個組件,并測試它們間的接口。
工具舉例:Tessy軟件是一款專門針對嵌入式軟件動態(tài)測試的工具。它可以對C/C++代碼進行單元測試和集成測試。
2.7 系統(tǒng)測試
嵌入式軟件系統(tǒng)測試的目的與通用軟件類似,都是通過與需求做比較來發(fā)現(xiàn)軟件缺陷。嵌入式軟件的系統(tǒng)測試應綜合運行各種測試用例設計方法,并根據(jù)需求規(guī)格說明書來設計,在目標機環(huán)境下運行。
系統(tǒng)測試階段除了功能測試外,還應該包括意外測試、破壞性測試、性能測試等。
在系統(tǒng)測試中,隨機測試是比較經(jīng)濟有效的一種測試方法。將隨機測試結果和操作規(guī)范的要求作比較,還可以得到軟件可靠性的估計。有效地將隨機抽樣測試與其他測試技術結合可以產(chǎn)生更強大和更高效的測試策略。
結語
本文歸納總結了嵌入式軟件的測試方法,并在不同的測試方法中列舉了當前市場上的適用于嵌入式軟件的測試工具,希望能夠?qū)V大從業(yè)者有所參考。
參考文獻
[1]康一梅.嵌入式軟件測試[M].北京:機械工業(yè)出版社,2010:39-40.
[2]MathWorks引入兩款Polyspace代碼驗證新產(chǎn)品[J]. Microcontrollers & Embedded Systems,2013:86-87.
[3]梁倩.一種基于QAC和Klocwork軟件的靜態(tài)測試方法[J].計算機與網(wǎng)絡,2012(10):58-60.
[4]張鵬.嵌入式軟件內(nèi)存泄露檢測方法研究[J].計算機工程與應用, 2013(14):56-59.
[5]孫韜敏.基于隱馬爾可夫模型的內(nèi)存碎片檢測機制[J].計算機應用,2014(S2):224-226.
[6]孫隴平.嵌入式軟件覆蓋率測試的研究與應用[J].現(xiàn)代電子技術,2014(18):67-69.endprint