當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式硬件
[導(dǎo)讀]人們對(duì)嵌入式系統(tǒng)軟件的質(zhì)量提出了更高的要求,而作為保證軟件質(zhì)量最有效手段的測(cè)試技術(shù),也越來(lái)越受到關(guān)注。目 前嵌入式軟件的開(kāi)發(fā)語(yǔ)言以C等高級(jí)語(yǔ)言為主,因此,對(duì)這些高級(jí)語(yǔ)言的測(cè)試顯得尤為重要.

引言

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

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

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

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

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

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

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

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

2. 1詞法語(yǔ)法分析模塊

(1)預(yù)處理

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

( 2)詞法分析

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

( 3)語(yǔ)法分析

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

2. 2插裝模塊

程序插裝概念由J.G.H uang教授首次提出,簡(jiǎn)單地說(shuō)就是借助向被測(cè)程序中插入操作來(lái)實(shí)現(xiàn)測(cè)試目的。在調(diào)試程序時(shí),常常要在程序中插入一些打印語(yǔ)句,希望執(zhí)行程序時(shí)打印出所關(guān)心的信息。通過(guò)這些信息進(jìn)一步了解執(zhí)行過(guò)程中程序的一些動(dòng)態(tài)特性。比如,程序的實(shí)際執(zhí)行路徑,或是特定變量在特定時(shí)刻的取值。從這一思想發(fā)展出的程序插裝技術(shù)能夠按用戶的要求,獲取程序的各種


2. 4覆蓋率分析

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

2. 4. 1語(yǔ)句覆蓋率算法分析

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

2.4.2分支覆蓋率算法分析

分支覆蓋率的計(jì)算一般也需要達(dá)到一定的指標(biāo)。在T estImp系統(tǒng)中得到分支覆蓋率的算法流程如圖4





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

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

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

③編譯器配置模塊。根據(jù)不同嵌入式軟件選擇不同的編譯環(huán)境,該部分需在使用該系統(tǒng)之前對(duì)各種嵌入式編譯軟件進(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)告有語(yǔ)句覆蓋與分支覆蓋,并將覆蓋率通過(guò)二維圖形形式體現(xiàn)。后續(xù)將實(shí)現(xiàn)條件覆蓋、多條件判定覆蓋、多條件覆蓋,M C/DC潞徑覆蓋等覆蓋率報(bào)告。

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

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

在實(shí)驗(yàn)中,采用1個(gè)AT 89C51單片機(jī)鍵盤(pán)識(shí)別系統(tǒng)作為實(shí)驗(yàn)對(duì)象。在該系統(tǒng)中,通過(guò)AT 89C51的P1口連接1個(gè)4x4的知陣鍵盤(pán),并通過(guò)P0. 4 } P0. 6所連接的74LS138擴(kuò)展連接到型號(hào)位7SEG-MPXGCA的6位LED選通端上,可以顯示所按卜鍵盤(pán)的編號(hào),將RXD和T XD連接到串口。

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

為該系統(tǒng)設(shè)計(jì)的基木測(cè)試用例是按卜單個(gè)1號(hào)鍵。在此測(cè)試用例卜,手工運(yùn)行推算出語(yǔ)句覆蓋率和分支覆蓋率分別為55. 6%和42. 80}0 ,在測(cè)試系統(tǒng)運(yùn)行后,得出的語(yǔ)句覆蓋率和分支覆蓋率分別為55. 6%和42. 8 0}o。測(cè)試結(jié)果如圖5所示。

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

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉