蘭婭勛+陸璐
摘 要: 以往的白盒測試插樁方法普遍不能精準(zhǔn)定位到目標(biāo)插樁,語句覆蓋率不符合要求。為了解決這個現(xiàn)象,提出一種基于嵌入式開發(fā)的白盒測試插樁方法。所提方法先對嵌入式開發(fā)的插樁技術(shù)原理進(jìn)行介紹,提出使用在線嵌入式測試軟件CodeTEST進(jìn)行自動插樁的理念。設(shè)計(jì)基于嵌入式開發(fā)的白盒測試插樁進(jìn)程,分程序標(biāo)準(zhǔn)化、插樁順序劃分和覆蓋率分析三步進(jìn)行。并介紹插樁順序塊劃分方法、插樁方位提取規(guī)則以及插樁信息分析方法。實(shí)驗(yàn)結(jié)果表明,所提方法擁有很高的語義覆蓋率和分支覆蓋率。
關(guān)鍵詞: 嵌入式技術(shù); 白盒測試; 插樁技術(shù); CodeTEST
中圖分類號: TN806?34; TP311 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2017)14?0049?03
Abstract: The previous white box testing plugging pile method does not precisely position to the target pile, and its statement coverage rate does not meet the requirements. In order to eliminate this phenomenon, a kind of white?box testing plugging pile method based on embedded development is put forward in this paper. The principle of the pile technology based on the embedded development is introduced. A concept that uses the online embedded testing software CodeTEST the to implement the automatic plugging pile is put forward. The progress of white?box testing plugging pile based on embedded development is designed and divided into three steps of program standardization, inserted sequence division and coverage rate analysis. The plugging pile block partition method, plugging pile orientation extraction rules and plugging pile information analysis method are introduced. The experimental results show that the proposed method has high semantic coverage rate and branch coverage rate.
Keywords: embedded technology; white box testing; insert pile technology; CodeTEST
0 引 言
嵌入式技術(shù)的應(yīng)用價值越來越大,目前已經(jīng)成為熱點(diǎn)研究話題。就現(xiàn)階段而言,嵌入式開發(fā)在軟件測試中的應(yīng)用往往過于重視軟件調(diào)試,隨著用戶對軟件質(zhì)量要求的不斷攀升,軟件測試明顯已經(jīng)不能只做表面功夫,需要更深層次的調(diào)試支持。
白盒測試是軟件測試人員常用的測試方法,以白盒測試為例,以往進(jìn)行的嵌入式開發(fā)代碼插樁普遍無法得到結(jié)構(gòu)相對完整的語義信息,語句覆蓋率不符合要求。造成這種情況的原因是在嵌入式開發(fā)的初期,插樁技術(shù)不能自動完成語義覆蓋[1],此時一旦涉及到目標(biāo)測試環(huán)境的交互開發(fā),白盒測試就不能精準(zhǔn)定位到目標(biāo)插樁。對此,提供一種新的基于嵌入式開發(fā)的白盒測試插樁方法,對以往方法覆蓋率低的缺點(diǎn)進(jìn)行改善,達(dá)到提高白盒測試精度的需求。
1 嵌入式開發(fā)的插樁技術(shù)原理
嵌入式開發(fā)將通過動、靜態(tài)相融合的測試方法取得插樁定位信息,使用在線嵌入式測試軟件CodeTEST進(jìn)行自動插樁[2]。CodeTEST具有在線追蹤和展示能力,幾乎支持所有嵌入式開發(fā)設(shè)備軟硬件平臺。CodeTEST在插樁過程中不用變更原軟件程序代碼,軟件測試人員只需敲定需要進(jìn)行代碼插樁的范圍即可。
圖1為CodeTEST的軟件測試插樁進(jìn)程,將根據(jù)工具鏈的多元組合達(dá)成嵌入式插樁。軟件源代碼在中央控制器的開發(fā)環(huán)境中通過編譯器套件帶動Makefile文件進(jìn)行預(yù)處理。預(yù)處理文件的代碼間隔變寬,更容易向其中插入探測針。同時,預(yù)處理過程也會間接修正錯誤的軟件程序代碼。插樁器在預(yù)處理文件中插入探測針,探測針攜帶定位標(biāo)簽,測試人員能夠通過跟蹤定位標(biāo)簽查看軟件測試進(jìn)程。由于CodeTEST不能直接將編譯代碼寫入定位點(diǎn),因此利用編譯器套件將插樁文件匯編并引入編譯器,通過構(gòu)建編譯程序和鏈接程序自動生成可執(zhí)行代碼,以便對源代碼文件進(jìn)行插樁。
2 基于嵌入式開發(fā)的白盒測試插樁方法
本文提出的基于嵌入式開發(fā)的白盒測試插樁方法先排列好軟件程序插樁順序,再依次進(jìn)行插樁,對插樁信息進(jìn)行分析最后達(dá)成白盒測試。
2.1 基于嵌入式開發(fā)的白盒測試插樁進(jìn)程
目前,軟件程序使用的編譯語言主要是C語言,考慮到白盒測試的特殊性,所提出的基于嵌入式開發(fā)的白盒測試插樁方法設(shè)計(jì)了如圖2所示的基于嵌入式開發(fā)的白盒測試插樁進(jìn)程。軟件程序的預(yù)處理進(jìn)程采用CodeTEST的嵌入式處理方式,先后進(jìn)行程序標(biāo)準(zhǔn)化以及插樁順序的劃分。插樁進(jìn)程分為語句覆蓋插樁和分支覆蓋插樁。對標(biāo)準(zhǔn)化程序進(jìn)行插樁和編譯后,得到可執(zhí)行代碼和插樁信息,進(jìn)而計(jì)算出白盒測試的覆蓋率信息[3]。
2.2 順序塊劃分
在白盒測試中獲取良好的插樁方位是提高覆蓋率的有效方式。插樁順序作為提供插樁方位的前提條件,其原理是在插樁順序中對順序塊進(jìn)行劃分。順序塊是指單純的軟件程序處理代碼,其中不含有循環(huán)語句、外部鏈接以及外部函數(shù),程序的運(yùn)行是一步到位且不重復(fù),只存在一個入口和一個出口[4],在保證探測針數(shù)量最少的情況下,插樁方位也只存在于程序的首端或者尾端,可有效縮短插樁時間,避免語句重復(fù)覆蓋,減少了白盒測試對源代碼的干擾。除以上描述之外,順序塊中也不會含有不可執(zhí)行代碼,這是由嵌入式開發(fā)設(shè)備內(nèi)存小的特性決定的[5]。首端代碼的宏、聲明、定義以及以上代碼所占據(jù)的行列和標(biāo)點(diǎn)都?xì)w屬于不可執(zhí)行代碼的范疇。
對插樁方位進(jìn)行提取需要應(yīng)用到四種規(guī)則,如表1所示。
2.3 插樁信息分析
白盒測試中插樁信息與靜態(tài)數(shù)據(jù)庫進(jìn)行靜態(tài)連接,以交互模擬語言提取探測針得到軟件程序代碼特征,進(jìn)一步生成可執(zhí)行代碼。樁函數(shù)負(fù)責(zé)將插樁信息傳送給CodeTEST進(jìn)行分析,由CodeTEST計(jì)算白盒測試覆蓋率。使用樁函數(shù)還原原有軟件程序,返還白盒測試驅(qū)動指令[6],使用順序塊驅(qū)動樁函數(shù)。在白盒測試中,用表示CodeTEST得到的插樁信息,表示CodeTEST對插樁信息的分析順序,語句覆蓋率表示為式(1),分支覆蓋率表示為式(2),如下: (1)
式中:是進(jìn)行白盒測試軟件程序的序列,共有個程序;,表示插樁信息中的語句總量和已處理的分支數(shù)量;,是僅處理過一個的語句、分支數(shù)量;是可執(zhí)行代碼鏈。
3 實(shí)驗(yàn)結(jié)果與分析
本次實(shí)驗(yàn)的實(shí)驗(yàn)地點(diǎn)為某大學(xué)的計(jì)算機(jī)實(shí)驗(yàn)室,計(jì)算機(jī)系統(tǒng)為Windows XP,運(yùn)存2.21 GHz,內(nèi)存4 GB。在計(jì)算機(jī)上使用虛擬機(jī)搭建出一個軟件測試環(huán)境,數(shù)據(jù)庫使用SqlServer(阿里混合云),Web應(yīng)用服務(wù)器使用Apache。實(shí)驗(yàn)將針對工程設(shè)計(jì)軟件、在線游戲軟件和數(shù)據(jù)恢復(fù)軟件進(jìn)行白盒測試插樁,實(shí)時跟蹤插樁信息,取整體平均的語句覆蓋率與分支覆蓋率數(shù)據(jù)進(jìn)行對比分析。實(shí)驗(yàn)結(jié)果如表2所示。
由表2可知,本次實(shí)驗(yàn)選用本文提出的基于嵌入式開發(fā)的白盒測試插樁方法與基于路徑覆蓋的白盒測試插樁方法、基于ElcEmma的白盒測試插樁方法進(jìn)行對比。在所搭建的實(shí)驗(yàn)平臺中,三種方法均能正常取得語句覆蓋率與分支覆蓋率數(shù)據(jù)。其中,基于路徑覆蓋的白盒測試插樁方法在測試在線游戲軟件時取得的效果最好;基于ElcEmma的白盒測試插樁方法的覆蓋率偏小,未發(fā)揮很大作用;語句覆蓋率與分支覆蓋率最高的是本文方法,能夠很好地對各類軟件進(jìn)行白盒測試插樁。
4 結(jié) 論
本文提出一種基于嵌入式開發(fā)的白盒測試插樁方法,用CodeTEST整體掌控白盒測試插樁進(jìn)程,分析白盒測試覆蓋率,有效改善了以往插樁技術(shù)智能化不足的問題,使其能自動完成語義覆蓋。通過實(shí)驗(yàn)的證明,本文所提方法取得了很高的語義覆蓋率和分支覆蓋率,達(dá)成了提高白盒測試精度的用戶需求。
參考文獻(xiàn)
[1] 徐晴,紀(jì)峰,田正其,等.基于E2PROM數(shù)據(jù)讀寫的智能電能表白盒測試方法[J].電測與儀表,2014,51(3):1?5.
[2] 姚佳瑜.箭載飛控軟件系統(tǒng)最差情況執(zhí)行時間測試研究[J].電腦知識與技術(shù):學(xué)術(shù)交流,2016,12(3):87?89.
[3] 井靖,蔣烈輝,李軼民,等.基于平臺透明化處理的動態(tài)信息提取方法[J].計(jì)算機(jī)應(yīng)用研究,2015,32(10):3009?3013.
[4] 陳佳麗,陳曉潔.基于ElcEmma工具的代碼覆蓋軟件測試技術(shù)研究[J].宜春學(xué)院學(xué)報(bào),2016,38(6):45?48.
[5] 陳佳麗,陳曉潔.靜態(tài)代碼分析在軟件測試中的應(yīng)用研究[J].嘉應(yīng)學(xué)院學(xué)報(bào),2016,34(2):35?39.
[6] 王穎,谷利澤,楊義先,等.EWFT:基于程序執(zhí)行過程的白盒測試工具[J].電子學(xué)報(bào),2014,42(10):2016?2023.