范琳+王海
摘 要: 深入研究嵌入式軟件的白盒測試技術(shù),提出基于宿主平臺的嵌入式軟件測試構(gòu)架。針對語句覆蓋測試,提出一種基于順序塊的插樁方法,能有效減少樁的個數(shù),從而減少樁函數(shù)對測試過程的影響。針對分支覆蓋率測試,插樁后的被測程序運(yùn)行在ARMulator上,樁獲取器分析樁信息,得出程序運(yùn)行中的實時語句覆蓋率。實現(xiàn)了嵌入式軟件測試平臺ARM?Test,實驗證明:該模型能獲取實時的語句覆蓋率,有效進(jìn)行白盒測試。
關(guān)鍵詞: 嵌入式模擬器; 順序塊; 插樁; 白盒測試
中圖分類號: TN710?34; TG335.58 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2014)18?0140?03
An instrumentation method based on sequence block for embedded software
white?box testing
FAN Lin1, WANG Hai2
(1. Department of Computer Science and Technology, Xian University of Posts and Telecommunications, Xian 710121, China;
2. School of Information Science & Technology, Northwest University, Xian 710069, China)
Abstract: An embedded software testing framework based on hosting platform is proposed on the basis of in?depth study of the white?box testing technology for embedded softwares. An instrumentation method based on sequence block is brought forward to conduct statement coverage testing, which can effectively reduce the number of stubs, so as to reduce the impact of stubs on the testing process. After instrumentation, the program under test was run on ARMulator. The stub information is analyzed by the stub receiver to get the real?time statement branch coverage. An embedded software testing platform ARM?Test was developed. The experiment results show ARM?Test can get real?time statement branch coverage and do white?box testing effectively.
Keywords: embedded system simulator; sequence block; instrumentation; white?box testing
0 引 言
隨著嵌入式系統(tǒng)的廣泛應(yīng)用,人們對嵌入式設(shè)備的穩(wěn)定性和可靠性提出了更高的要求。由于目標(biāo)機(jī)與宿主機(jī)硬件環(huán)境不同,使用的是不同體系結(jié)構(gòu)的處理器,嵌入式軟件無法在宿主機(jī)上直接運(yùn)行與測試[1?4],將嵌入式模擬器應(yīng)用于嵌入式軟件的開發(fā)與測試,能使得軟件與硬件并行開發(fā)。在宿主機(jī)上建立起一個內(nèi)核與外設(shè)均可配置與裁剪的模擬器,使得硬件還沒有開發(fā)出來時,軟件就能在模擬器上運(yùn)行和測試,就像在真正的硬件系統(tǒng)運(yùn)行上一樣[5?7]。
本文采用ARM公司提供的源內(nèi)核模擬器ARMulator搭建嵌入式測試平臺,針對源碼進(jìn)行基于順序塊的插樁,進(jìn)行語句覆蓋率測試,能在宿主平臺通過ARMulator實時獲取樁數(shù)據(jù)并進(jìn)行分析,得到程序運(yùn)行過程中的語句覆蓋率,以實現(xiàn)軟硬件開發(fā)的同步,保證嵌入式系統(tǒng)的質(zhì)量。
1 已有研究
目前實用的嵌入式系統(tǒng)測試平臺主要由國外廠商開發(fā),比較具有代表性的測試平臺有Teleloglc公司的Logi?scope,Metrowerks公司的CodeTest,Windriver公司的CoverageScope和IPL公司的Cantata等。但一套測試系統(tǒng)價格往往高達(dá)數(shù)萬到十多萬美元,極大增加了嵌入式系統(tǒng)的開發(fā)成本[8?10]。ARM公司提供嵌入式系統(tǒng)模擬器ARMulator,能在宿主機(jī)上提供嵌入式軟件運(yùn)行環(huán)境 [11]。
北京大學(xué)、北京航空航天大學(xué)進(jìn)行了一系列的軟件分析和測試工具的研究與開發(fā),研制了一系列的測試工具,代表性的工具有SafePro C/C++,SafePro/java。西北工業(yè)大學(xué)在航空軟件仿真測試、并行軟件綜合測試平臺及C/S系統(tǒng)的測試方面進(jìn)行了許多研究工作并取得一些成果 [1?4]。
2 基于宿主機(jī)的嵌入式軟件白盒測試技術(shù)
2.1 基于宿主機(jī)的嵌入式軟件測試構(gòu)架
本文提出了基于宿主平臺的嵌入式軟件測試構(gòu)架。在宿主機(jī)上搭建嵌入式測試平臺,內(nèi)部加載嵌入式模擬器,使得嵌入式軟件具備運(yùn)行環(huán)境;在進(jìn)行白盒測試時,首先對被測程序進(jìn)行插樁,樁函數(shù)在程序運(yùn)行過程中能同步的、實時的輸出預(yù)設(shè)的樁信息。使用樁信息分析器接收樁信息,并進(jìn)行分析和計算,能實時獲取整個程序運(yùn)行過程中的語句覆蓋和分支選擇情況。
2.2 被測程序的處理流程
被測程序的處理流程如圖1所示,具體為:
(1) 對源程序進(jìn)行規(guī)范化,規(guī)范化的過程包括了詞法分析、語法分析和代碼整理。
(2) 對規(guī)范化后的程序進(jìn)行順序塊劃分,并統(tǒng)計每個順序塊的信息:塊起止行號、塊內(nèi)語句數(shù)、順序塊總數(shù)等。
(3) 由測試平臺自動插入不同的樁函數(shù),經(jīng)過編譯、鏈接后,生成嵌入式映像文件,能運(yùn)行于嵌入式模擬器之上。在動態(tài)測試階段通過運(yùn)行目標(biāo)代碼將樁信息發(fā)送至樁信息分析器,以獲取程序運(yùn)行過程中的語句覆蓋率。
圖1 被測程序處理流程
2.3 基于順序塊的插樁技術(shù)
本文中將被測程序劃分為若干順序塊,針對順序塊進(jìn)行插樁。有如下定義:
順序塊:若干相連順序語句的集合,是一段不包含任何分支、循環(huán)或函數(shù)調(diào)用的順序程序段。一個順序塊中所有語句的執(zhí)行次數(shù)相同。在程序插樁時,只需對順序塊的開始或結(jié)尾處插樁即可,避免了對每條語句的重復(fù)插樁,減少了測試過程對程序運(yùn)行的影響。
遍歷整個程序,統(tǒng)計可執(zhí)行語句的總行數(shù),并進(jìn)行順序塊劃分。非可執(zhí)行語句不在統(tǒng)計的范疇內(nèi)。從第一條可執(zhí)行代碼開始處理,遇到以下內(nèi)容時當(dāng)前順序塊結(jié)束:
(1) 循環(huán)語句關(guān)鍵字for,do,while,do until;
(2) 分支語句關(guān)鍵字if,else if,else及end if ;
(3) 函數(shù)調(diào)用語句;
(4) return語句。
在對被測程序進(jìn)行順序塊劃分后,針對每個被測程序建立分塊信息[Bl[N]],[N]為總分塊數(shù)。
[Bl[n]={n,Start,End,Lines},n∈[0,N) ]
其中[n]是順序塊的編號,[Start]是起始行號,[End]是結(jié)束行號,[Lines]是該順序塊的行數(shù)。
分塊后在源程序頭添加全局變量的定義和樁函數(shù)的聲明:
[staticintblock=0; voidsendstub();]
在每個塊結(jié)束的位置插入下列語句,其中[n]為當(dāng)前塊的塊號,[sendstub]函數(shù)發(fā)送信息到樁信息分析器:
[block=n;sendstub(block); ]
以上插樁過程由函數(shù)自動進(jìn)行。在進(jìn)行語句覆蓋測試時,先發(fā)送[Bl[N]]信息到樁信息分析器。然后在程序運(yùn)行過程中,實時由樁函數(shù)[sendstub]發(fā)送當(dāng)前執(zhí)行的塊號到樁信息分析器,以計算實時的語句覆蓋率。
本文采用了進(jìn)程間通信的方式,在嵌入式模擬器中維護(hù)一塊共享內(nèi)存,每次樁函數(shù)將要發(fā)送的信息寫入共享內(nèi)存,并通過Windows消息通知樁信息分析器取走數(shù)據(jù)。這樣樁信息分析器就能實時獲取樁數(shù)據(jù),并繪制出實時的覆蓋率曲線。
在每個順序塊后調(diào)用樁函數(shù),樁函數(shù)的作用是發(fā)送樁信息到樁信息分析器,由樁信息分析器實時分析程序運(yùn)行過程中的覆蓋率。為盡量減少模擬器和樁信息分析器之間的數(shù)據(jù)傳輸,樁函數(shù)只需將當(dāng)前順序塊號[i]發(fā)送給樁信息分析器,當(dāng)執(zhí)行到樁函數(shù)時,證明當(dāng)前順序塊已被完全執(zhí)行,樁信息分析器就能及時更新其程序覆蓋率的值。
在語句覆蓋測試中,設(shè)樁信息分析器在測試過程中動態(tài)獲取的信息為:[{i1,i2,…,ik}?[0,N)],如果有重復(fù)塊號說明該塊被執(zhí)行了不止一次。其中不重復(fù)塊號組成集合[?],則語句覆蓋率[Cs]為:
[Cs=n∈?Bln→Linesn=0N-1Bln→Lines×100%]
3 系統(tǒng)實現(xiàn)
項目組基于ARM內(nèi)核模擬器ARMulator開發(fā)嵌入式測試平臺ARM?Test,能實現(xiàn)嵌入式程序的白盒測試,在被測程序或工程經(jīng)過預(yù)處理、插樁、編譯、鏈接后,生成可執(zhí)行文件運(yùn)行于嵌入式模擬器之上,運(yùn)行過程中實時將樁信息發(fā)送出來,經(jīng)分析器獲取并處理,獲得實時的語句覆蓋率和分支覆蓋率。系統(tǒng)界面及測試效果如圖2,圖3所示。
圖2 ARM?Test界面
圖3 某例子程序的語句覆蓋率
4 結(jié) 語
本文提出一種基于順序塊的插樁方法,能進(jìn)行語句覆蓋測試。測試過程中能對樁信息實時處理獲得動態(tài)的語句覆蓋率曲線,以實現(xiàn)軟硬件開發(fā)的同步,保證了嵌入式系統(tǒng)的質(zhì)量。測試方法僅針對語句覆蓋率,后期還需進(jìn)行分支覆蓋、條件覆蓋測試。
參考文獻(xiàn)
[1] 盛云龍.基于組合覆蓋的嵌入式軟件測試平臺研制[D].哈爾濱:哈爾濱工業(yè)大學(xué),2013.
[2] 葉永鑫.嵌入式軟件測試平臺的研究與實現(xiàn)[D].北京:北京交通大學(xué),2010.
[3] 呂金和.嵌入式軟件測試[J].軟件導(dǎo)刊,2010(9):40?41.
[4] 王熒.嵌入式軟件可靠性測試工具的研究與實現(xiàn)[D].成都:電子科技大學(xué),2009.
[5] Bill Blunden.虛擬機(jī)的設(shè)計與實現(xiàn)[M].北京:機(jī)械工業(yè)出版社,2003.
[6] 范琳,王忠民,王海.基于嵌入式系統(tǒng)模擬器的測試平臺構(gòu)架[J].微計算機(jī)信息,2010(17):61?62.
[7] 范琳,王忠民,梁琛,等.基于Proemulator的插樁構(gòu)架研究[J].現(xiàn)代電子技術(shù),2010,33(3):188?190.
[8] 蔣崇武,楊順昆,劉斌.面向嵌入式軟件測試的仿真建模[J].計算機(jī)工程,2008,34(4):87?89.
[9] 祝義.嵌入式軟件需求規(guī)約到軟件體系結(jié)構(gòu)模型的轉(zhuǎn)換研究[D].南京:南京航空航天大學(xué),2011.
[10] HAN Alex Heunhe, AHN Yong?Ho, CHUNG Ki?Seok. Virtual ARM simulation platform for embedded system developers [C]// ITC?CSCC. [S.l.]: ITC, 2008: 253?256.
[11] 周立功.ARM嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社,2007.