• 
    

    
    

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

      基于仿真的嵌入式軟件白盒覆蓋測試系統(tǒng)設(shè)計(jì)

      2010-06-22 08:19:50楊振興劉久富孫琳
      關(guān)鍵詞:詞法嵌入式軟件測試用例

      楊振興,劉久富,孫琳

      (南京航空航天大學(xué) 自動化學(xué)院,南京210016)

      楊振興(碩士研究生),研究方向?yàn)榍度胧杰浖y試;劉久富,(博士、碩士生導(dǎo)師),研究方向?yàn)檐浖y試技術(shù)與軟件質(zhì)量工程。

      引 言

      隨著嵌入式系統(tǒng)的廣泛應(yīng)用,人們對嵌入式系統(tǒng)軟件的質(zhì)量提出了更高的要求,而作為保證軟件質(zhì)量最有效手段的測試技術(shù),也越來越受到關(guān)注。目前嵌入式軟件的開發(fā)語言以C等高級語言為主,因此,對這些高級語言的測試顯得尤為重要[1]。

      目前實(shí)用的嵌入式系統(tǒng)測試平臺主要由國外廠商開發(fā),比較具有代表性的測試平臺有 Teleloglc公司的 Logiscope、Metrowerks公司的 CodeTest,Windriver公司的CoverageScope和IPL公司的Cantata等。國外廠商的嵌入式系統(tǒng)測試平臺功能較強(qiáng),技術(shù)較先進(jìn),但一套測試系統(tǒng)價(jià)格往往高達(dá)數(shù)萬到十多萬美元,極大增加了嵌入式系統(tǒng)的開發(fā)成本,無法得到普遍的應(yīng)用,影響了國內(nèi)嵌入式系統(tǒng)的開發(fā)質(zhì)量[2]。

      國內(nèi)的嵌入式系統(tǒng)測試平臺有基于目標(biāo)開發(fā)的測試系統(tǒng)。電子科技大學(xué)研究了基于目標(biāo)的嵌入式軟件測試系統(tǒng),實(shí)現(xiàn)了對匯編語言進(jìn)行自動插裝,并實(shí)現(xiàn)基本的覆蓋測試功能。但由于嵌入式軟件需要基于硬件電路進(jìn)行調(diào)試,當(dāng)軟件程序?qū)懭胗布娐泛?如果電路工作不正常甚至無法工作,則難以斷定問題所在,這就限制了嵌入式軟件測試必須按照先硬件后軟件的模式進(jìn)行[3]。

      本系統(tǒng)實(shí)現(xiàn)了基于仿真的嵌入式C語言軟件覆蓋測試分析。通過有效的詞法語法分析、自動插裝、測試用例的生成和加入、動態(tài)仿真運(yùn)行及覆蓋報(bào)告分析等模塊對源代碼進(jìn)行覆蓋分析,縮短了嵌入式系統(tǒng)開發(fā)周期,有效地解決了傳統(tǒng)手工測試程序運(yùn)行效率低、繁瑣等問題,保證了嵌入式軟件系統(tǒng)高效穩(wěn)定的運(yùn)行。

      1 嵌入式軟件測試系統(tǒng)框圖

      嵌入式軟件測試系統(tǒng)的結(jié)構(gòu)框圖如圖1所示。它主要由5部分組成:程序的預(yù)處理過程(包括詞法語法分析)、程序的自動插裝過程、測試用例的加入、動態(tài)仿真運(yùn)行及覆蓋報(bào)告分析[4]。

      被測試程序首先經(jīng)過預(yù)處理。由于源程序中存在宏定義、文件包含和條件編譯等預(yù)處理命令,因此在進(jìn)行詞法分析前必須進(jìn)行預(yù)處理,將宏展開,以利于查找變量。詞法分析是將預(yù)處理階段產(chǎn)生的中間代碼分解成單獨(dú)的詞的表示,語法分析是將輸入字符串識別為單詞符號流,主要用來確定插裝的位置,在一些關(guān)鍵的字段和函數(shù)處插入,然后編譯后產(chǎn)生含有插裝函數(shù)的目標(biāo)文件。

      圖1 嵌入式測試系統(tǒng)框圖

      在動態(tài)仿真運(yùn)行過程中,將測試用例注入到分析后的目標(biāo)文件中,動態(tài)運(yùn)行后,將產(chǎn)生的測試結(jié)果存放到記錄文件或緩沖區(qū)中,此時(shí)可以動態(tài)生成覆蓋率報(bào)告和GUI顯示,并將測試的結(jié)果與測試用例庫生成的測試用例期望值作比較,得出測試結(jié)果,并將測試結(jié)果保存與打印。

      2 功能模塊設(shè)計(jì)

      2.1 詞法語法分析模塊

      (1)預(yù)處理

      在源程序中,空白符、跳格符、回車符和換行符等編輯性字符除了出現(xiàn)在文字常數(shù)中之外,在別處任何地方出現(xiàn)都沒意義,而注釋部分出現(xiàn)在程序中的任何地方。對于這些不是程序必要組成的部分,預(yù)處理時(shí)可以將其剔掉[5]。

      (2)詞法分析

      將預(yù)處理階段產(chǎn)生的中間代碼分解成單獨(dú)詞的表示,并將詞的基本信息表,如詞的行號、詞的列號及詞的類型等信息,為語法分析做準(zhǔn)備。詞的類型有:普通變量標(biāo)識符、數(shù)字表、關(guān)鍵字表運(yùn)算符表[6]。

      (3)語法分析

      語法分析的主要任務(wù)是在詞法分析識別出的單詞符號串的基礎(chǔ)上,分析并判斷程序的語法結(jié)構(gòu)是否符合語法規(guī)則。由于本系統(tǒng)分析的程序是經(jīng)過嵌入式軟件編譯器編譯的,因此認(rèn)為不存在語法上的錯(cuò)誤,只是通過語法分析得到程序結(jié)構(gòu)及函數(shù)信息,為插裝做準(zhǔn)備。

      2.2 插裝模塊

      程序插裝概念由J.G.Huang教授首次提出,簡單地說就是借助向被測程序中插入操作來實(shí)現(xiàn)測試目的。在調(diào)試程序時(shí),常常要在程序中插入一些打印語句,希望執(zhí)行程序時(shí)打印出所關(guān)心的信息。通過這些信息進(jìn)一步了解執(zhí)行過程中程序的一些動態(tài)特性。比如,程序的實(shí)際執(zhí)行路徑,或是特定變量在特定時(shí)刻的取值。從這一思想發(fā)展出的程序插裝技術(shù)能夠按用戶的要求,獲取程序的各種信息,成為測試工作的有效手段[7]。嵌入式軟件覆蓋率測試的核心問題是代碼插裝,要求插裝技術(shù)先進(jìn)且代碼量少。

      設(shè)計(jì)程序插裝時(shí)需要考慮的問題包括:探測哪些信息;在程序的什么部位設(shè)置探測點(diǎn);需要設(shè)置多少個(gè)探測點(diǎn)[7]。

      為了減少測試的復(fù)雜性,本系統(tǒng)設(shè)計(jì)過程中只采用了1次插裝的方式。只在能產(chǎn)生分支的語句之后、程序開始及結(jié)束部分插入樁函數(shù),該函數(shù)能在執(zhí)行過程中將執(zhí)行標(biāo)記寫入特定的文件。該模塊算法流程如圖2所示。

      圖2 插裝流程圖

      2.3 動態(tài)仿真運(yùn)行模塊

      在嵌入式軟件測試中,由于嵌入式軟件具有實(shí)時(shí)性、嵌入式等特性,因此嵌入式軟件編譯后不能直接在宿主機(jī)執(zhí)行,需要嵌入式仿真軟件來模擬目標(biāo)機(jī)環(huán)境執(zhí)行。但畢竟是在模擬環(huán)境中進(jìn)行的,因而與定時(shí)問題有關(guān)的白盒測試、中斷測試、硬件接口測試只能在目標(biāo)環(huán)境中進(jìn)行。

      本系統(tǒng)選擇Proteus仿真軟件作為該系統(tǒng)的模擬仿真環(huán)境,Proteus軟件可以仿真 51系列、AVR,PIC等常用的MCU及其外圍電路。在動態(tài)運(yùn)行過程中,通過嵌入式軟件相對應(yīng)的編譯環(huán)境編譯成含有插裝函數(shù)的目標(biāo)文件。將生成的插裝文件在Proteus仿真環(huán)境中動態(tài)運(yùn)行,將產(chǎn)生的測試結(jié)果存放到記錄文件或緩沖區(qū)中[8]。

      2.4 覆蓋率分析

      通過動態(tài)仿真運(yùn)行模塊,覆蓋信息被寫入文件中,讀取存放記錄文件,分別對語句塊數(shù)和執(zhí)行分支數(shù)進(jìn)行計(jì)算。根據(jù)覆蓋率公式,結(jié)合計(jì)算的結(jié)果,得到測試語句覆蓋、分支覆蓋與程序的有效代碼率并GUI顯示。將測試的結(jié)果與測試用例庫生成的測試用例期望值作比較,得出測試結(jié)論[9]。

      2.4.1 語句覆蓋率算法分析

      語句覆蓋是軟件測試中最基本的覆蓋標(biāo)準(zhǔn),因此在測試時(shí)應(yīng)將每個(gè)語句至少執(zhí)行1次。在 TestImp系統(tǒng)中得到語句覆蓋率的算法流程如圖3所示,通過詞法分析后,讀單獨(dú)的詞語,如遇到能產(chǎn)生分支的關(guān)鍵詞(for、if、else、switch 、goto、return、break、continue、do、“{”和“}”)則繼續(xù)往下判斷,否則返回繼續(xù)讀詞語。如果是能產(chǎn)生分支的關(guān)鍵詞,則將關(guān)鍵詞對應(yīng)的當(dāng)前標(biāo)號(flagif、flagelse、flagwhile、flagfor、flagswitch)推進(jìn)棧中的 account單元保存,并將當(dāng)前標(biāo)號加1。當(dāng)讀取到關(guān)鍵詞之后第1個(gè)“{”時(shí),標(biāo)志fflag加1,且判斷是否大于1:如果大于1,則將此時(shí)的行號推入到棧當(dāng)前位置中的nline單元中保存;否則直接返回讀詞。如果是“}”標(biāo)號,則判斷鏈表的節(jié)點(diǎn)是否大于0,如果是且為1,則用“}”當(dāng)前行數(shù)減去保存棧中“{”的行數(shù),然后減去最近嵌套內(nèi)層的總行數(shù)即得到該層對應(yīng)行數(shù);如果鏈表節(jié)點(diǎn)大于1,則判斷鏈表節(jié)點(diǎn)數(shù)與對應(yīng)層數(shù)是否相等,如果相等則計(jì)算出該層的總行數(shù),即用此時(shí)“}”行數(shù)減去棧中保存“{”的總行數(shù),然后保存該層總行數(shù),并用總行數(shù)減去最近嵌套內(nèi)層行數(shù)之和,即得到該層行數(shù)對應(yīng)記錄。如果鏈表節(jié)點(diǎn)數(shù)與對應(yīng)層數(shù)不相等,則將對應(yīng)層數(shù)加1循環(huán)作判斷。當(dāng)所有的詞語全部讀取完畢之后,讀取動態(tài)執(zhí)行時(shí)寫入的插裝文件,讀取關(guān)鍵詞標(biāo)號,取對應(yīng)關(guān)鍵詞鏈表中的行數(shù)與總行數(shù)變量相加,直至插裝文件讀取完畢,此時(shí)可以輸出被覆蓋語句數(shù)。

      2.4.2 分支覆蓋率算法分析

      圖3 計(jì)算覆蓋語句流程

      分支覆蓋率的計(jì)算一般也需要達(dá)到一定的指標(biāo)。在TestImp系統(tǒng)中得到分支覆蓋率的算法流程如圖4所示,初始化定義1個(gè)鏈表隊(duì)列。首先讀取插裝記錄文件,讀取時(shí)將分支標(biāo)號與鏈表隊(duì)列中的關(guān)鍵詞標(biāo)號分別作比較,如果此時(shí)鏈表隊(duì)列中已經(jīng)存在了,則讀取下一條記錄,否則覆蓋分支總數(shù)加1,并將分支標(biāo)號添加到隊(duì)列中,直至插裝記錄文件全部讀取完畢,輸出被覆蓋的分支數(shù)。分支總數(shù)在插裝時(shí)已經(jīng)記錄在全局變量中。

      圖4 計(jì)算覆蓋分支流程

      3 嵌入式軟件測試系統(tǒng)實(shí)現(xiàn)

      根據(jù)設(shè)計(jì)框架,在VC++2005上實(shí)現(xiàn)了基于宿主的嵌入式軟件測試系統(tǒng)。整個(gè)系統(tǒng)包括對源程序的詞法語法分析,自動插裝,并保存插裝后文件用以編譯,能配置各種嵌入式編譯環(huán)境。

      該系統(tǒng)實(shí)現(xiàn)如下幾個(gè)模塊:

      ①分析模塊。用打開文件菜單選擇要分析的源文件,并進(jìn)行詞法分析。在詞法分析過程中,對關(guān)鍵詞、符號、數(shù)字、變量等用不同的標(biāo)記,并去除源文件中的注釋,給出每個(gè)詞的行數(shù)和列數(shù)。語法分析并沒有生成可見的語法樹,只是形成提供插裝的結(jié)構(gòu)信息。

      ②插裝模塊。選擇自動插裝菜單,系統(tǒng)會讀取詞法語法分析的結(jié)果,根據(jù)圖2算法流程實(shí)現(xiàn)對源程序的自動插裝 ,插裝點(diǎn)有 for、if、else、case、goto、return 、break、continue、do、while語句后及程序開始與結(jié)束處插入記錄函數(shù)指針,并在程序最后插入插裝函數(shù)體。

      ③編譯器配置模塊。根據(jù)不同嵌入式軟件選擇不同的編譯環(huán)境,該部分需在使用該系統(tǒng)之前對各種嵌入式編譯軟件進(jìn)行配置,在本系統(tǒng)中有Visual C++、ARM編譯器ADS、Keil環(huán)境、偉福環(huán)境、Borland C環(huán)境、DSP編譯器CCS。

      ④覆蓋率報(bào)告。本系統(tǒng)已實(shí)現(xiàn)的覆蓋率報(bào)告有語句覆蓋與分支覆蓋,并將覆蓋率通過三維圖形形式體現(xiàn)。后續(xù)將實(shí)現(xiàn)條件覆蓋、多條件判定覆蓋、多條件覆蓋、MC/DC、路徑覆蓋等覆蓋率報(bào)告。

      ⑤報(bào)告生成及幫助文檔。將測試覆蓋結(jié)果與測試前生成設(shè)定的覆蓋率指標(biāo)進(jìn)行比較得到測試結(jié)果。如果覆蓋率沒有達(dá)到要求,則繼續(xù)增加測試用例,以提高測試覆蓋率。另外有幫助文檔,提供使用說明、注意事項(xiàng)及應(yīng)用范圍等。

      4 實(shí)驗(yàn)結(jié)果

      在實(shí)驗(yàn)中,采用1個(gè)AT89C51單片機(jī)鍵盤識別系統(tǒng)作為實(shí)驗(yàn)對象。在該系統(tǒng)中,通過AT89C51的P1口連接1個(gè)4×4的矩陣鍵盤,并通過P0.4~P0.6所連接的74LS138擴(kuò)展連接到型號位7SEG-MPX6-CA的6位LED選通端上,可以顯示所按下鍵盤的編號,將RXD和TXD連接到串口。

      實(shí)驗(yàn)過程中,將測試源程序進(jìn)行分析并自動插裝,然后通過單片機(jī)的Keil編譯器對插裝后的源程序進(jìn)行編譯,得到.hex文件,添加到Proteus6.9仿真軟件原理圖中的AT89C51單片機(jī)中,點(diǎn)擊運(yùn)行按鈕后可以執(zhí)行程序。此時(shí)可以在Proteus6.9界面中輸入生成的測試用例[10],本實(shí)例中的測試用例是鍵盤按鍵的輸入,只需點(diǎn)擊Proteus6.9原理圖中的鍵盤。此時(shí)插裝后的程序會將插裝的信息通過串口傳送到TestImp測試系統(tǒng)的聯(lián)機(jī)串口傳送界面中,并將其保存在指定文件中,為覆蓋測試做準(zhǔn)備。

      為該系統(tǒng)設(shè)計(jì)的基本測試用例是按下單個(gè)1號鍵。在此測試用例下,手工運(yùn)行推算出語句覆蓋率和分支覆蓋率分別為55.6%和42.8%,在測試系統(tǒng)運(yùn)行后,得出的語句覆蓋率和分支覆蓋率分別為55.6%和42.8%。測試結(jié)果如圖5所示。

      圖5 測試系統(tǒng)實(shí)驗(yàn)結(jié)果圖

      實(shí)驗(yàn)結(jié)果表明:在特定的測試用例下,對嵌入式系統(tǒng)應(yīng)用本文設(shè)計(jì)的基于仿真嵌入式軟件白盒覆蓋測試系統(tǒng)與理論上推導(dǎo)出來的語句和分支覆蓋率指標(biāo)完全相同。

      [1]劉利枚,周鮮成,石彪.嵌入式軟件測試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].國外電子測量技術(shù),2008(1):59-61.

      [2]余盛季.嵌入式軟件系統(tǒng)測試平臺研究[D].成都:電子科技大學(xué),2004.

      [3]伍馮潔,謝陳躍,謝斌.Proteus與Keil在單片機(jī)開放性實(shí)驗(yàn)中的應(yīng)用[J].電子測量技術(shù),2008(6):100-103.

      [4]劉利枚,周鮮成,石彪.嵌入式軟件白盒測試系統(tǒng)的實(shí)現(xiàn)[J].電子測量技術(shù),2008(6):69-71.

      [5]陳火旺,劉春林,等.編譯原理[M].北京:國防工業(yè)出版社,2000.

      [6]譚浩強(qiáng).C語言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,1999.

      [7]鄭人杰.計(jì)算機(jī)軟件測試技術(shù)[M].北京:清華大學(xué)出版社,1992.

      [8]王飛,趙建濤,鐘瑛.Keil與Proteus在現(xiàn)代教學(xué)中的應(yīng)用[J].現(xiàn)代企業(yè)教育,2009(12):238.

      [9]喬文軍.嵌入式軟件測試平臺的研究與實(shí)現(xiàn)[D].南京:南京航空航天大學(xué),2007.

      [10]鐘艷花.Proteus仿真軟件在單片機(jī)教學(xué)中的應(yīng)用[J].江門職業(yè)技術(shù)學(xué)院學(xué)報(bào),2007(1):1-3.

      猜你喜歡
      詞法嵌入式軟件測試用例
      詞法 名詞、代詞和冠詞
      基于SmartUnit的安全通信系統(tǒng)單元測試用例自動生成
      基于混合遺傳算法的回歸測試用例集最小化研究
      實(shí)時(shí)嵌入式軟件的測試技術(shù)
      電子測試(2018年10期)2018-06-26 05:54:08
      全景相機(jī)遙控器嵌入式軟件V1.0 相關(guān)操作分析
      電子制作(2017年17期)2017-12-18 06:40:56
      應(yīng)用于詞法分析器的算法分析優(yōu)化
      談對外漢語“詞法詞”教學(xué)
      基于Eclipse的航天嵌入式軟件集成開發(fā)環(huán)境設(shè)計(jì)與實(shí)現(xiàn)
      航天嵌入式軟件浮點(diǎn)運(yùn)算誤差分析與控制
      基于依賴結(jié)構(gòu)的測試用例優(yōu)先級技術(shù)
      疏附县| 阳泉市| 寻乌县| 博乐市| 无锡市| 博兴县| 玉山县| 怀柔区| 离岛区| 涿州市| 广州市| 堆龙德庆县| 德庆县| 宁乡县| 唐海县| 翁源县| 营口市| 蛟河市| 芦山县| 宁德市| 甘谷县| 吉木萨尔县| 高清| 申扎县| 大兴区| 金寨县| 阿拉善左旗| 金溪县| 赤城县| 香格里拉县| 金溪县| 浦城县| 临沧市| 华宁县| 河源市| 镇宁| 永登县| 夏河县| 邮箱| 通城县| 钟祥市|