• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      宿主環(huán)境下嵌入式軟件白盒測(cè)試方法

      2014-07-18 11:53:37王忠民
      關(guān)鍵詞:分析器嵌入式軟件覆蓋率

      范 琳, 王忠民

      (西安郵電大學(xué) 計(jì)算機(jī)學(xué)院, 陜西 西安 710121)

      宿主環(huán)境下嵌入式軟件白盒測(cè)試方法

      范 琳, 王忠民

      (西安郵電大學(xué) 計(jì)算機(jī)學(xué)院, 陜西 西安 710121)

      針對(duì)嵌入式系統(tǒng)軟硬件開發(fā)不同步的問題,提出一種宿主環(huán)境下嵌入式軟件白盒測(cè)試方法。采用基于順序塊的插樁方法來實(shí)現(xiàn)語句覆蓋測(cè)試,采用基于邏輯樹的插樁方法來實(shí)現(xiàn)分支覆蓋測(cè)試,在被測(cè)程序運(yùn)行過程中由嵌入式模擬器實(shí)時(shí)發(fā)送樁信息到分析器,由分析器計(jì)算得到語句與分支覆蓋率。實(shí)驗(yàn)表明,該方法能實(shí)時(shí)獲取嵌入式軟件測(cè)試過程中的語句和分支覆蓋率,測(cè)試效果良好。

      嵌入式模擬器; 順序塊; 邏輯樹; 插樁; 白盒測(cè)試

      隨著嵌入式系統(tǒng)的廣泛應(yīng)用,人們對(duì)嵌入式設(shè)備的穩(wěn)定性和可靠性提出了更高的要求。嵌入式系統(tǒng)的軟件與目標(biāo)硬件緊密相關(guān),一般在原型板調(diào)試時(shí)才開始進(jìn)行底層嵌入式軟件的測(cè)試調(diào)試工作[1-2]。為了加快項(xiàng)目的開發(fā)進(jìn)度,確保嵌入式軟件的質(zhì)量,應(yīng)該在硬件原型板制板之前開始嵌入式軟件模塊調(diào)試,即在沒有硬件原型板時(shí)先盡可能地調(diào)試并解決嵌入式軟件編程方面的錯(cuò)誤。由于目標(biāo)機(jī)與宿主機(jī)硬件環(huán)境不同,使用的是不同體系結(jié)構(gòu)的處理器,嵌入式軟件無法在宿主機(jī)上直接運(yùn)行與測(cè)試[3-4],將嵌入式模擬器應(yīng)用于嵌入式軟件的開發(fā)與測(cè)試,軟件在模擬器上運(yùn)行和測(cè)試[5],能使得軟件與硬件并行開發(fā)。

      目前實(shí)用的嵌入式系統(tǒng)測(cè)試平臺(tái)主要由國(guó)外廠商開發(fā),比較具有代表性的測(cè)試平臺(tái)有Teleloglc公司的Logi-scope[6],Metrowerks公司的CodeTest[7],Windriver公司的CoverageScope和IPL公司的Cantata等[8]。但一套測(cè)試系統(tǒng)價(jià)格往往高達(dá)數(shù)十萬甚至上百萬美元,極大增加了嵌入式系統(tǒng)的開發(fā)成本。目前國(guó)內(nèi)軟件測(cè)試研究進(jìn)行的比較少,深圳領(lǐng)測(cè)科技有限公司推出嵌入式產(chǎn)品白盒測(cè)試工具VcTester[4],非開源免費(fèi)軟件。以上嵌入式測(cè)試平臺(tái)功能復(fù)雜,安裝與使用門檻較高,不方便使用。

      本文采用ARM公司提供的嵌入式模擬器ARMulator[9]來搭建嵌入式測(cè)試平臺(tái),提出一種針對(duì)嵌入式軟件白盒測(cè)試的自動(dòng)插樁方法,能在代碼動(dòng)態(tài)測(cè)試過程中,實(shí)時(shí)獲取程序的語句和分支覆蓋率。

      1 工作原理

      在宿主機(jī)上搭建嵌入式測(cè)試平臺(tái),內(nèi)部加載嵌入式模擬器,使得嵌入式軟件具備運(yùn)行環(huán)境。在進(jìn)行白盒測(cè)試時(shí),國(guó)際上一般采用插樁的方式,測(cè)試過程中首先對(duì)被測(cè)程序進(jìn)行插樁,插入的樁信息就像是播撒在程序內(nèi)部的多個(gè)傳感器,在程序運(yùn)行過程中能同步的、實(shí)時(shí)的輸出預(yù)設(shè)的樁信息[10-13]。使用樁信息分析器接收樁信息,并進(jìn)行分析和計(jì)算,能實(shí)時(shí)獲取整個(gè)程序運(yùn)行過程中的語句覆蓋和分支選擇情況?;谒拗髌脚_(tái)的嵌入式軟件測(cè)試構(gòu)架如圖1所示[11]。

      圖1 基于宿主平臺(tái)的嵌入式軟件測(cè)試構(gòu)架

      2 嵌入式軟件白盒測(cè)試方法

      先將被測(cè)程序劃分順序塊后,按其結(jié)構(gòu)生成邏輯樹,再進(jìn)行插樁,被測(cè)程序運(yùn)行過程中將樁信息發(fā)送出來,以實(shí)現(xiàn)白盒測(cè)試。

      2.1 被測(cè)程序的處理流程

      目前基于ARM的嵌入式軟件開發(fā)以C語言以為主,考慮嵌入式C程序測(cè)試,被測(cè)程序的處理流程如圖2所示。首先對(duì)被測(cè)程序進(jìn)行預(yù)處理,包括代碼規(guī)范化和順序塊劃分,然后對(duì)規(guī)范化的程序進(jìn)行插樁、編譯、鏈接,生成可執(zhí)行文件,加載到嵌入式模擬器,運(yùn)行過程中實(shí)時(shí)將樁信息發(fā)送出來,經(jīng)分析器獲取并處理,獲得程序覆蓋率。整個(gè)處理流程分為3步。

      (1) 對(duì)源程序進(jìn)行規(guī)范化,規(guī)范化的過程包括了詞法分析、語法分析和代碼整理。具體任務(wù)為:識(shí)別源程序中的各個(gè)基本的語法單元,刪除無用的空格、tab、回車鍵和注釋,將沒有加上“{、}”的單條分支語句或者循環(huán)語句加上“{、}”,將程序劃歸為統(tǒng)一的格式。

      (2) 對(duì)規(guī)范化后的程序進(jìn)行順序塊劃分,并統(tǒng)計(jì)每個(gè)順序塊的信息:塊起止行號(hào)、塊內(nèi)語句數(shù)、順序塊總數(shù)等,這個(gè)過程在插樁之前進(jìn)行,避免在樁函數(shù)中進(jìn)行順序塊的統(tǒng)計(jì),降低了插樁對(duì)被測(cè)程序的影響,以減少樁函數(shù)對(duì)測(cè)試效果的影響。

      (3) 測(cè)試人員選擇不同的白盒測(cè)試方法,由測(cè)試平臺(tái)自動(dòng)插入不同的樁函數(shù),樁函數(shù)由嵌入式C撰寫,經(jīng)過編譯、鏈接后,生成嵌入式映像文件,能運(yùn)行于嵌入式模擬器之上。在動(dòng)態(tài)測(cè)試階段通過運(yùn)行目標(biāo)代碼將樁信息發(fā)送至樁信息分析器,以獲取程序運(yùn)行過程中的語句、分支覆蓋率。

      圖2 被測(cè)程序處理流程

      2.2 劃分順序塊

      在插樁時(shí),選擇插樁位置很重要。為了獲得程序運(yùn)行中的語句覆蓋率,需得到語句的運(yùn)行情況。將被測(cè)程序劃分為若干順序塊,針對(duì)順序塊進(jìn)行插樁。

      順序塊可定義為若干相連順序語句的集合,是一段不包含任何分支、循環(huán)或函數(shù)調(diào)用的順序程序段;只有一個(gè)入口語句和一個(gè)出口語句,一個(gè)順序塊中所有語句的執(zhí)行次數(shù)相同。在程序插樁時(shí),只需對(duì)順序塊的開始或結(jié)尾處插樁即可,從而避免了對(duì)每條語句的重復(fù)插樁,減少了測(cè)試過程對(duì)程序運(yùn)行的影響。一個(gè)順序塊可以表示為

      Block = { line1;

      line2;

      ……

      linei;}

      遍歷整個(gè)程序,統(tǒng)計(jì)可執(zhí)行語句的總行數(shù),并進(jìn)行順序塊劃分。以下語句均不是可執(zhí)行語句,不在統(tǒng)計(jì)的范疇內(nèi):頭文件的引用所在行、函數(shù)的聲明、宏定義、函數(shù)定義的函數(shù)名所在行、每個(gè)函數(shù)剛開始的變量定義所在行、單獨(dú)的大括號(hào)作為一行及空行。

      從第一條可執(zhí)行代碼開始處理,遇到以下內(nèi)容時(shí)當(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語句;

      在對(duì)被測(cè)程序進(jìn)行順序塊劃分后,針對(duì)每個(gè)被測(cè)程序建立分塊信息

      Bl[n]={n,Start,End,Lines}(n=0,1,…,N-1),

      其中N為總分塊數(shù),n是順序塊編號(hào),Start是起始行號(hào),End是結(jié)束行號(hào),Lines是該順序塊的行數(shù),滿足

      (Bl[n]→Lines)=

      (Bl[n]→End)-(Bl[n]→Start)+1;

      分塊后在源程序頭添加全局變量的定義和樁函數(shù)的聲明

      staticintblock= 0;

      voidsendstub();

      在每個(gè)塊結(jié)束的位置插入下列語句,其中n為當(dāng)前塊的塊號(hào),sendstub函數(shù)發(fā)送信息到樁信息分析器

      block= n;

      sendstub(block);

      以上插樁過程由函數(shù)自動(dòng)進(jìn)行。在進(jìn)行語句覆蓋測(cè)試時(shí),先發(fā)送Bl[n]信息到樁信息分析器。然后在程序運(yùn)行過程中,實(shí)時(shí)由樁函數(shù)sendstub發(fā)送當(dāng)前執(zhí)行的塊號(hào)到樁信息分析器,以計(jì)算實(shí)時(shí)的語句覆蓋率。

      2.3 生成邏輯樹

      劃分順序塊后,對(duì)整個(gè)程序進(jìn)行邏輯分析。當(dāng)遇到if-else、switch、while、for、do-while語句時(shí),分別生成下列邏輯樹。

      邏輯樹可定義為用于表示整個(gè)程序流程的有向圖,其中邊表示程序運(yùn)行的順序,圓形表示程序中的模塊,實(shí)心圓點(diǎn)表示程序中的分支。對(duì)每個(gè)模塊進(jìn)行迭代處理,使得每個(gè)模塊都是順序塊時(shí),邏輯樹生成完畢。

      依圖3劃分邏輯樹,其中圖3(a)表示if-else分支程序的邏輯樹,圖3(b)表示while,for循環(huán)程序的邏輯樹,圖3(c)表示switch多分支結(jié)構(gòu)的邏輯樹,圖3(d)表示do-while語句的邏輯樹。

      (a)if-else語句邏輯樹 (b)while、for語句邏輯樹

      (c)switch語句邏輯樹 (d)do-while語句邏輯樹

      圖3 不同程序結(jié)構(gòu)的邏輯樹

      針對(duì)每個(gè)被測(cè)程序建立分支信息

      Br[m]={m,Style,is_loop}(m=0,1,…,M-1),

      其中M為總分支數(shù),m是分支編號(hào),Style是分支的類型,用不同數(shù)字分別表示if,if-else,switch,while,for,do-while,is_loop表示該分支是否為循環(huán)。

      在源程序頭添加全局變量定義和樁函數(shù)聲明

      staticintbranch= 0;

      voidsendstub();

      在每個(gè)塊結(jié)束的位置插入語句,其中n為當(dāng)前塊的塊號(hào)

      branch= n;

      sendstub(branch);

      在進(jìn)行分支覆蓋測(cè)試時(shí),先發(fā)送Br(m)信息到樁信息分析器。然后在程序運(yùn)行過程中,實(shí)時(shí)由樁函數(shù)sendstub發(fā)送branch信息到樁信息分析器,以計(jì)算實(shí)時(shí)的分支覆蓋率。

      2.4 樁信息發(fā)送與接收

      基于模擬器的嵌入式軟件測(cè)試中,一個(gè)難點(diǎn)就是如何獲取樁信息。一般采用的方法都是將樁信息寫入文件,在測(cè)試結(jié)束后通過分析文件來獲得最終的語句或分支覆蓋率。這種方法不能實(shí)時(shí)獲取樁信息,而程序測(cè)試過程中,其覆蓋率變化曲線的轉(zhuǎn)折點(diǎn)一般都包含重要信息,比如某些很少被執(zhí)行的語句在輸入特殊的測(cè)試用例時(shí)被執(zhí)行了。獲取這些信息對(duì)于動(dòng)態(tài)測(cè)試具有很重要的意義,因此實(shí)時(shí)獲取樁信息來繪制覆蓋率變化曲線很重要。

      本文采用了進(jìn)程間通信的方式,在嵌入式模擬器中維護(hù)一塊共享內(nèi)存,每次樁函數(shù)將要發(fā)送的信息寫入共享內(nèi)存,并通過windows消息通知樁信息分析器來取走數(shù)據(jù)。這樣樁信息分析器就能實(shí)時(shí)獲取樁數(shù)據(jù),并繪制出實(shí)時(shí)的覆蓋率曲線。

      2.5 樁信息分析

      在每個(gè)順序塊后調(diào)用樁函數(shù),樁函數(shù)的作用是發(fā)送樁信息到樁信息分析器,由樁信息分析器實(shí)時(shí)分析程序運(yùn)行過程中的覆蓋率。為盡量減少模擬器和樁信息分析器之間的數(shù)據(jù)傳輸,樁函數(shù)只需將當(dāng)前順序塊號(hào)i發(fā)送給樁信息分析器,當(dāng)執(zhí)行到樁函數(shù)時(shí),證明當(dāng)前順序塊已被完全執(zhí)行,樁信息分析器就能及時(shí)更新其程序覆蓋率的值。

      在語句覆蓋測(cè)試中,設(shè)樁信息分析器在測(cè)試過程中動(dòng)態(tài)獲取的信息為{i1,i2,…,ik},則順序塊的執(zhí)行順序?yàn)閧i1,i2,…,ik},其中如果有重復(fù)塊號(hào)說明該塊被執(zhí)行了不止一次。其中的不重復(fù)的塊號(hào)組成集合φ,則語句覆蓋率Cs為

      在分支覆蓋測(cè)試中,設(shè)樁信息分析器在測(cè)試過程中動(dòng)態(tài)獲取的信息為{j1,j2,…,jl},此即分支的執(zhí)行順序,其中不重復(fù)的分支號(hào)組成集合γ,則語句覆蓋率Cb為

      其中Bi表示所有分支的語句數(shù),Bj表示被執(zhí)行分支的語句數(shù)。

      3 系統(tǒng)實(shí)現(xiàn)

      基于PC平臺(tái),windows7.0操作系統(tǒng),開發(fā)出嵌入式測(cè)試平臺(tái)ARM-Test,如圖4所示。在平臺(tái)上打開單個(gè)嵌入式.c文件或.mcp工程文件,對(duì)文件進(jìn)行規(guī)范化、順序塊劃分、生成邏輯樹、插樁、編譯、鏈接和運(yùn)行,以實(shí)現(xiàn)語句覆蓋測(cè)試和分支覆蓋測(cè)試。對(duì)4段典型的含有循環(huán)和分支的程序進(jìn)行測(cè)試,其語句覆蓋率和分支覆蓋率如圖5和表1所示。

      圖4 ARM-Test界面

      (a) 程序1的語句(上)和分支覆蓋率(下)

      (b) 程序2的語句(上)和分支覆蓋率(下)

      (c) 程序3的語句(上)和分支覆蓋率(下)

      (d)程序4的語句(上)和分支覆蓋率(下)

      圖5 4段程序的語句覆蓋率和分支覆蓋率

      表1 4段程序的語句與分支覆蓋率曲線的轉(zhuǎn)折點(diǎn)及樁號(hào)

      覆蓋情況程序1語句覆蓋分支覆蓋程序2語句覆蓋分支覆蓋程序3語句覆蓋分支覆蓋程序4語句覆蓋分支覆蓋樁號(hào)11111111轉(zhuǎn)折點(diǎn)33%100%20%100%33%100%8%25%樁號(hào)22292轉(zhuǎn)折點(diǎn)67%40%67%73%50%樁號(hào)22352103轉(zhuǎn)折點(diǎn)100%60%100%92.5%75%樁號(hào)2024轉(zhuǎn)折點(diǎn)100%100%

      從測(cè)試曲線和曲線轉(zhuǎn)折點(diǎn)可以看出,對(duì)于4段程序,測(cè)試平臺(tái)均能準(zhǔn)確給出程序執(zhí)行過程中的語句和分支覆蓋率。以往測(cè)試平臺(tái)只能給出最終的覆蓋率,本文開發(fā)的系統(tǒng)能實(shí)時(shí)給出程序運(yùn)行過程中的覆蓋率,并顯示覆蓋率曲線中的轉(zhuǎn)折點(diǎn),更有利于測(cè)試人員發(fā)現(xiàn)被測(cè)程序的問題。

      4 結(jié)束語

      提出一種宿主環(huán)境下嵌入式軟件白盒測(cè)試方法,并實(shí)現(xiàn)了嵌入式測(cè)試平臺(tái)ARM-Test,能實(shí)時(shí)給出程序運(yùn)行過程中的覆蓋率,并顯示覆蓋率曲線中的轉(zhuǎn)折點(diǎn),方便測(cè)試人員發(fā)現(xiàn)問題,解決了嵌入式系統(tǒng)硬件原型平臺(tái)沒有開發(fā)出來之前嵌入式軟件的開發(fā)與測(cè)試問題。

      [1] 盛云龍.基于組合覆蓋的嵌入式軟件測(cè)試平臺(tái)研制[D]. 哈爾濱工業(yè)大學(xué), 2013:1-5.

      [2] 葉永鑫. 嵌入式軟件測(cè)試平臺(tái)的研究與實(shí)現(xiàn)[D]. 北京交通大學(xué), 2010:3-6.

      [3] 呂金和. 嵌入式軟件測(cè)試[J]. 軟件導(dǎo)刊, 2010,9(9):40-41.

      [4] 王熒. 嵌入式軟件可靠性測(cè)試工具的研究與實(shí)現(xiàn)[D]. 成都:電子科技大學(xué), 2009:3-5.

      [5] Bill Blunden. 虛擬機(jī)的設(shè)計(jì)與實(shí)現(xiàn)[M]. 北京:機(jī)械工業(yè)出版社,2003:20-150.

      [6] 蔣崇武, 楊順昆, 劉斌. 面向嵌入式軟件測(cè)試的仿真建模[J]. 計(jì)算機(jī)工程, 2008,2(34):87-89.

      [7] 祝義. 嵌入式軟件需求規(guī)約到軟件體系結(jié)構(gòu)模型的轉(zhuǎn)換研究[D]. 南京航空航天大學(xué), 2011:7-8

      [8] Alex Heunhe Han, Yong-Ho Ahn, Ki-Seok Chung. Virtual ARM Simulation Platform for Embedded System Developers[C]//ITC-CSCC, Yamaguchi, Japan, 2008:253-256.

      [9] 周立功. ARM嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社, 2007:50-60.

      [10] 范琳, 王忠民, 王海. 基于嵌入式系統(tǒng)模擬器的測(cè)試平臺(tái)構(gòu)架[J]. 微計(jì)算機(jī)信息, 2010(17):61-62.

      [11] 范琳, 王勁松, 王文浪. 基于嵌入式模擬器的樁數(shù)據(jù)獲取模型研究[J]. 東北大學(xué)學(xué)報(bào), 2011,32(1A):61-65.

      [12] 王忠民,周愛玲,范琳. 基于樹形控件的測(cè)試工程管理架構(gòu)[J]. 西安郵電學(xué)院學(xué)報(bào), 2011,16(2):26-28.

      [13] 張曉暉,王忠民,王文浪. 嵌入式軟件靜態(tài)測(cè)試技術(shù)研究[J]. 西安郵電學(xué)院學(xué)報(bào), 2011,16(2):38-41.

      [責(zé)任編輯:祝劍]

      Research on host-based white-box testing of embedded software

      FAN Lin, WANG Zhongmin

      (School of Computer Science and Technology, Xi’an University of Posts and Telecommunications, Xi’an 710121, China)

      An embedded software testing method based on hosting platform is proposed for in-depth study of white-box testing of embedded software technology. An instrumentation method based on sequence block is brought forward to do statement coverage testing, which can effectively reduce the number of stubs and thus reduce the impact of the testing process. An instrumentation method based on Logic tree is proposed to do branch coverage test. After instrumentation, the program is run on ARMulator. Stub information is analysed by the stub receiver in real time to get the statement and branch coverage. An embedded software testing platform is developed for the ARM-Test. The experiemtns show that ARM-Test can get real-time statement and branch coverage, and do effective white-box testing.

      embedded system simulator, sequence block, logic tree, instrumentation, white-box testing

      10.13682/j.issn.2095-6533.2014.05.021

      2014-04-18

      國(guó)家自然科學(xué)基金資助項(xiàng)目(61373116);西安郵電大學(xué)青年基金資助項(xiàng)目(103-0458)

      范琳(1982-),女,碩士,講師,從事嵌入式測(cè)試系統(tǒng)、機(jī)器學(xué)習(xí)研究。E-mail:fanlin@xupt.edu.cn 王忠民(1967-),男,博士,教授,從事人工智能、嵌入式系統(tǒng)等研究。E-mail:zmwang@xupt.edu.cn

      TG 335.58

      A

      2095-6533(2014)05-0106-06

      猜你喜歡
      分析器嵌入式軟件覆蓋率
      民政部等16部門:到2025年村級(jí)綜合服務(wù)設(shè)施覆蓋率超80%
      我國(guó)全面實(shí)施種業(yè)振興行動(dòng) 農(nóng)作物良種覆蓋率超過96%
      酒精分析器為什么能分辨人是否喝過酒
      實(shí)時(shí)嵌入式軟件的測(cè)試技術(shù)
      多邊形電極線形離子阱質(zhì)量分析器的結(jié)構(gòu)與性能
      全景相機(jī)遙控器嵌入式軟件V1.0 相關(guān)操作分析
      電子制作(2017年17期)2017-12-18 06:40:56
      應(yīng)用于詞法分析器的算法分析優(yōu)化
      基于噴丸隨機(jī)模型的表面覆蓋率計(jì)算方法
      基于Eclipse的航天嵌入式軟件集成開發(fā)環(huán)境設(shè)計(jì)與實(shí)現(xiàn)
      航天嵌入式軟件浮點(diǎn)運(yùn)算誤差分析與控制
      华容县| 静安区| 烟台市| 胶州市| 沙雅县| 五华县| 利川市| 陆川县| 彭阳县| 沈阳市| 峨山| 新安县| 夏邑县| 吉林市| 淮南市| 闽侯县| 苍山县| 田东县| 马鞍山市| 密山市| 张北县| 滨州市| 陵水| 宜都市| 建昌县| 保定市| 葵青区| 易门县| 扎兰屯市| 砀山县| 苏州市| 甘南县| 绥阳县| 包头市| 奈曼旗| 湛江市| 九寨沟县| 东乡县| 金溪县| 汾西县| 广州市|