何與舟
摘 要:隨著自動(dòng)化技術(shù)的不斷發(fā)展,近年來,嵌入式軟件測試變得越來越重要。由于嵌入式軟件自身的復(fù)雜性、多樣性,軟件開發(fā)成本高、周期短等特點(diǎn),先進(jìn)的軟件測試方法的應(yīng)用是十分必要的。
【關(guān)鍵詞】軟件測試 嵌入式 應(yīng)用
1 抽象解釋技術(shù)方法
近幾年,軟件應(yīng)用日趨完善,軟件功能日益多樣化。在這種背景下,行業(yè)內(nèi)對(duì)嵌入式軟件“釋放關(guān)鍵的運(yùn)行錯(cuò)誤空間,減少測試費(fèi)用”的要求越來越高,所以測試技術(shù)的改進(jìn)迫在眉睫。
抽象解釋是一個(gè)比較成熟,相對(duì)可靠的數(shù)學(xué)方法。有了這種方法,就能在程序的編譯階段靜態(tài)驗(yàn)證軟件的動(dòng)態(tài)屬性。所以可以把它當(dāng)作另一種編譯技術(shù),這種技術(shù)比原有的編譯技術(shù)更加強(qiáng)大。這種編譯技術(shù)可以使測試人員在執(zhí)行一個(gè)軟件之前預(yù)言這個(gè)軟件未來的運(yùn)行情況。綜上所述,抽象解釋可以把傳統(tǒng)的靜態(tài)分析技術(shù)和動(dòng)態(tài)測試有機(jī)的聯(lián)系在一起。對(duì)一個(gè)程序而言,這樣可以在不運(yùn)行它的前提下提供更大范圍的可以重復(fù)利用的動(dòng)態(tài)特性。
在以前,我們?yōu)榱瞬檎页绦蜻\(yùn)行錯(cuò)誤,需要做代碼審查。雖然代碼審查是一個(gè)非常有效的方法,但是它需要花費(fèi)大量的時(shí)間和人力。并且它有著非??量痰囊?,只有經(jīng)驗(yàn)豐富的軟件測試工程師才能有較的查找缺陷。而現(xiàn)在,抽象解釋技術(shù)的引進(jìn),解決了這些難題。
那么,什么是抽象解釋呢?在我看來,首先這項(xiàng)技術(shù)離不開大量的數(shù)學(xué)定理,而這些數(shù)學(xué)定理制定了規(guī)則來服務(wù)于復(fù)雜的動(dòng)態(tài)系統(tǒng)——嵌入式應(yīng)用軟件。這樣,抽象解釋并沒有具體地分析這個(gè)程序的每一個(gè)細(xì)節(jié),而是使用了更加全面的方法——抽象來表示這個(gè)程序的狀態(tài)。而且,它為此指定了使用時(shí)的規(guī)范——對(duì)抽象的解釋,即抽象解釋。
有了抽象解釋,運(yùn)行錯(cuò)誤這個(gè)一直困擾著程序員的難題就基本解開了。當(dāng)使用抽象解釋檢測運(yùn)行錯(cuò)誤的時(shí)候,它會(huì)在這個(gè)程序運(yùn)行、調(diào)試甚至加載之前,就完成對(duì)該程序中所有可能出現(xiàn)的錯(cuò)誤操作的分析與檢測,然后生成一個(gè)運(yùn)行錯(cuò)誤的列表。這一系列操作的結(jié)果會(huì)在最早的測試階段——編譯階段就可以獲得。
就因?yàn)槌橄蠼忉尵哂徐o態(tài)驗(yàn)證應(yīng)用軟件動(dòng)態(tài)特性的功能,所以它有著以下的優(yōu)點(diǎn):
(1)可實(shí)現(xiàn)自動(dòng)化測試,只需要提供源代碼,無需設(shè)計(jì)用例和代碼插樁。
(2)使測試工作提前到編譯階段,錯(cuò)誤發(fā)現(xiàn)的越早,軟件修改的成本就越低,不僅提高了效率,也節(jié)省了財(cái)力人力和整個(gè)軟件的開發(fā)時(shí)間。
(3)與眾不同的檢測方法,可以得到一些以前得不到的結(jié)果。
(4)執(zhí)行徹底,檢測出的錯(cuò)誤都是運(yùn)行錯(cuò)誤。
對(duì)嵌入式軟件測試技術(shù)而言,抽象解釋的引入將會(huì)是一場大的變革,對(duì)當(dāng)前大部分棘手的、無法解決的問題會(huì)有較大的作用和成效。但是,任何技術(shù)都有局限性,不可能是萬能的。這就需要我們長期的實(shí)驗(yàn),驗(yàn)證和完善。作為用戶,我們需要根據(jù)自己的具體需求來選擇適合自己的測試技術(shù)和工具。
2 CODETEST測試方法
CODETEST是專為嵌入式系統(tǒng)設(shè)計(jì)的軟件測試工具。它通過采用和改進(jìn)軟件打點(diǎn)技術(shù),不像純軟件那樣插入一個(gè)函數(shù),而是直接插入一條賦值語句。因此,它的執(zhí)行時(shí)間非常短,對(duì)被檢測系統(tǒng)的影響也非常小。純硬件工具從總線捕獲數(shù)據(jù)的技術(shù),CODETEST也進(jìn)行了采用,并且比其更加完善。它不再使用采樣的方法,而是直接監(jiān)視系統(tǒng)總線,只有程序運(yùn)行到它的插入點(diǎn)時(shí)才會(huì)主動(dòng)在數(shù)據(jù)總線上把數(shù)據(jù)捕捉回來。所以,CODETEST可以同時(shí)對(duì)多個(gè)任務(wù)進(jìn)行分析,而且還可以精確地得出被檢測程序執(zhí)行的最大、最小和平均時(shí)間。對(duì)于各個(gè)函數(shù)或者任務(wù)之間的調(diào)用情況,也能夠精確地顯示出來。同時(shí)它還可以動(dòng)態(tài)地跟蹤內(nèi)存的分配情況。另外,CODETEST還能夠?qū)崟r(shí)的在系統(tǒng)環(huán)境下測試各種覆蓋率指標(biāo),掌握當(dāng)前代碼測試覆蓋的真實(shí)情況。
基于CODETEST的這一種嵌入式軟件測試技術(shù)對(duì)諸如軟件打點(diǎn)技術(shù)、從總線捕捉數(shù)據(jù)技術(shù)等進(jìn)行了改進(jìn)。這些原理上的優(yōu)勢,使得CODETEST測試方法具有了強(qiáng)大的性能分析、內(nèi)存分析、覆蓋率分析和代碼跟蹤能力。如果可以適當(dāng)?shù)亟柚鶦ODETEST測試工具,將可以獲得大量的、實(shí)時(shí)的、可靠的測試結(jié)果,借此來發(fā)現(xiàn)嵌入式軟件運(yùn)行過程以及實(shí)現(xiàn)中的不足之處,并對(duì)其進(jìn)行進(jìn)一步的優(yōu)化、改進(jìn)。
3 探索性測試方法
對(duì)嵌入式系統(tǒng)來說,軟件的作用越來越大。因此,一個(gè)軟件的質(zhì)量,將直接關(guān)系到系統(tǒng)運(yùn)行的成敗,甚至關(guān)系到設(shè)備以及人員的安全。如今用戶對(duì)嵌入式系統(tǒng)軟件質(zhì)量要求越來越高,因此,軟件測試也成為嵌入式系統(tǒng)完成中必不可少的環(huán)節(jié)。
探索性測試可以在短時(shí)間內(nèi),甚至在文檔不完善的情況下,充分發(fā)揮測試人員的經(jīng)驗(yàn)和能力,快速并且高質(zhì)量地完成軟件測試的任務(wù)。到目前為止,這種測試方法已經(jīng)形成了一套管理方法和應(yīng)用模型,并且已經(jīng)在微軟等多個(gè)公司開展了成功的實(shí)踐。可以說,探索性測試方法比其他方法更注重實(shí)用性,所以對(duì)它大部分的研究也都集中于實(shí)際應(yīng)用方面而非理論研究。
嵌入式系統(tǒng)軟件有著一系列現(xiàn)實(shí)問題,比如需求變化快,軟件文檔缺乏,測試周期短等等。而解決這一系列問題,探索性測試就是可行的手段之一。為了讓人們恰當(dāng)?shù)厥褂茫枰e累和總結(jié)探索性測試的一般性應(yīng)用方法體系,并且要探討它與嵌入式系統(tǒng)軟件測試體系的聯(lián)系和沖突。然后在這樣的基礎(chǔ)上,提出更加適用于嵌入式系統(tǒng)軟件測試的探索性測試應(yīng)用模型。
如今,探索性測試已經(jīng)成功在互聯(lián)網(wǎng)和桌面應(yīng)用上完成了實(shí)踐,但是在嵌入式領(lǐng)域的應(yīng)用還并不是很多。所以在進(jìn)行嵌入式系統(tǒng)軟件測試中使用探索性測試技術(shù)時(shí),應(yīng)該注意:
(1)要重視探索性測試的過程管理和注意更新相應(yīng)的文檔。以保證測試過程受控,保留測試階段性成果。
(2)結(jié)合具體的領(lǐng)域的相關(guān)信息,有助于團(tuán)隊(duì)新成員快速熟悉被測系統(tǒng),也可以提高探索性測試的效率。
(3)要針對(duì)特定的測試團(tuán)隊(duì)和項(xiàng)目制定具體的策略。
4 結(jié)語
除了以上說的這三種測試方法,較為先進(jìn)的還有交互式開發(fā)測試方法,使用它的優(yōu)點(diǎn)在于可以更為全面的檢測系統(tǒng),到達(dá)系統(tǒng)深層的部分。另外,我們大部分測試時(shí)測試的都不是單獨(dú)一個(gè)項(xiàng)目,而是許多項(xiàng)目需要同時(shí)進(jìn)行,交互式開發(fā)方法能夠完美的解決這個(gè)問題,可以單項(xiàng)同時(shí)進(jìn)行,大大的減少了測試人員的工作量,節(jié)約了時(shí)間和成本。
這些方法都各有各的優(yōu)勢,但是,不管是哪一種,都得經(jīng)過長期的實(shí)踐研究,需要時(shí)間去改正,去完善。
參考文獻(xiàn)
[1]常碩.抽象解釋技術(shù)在嵌入式軟件測試中的應(yīng)用[J].中國測試技術(shù),2007(06).
[2]任志偉.嵌入式軟件測試技術(shù)研究[J].軟件導(dǎo)刊,2013(09).
[3]王慶江.嵌入式系統(tǒng)及其開發(fā)領(lǐng)域典型特征[J].計(jì)算機(jī)應(yīng)用研究,2002(08).
作者單位
中航工業(yè)金城南京機(jī)電液壓工程研究中心 江蘇省南京市 211106