范琳+王海
摘 要: 深入研究嵌入式軟件的白盒測試技術,提出基于宿主平臺的嵌入式軟件測試構架。針對語句覆蓋測試,提出一種基于順序塊的插樁方法,能有效減少樁的個數,從而減少樁函數對測試過程的影響。針對分支覆蓋率測試,插樁后的被測程序運行在ARMulator上,樁獲取器分析樁信息,得出程序運行中的實時語句覆蓋率。實現了嵌入式軟件測試平臺ARM?Test,實驗證明:該模型能獲取實時的語句覆蓋率,有效進行白盒測試。
關鍵詞: 嵌入式模擬器; 順序塊; 插樁; 白盒測試
中圖分類號: TN710?34; TG335.58 文獻標識碼: 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)的廣泛應用,人們對嵌入式設備的穩(wěn)定性和可靠性提出了更高的要求。由于目標機與宿主機硬件環(huán)境不同,使用的是不同體系結構的處理器,嵌入式軟件無法在宿主機上直接運行與測試[1?4],將嵌入式模擬器應用于嵌入式軟件的開發(fā)與測試,能使得軟件與硬件并行開發(fā)。在宿主機上建立起一個內核與外設均可配置與裁剪的模擬器,使得硬件還沒有開發(fā)出來時,軟件就能在模擬器上運行和測試,就像在真正的硬件系統(tǒng)運行上一樣[5?7]。
本文采用ARM公司提供的源內核模擬器ARMulator搭建嵌入式測試平臺,針對源碼進行基于順序塊的插樁,進行語句覆蓋率測試,能在宿主平臺通過ARMulator實時獲取樁數據并進行分析,得到程序運行過程中的語句覆蓋率,以實現軟硬件開發(fā)的同步,保證嵌入式系統(tǒng)的質量。
1 已有研究
目前實用的嵌入式系統(tǒng)測試平臺主要由國外廠商開發(fā),比較具有代表性的測試平臺有Teleloglc公司的Logi?scope,Metrowerks公司的CodeTest,Windriver公司的CoverageScope和IPL公司的Cantata等。但一套測試系統(tǒng)價格往往高達數萬到十多萬美元,極大增加了嵌入式系統(tǒng)的開發(fā)成本[8?10]。ARM公司提供嵌入式系統(tǒng)模擬器ARMulator,能在宿主機上提供嵌入式軟件運行環(huán)境 [11]。
北京大學、北京航空航天大學進行了一系列的軟件分析和測試工具的研究與開發(fā),研制了一系列的測試工具,代表性的工具有SafePro C/C++,SafePro/java。西北工業(yè)大學在航空軟件仿真測試、并行軟件綜合測試平臺及C/S系統(tǒng)的測試方面進行了許多研究工作并取得一些成果 [1?4]。
2 基于宿主機的嵌入式軟件白盒測試技術
2.1 基于宿主機的嵌入式軟件測試構架
本文提出了基于宿主平臺的嵌入式軟件測試構架。在宿主機上搭建嵌入式測試平臺,內部加載嵌入式模擬器,使得嵌入式軟件具備運行環(huán)境;在進行白盒測試時,首先對被測程序進行插樁,樁函數在程序運行過程中能同步的、實時的輸出預設的樁信息。使用樁信息分析器接收樁信息,并進行分析和計算,能實時獲取整個程序運行過程中的語句覆蓋和分支選擇情況。
2.2 被測程序的處理流程
被測程序的處理流程如圖1所示,具體為:
(1) 對源程序進行規(guī)范化,規(guī)范化的過程包括了詞法分析、語法分析和代碼整理。
(2) 對規(guī)范化后的程序進行順序塊劃分,并統(tǒng)計每個順序塊的信息:塊起止行號、塊內語句數、順序塊總數等。
(3) 由測試平臺自動插入不同的樁函數,經過編譯、鏈接后,生成嵌入式映像文件,能運行于嵌入式模擬器之上。在動態(tài)測試階段通過運行目標代碼將樁信息發(fā)送至樁信息分析器,以獲取程序運行過程中的語句覆蓋率。
圖1 被測程序處理流程
2.3 基于順序塊的插樁技術
本文中將被測程序劃分為若干順序塊,針對順序塊進行插樁。有如下定義:
順序塊:若干相連順序語句的集合,是一段不包含任何分支、循環(huán)或函數調用的順序程序段。一個順序塊中所有語句的執(zhí)行次數相同。在程序插樁時,只需對順序塊的開始或結尾處插樁即可,避免了對每條語句的重復插樁,減少了測試過程對程序運行的影響。
遍歷整個程序,統(tǒng)計可執(zhí)行語句的總行數,并進行順序塊劃分。非可執(zhí)行語句不在統(tǒng)計的范疇內。從第一條可執(zhí)行代碼開始處理,遇到以下內容時當前順序塊結束:
(1) 循環(huán)語句關鍵字for,do,while,do until;
(2) 分支語句關鍵字if,else if,else及end if ;
(3) 函數調用語句;
(4) return語句。
在對被測程序進行順序塊劃分后,針對每個被測程序建立分塊信息[Bl[N]],[N]為總分塊數。
[Bl[n]={n,Start,End,Lines},n∈[0,N) ]
其中[n]是順序塊的編號,[Start]是起始行號,[End]是結束行號,[Lines]是該順序塊的行數。
分塊后在源程序頭添加全局變量的定義和樁函數的聲明:
[staticintblock=0; voidsendstub();]
在每個塊結束的位置插入下列語句,其中[n]為當前塊的塊號,[sendstub]函數發(fā)送信息到樁信息分析器:
[block=n;sendstub(block); ]
以上插樁過程由函數自動進行。在進行語句覆蓋測試時,先發(fā)送[Bl[N]]信息到樁信息分析器。然后在程序運行過程中,實時由樁函數[sendstub]發(fā)送當前執(zhí)行的塊號到樁信息分析器,以計算實時的語句覆蓋率。
本文采用了進程間通信的方式,在嵌入式模擬器中維護一塊共享內存,每次樁函數將要發(fā)送的信息寫入共享內存,并通過Windows消息通知樁信息分析器取走數據。這樣樁信息分析器就能實時獲取樁數據,并繪制出實時的覆蓋率曲線。
在每個順序塊后調用樁函數,樁函數的作用是發(fā)送樁信息到樁信息分析器,由樁信息分析器實時分析程序運行過程中的覆蓋率。為盡量減少模擬器和樁信息分析器之間的數據傳輸,樁函數只需將當前順序塊號[i]發(fā)送給樁信息分析器,當執(zhí)行到樁函數時,證明當前順序塊已被完全執(zhí)行,樁信息分析器就能及時更新其程序覆蓋率的值。
在語句覆蓋測試中,設樁信息分析器在測試過程中動態(tài)獲取的信息為:[{i1,i2,…,ik}?[0,N)],如果有重復塊號說明該塊被執(zhí)行了不止一次。其中不重復塊號組成集合[?],則語句覆蓋率[Cs]為:
[Cs=n∈?Bln→Linesn=0N-1Bln→Lines×100%]
3 系統(tǒng)實現
項目組基于ARM內核模擬器ARMulator開發(fā)嵌入式測試平臺ARM?Test,能實現嵌入式程序的白盒測試,在被測程序或工程經過預處理、插樁、編譯、鏈接后,生成可執(zhí)行文件運行于嵌入式模擬器之上,運行過程中實時將樁信息發(fā)送出來,經分析器獲取并處理,獲得實時的語句覆蓋率和分支覆蓋率。系統(tǒng)界面及測試效果如圖2,圖3所示。
圖2 ARM?Test界面
圖3 某例子程序的語句覆蓋率
4 結 語
本文提出一種基于順序塊的插樁方法,能進行語句覆蓋測試。測試過程中能對樁信息實時處理獲得動態(tài)的語句覆蓋率曲線,以實現軟硬件開發(fā)的同步,保證了嵌入式系統(tǒng)的質量。測試方法僅針對語句覆蓋率,后期還需進行分支覆蓋、條件覆蓋測試。
參考文獻
[1] 盛云龍.基于組合覆蓋的嵌入式軟件測試平臺研制[D].哈爾濱:哈爾濱工業(yè)大學,2013.
[2] 葉永鑫.嵌入式軟件測試平臺的研究與實現[D].北京:北京交通大學,2010.
[3] 呂金和.嵌入式軟件測試[J].軟件導刊,2010(9):40?41.
[4] 王熒.嵌入式軟件可靠性測試工具的研究與實現[D].成都:電子科技大學,2009.
[5] Bill Blunden.虛擬機的設計與實現[M].北京:機械工業(yè)出版社,2003.
[6] 范琳,王忠民,王海.基于嵌入式系統(tǒng)模擬器的測試平臺構架[J].微計算機信息,2010(17):61?62.
[7] 范琳,王忠民,梁琛,等.基于Proemulator的插樁構架研究[J].現代電子技術,2010,33(3):188?190.
[8] 蔣崇武,楊順昆,劉斌.面向嵌入式軟件測試的仿真建模[J].計算機工程,2008,34(4):87?89.
[9] 祝義.嵌入式軟件需求規(guī)約到軟件體系結構模型的轉換研究[D].南京:南京航空航天大學,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)基礎教程[M].北京:北京航空航天大學出版社,2007.