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