摘 要: 針對(duì)嵌入式系統(tǒng)匯編語(yǔ)言詞法、語(yǔ)法分析的設(shè)計(jì)與實(shí)現(xiàn),提出了Lex與Yacc之間的關(guān)系,然后兩者通過(guò)gcc命令進(jìn)行編譯形成綜合分析。最后運(yùn)行該綜合分析器就可以對(duì)51系列的匯編語(yǔ)言進(jìn)行分析。提出了被測(cè)源程序靜態(tài)結(jié)構(gòu)的分析方法,建立了程序流程圖的過(guò)程,除此之外,還強(qiáng)調(diào)了被測(cè)源程序插樁處理與覆蓋率分析的具體理論和使用規(guī)則,這為黑盒測(cè)試結(jié)果提供了科學(xué)的方法。
關(guān)鍵詞: 黑盒測(cè)試; 嵌入式系統(tǒng); 程序流程圖; 插樁處理
中圖分類號(hào): TN919?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2016)21?0172?03
Design and implementation of embedded system platform based on black?box testing
HE Dandan
(Dalian Maritime University, Dalian 116026, China)
Abstract: Aiming at the design and implementation of the assembly language morphology and syntax analysis of the embedded system, the relationship between Lex and Yacc is put forward, and the two items are compiled with gcc command to form the synthesis analyzer. The synthesis analyzer can analyze the assembly language of 51 series. The static structure analysis method of the tested source program is proposed. The process of the program flow chart was established. The specific theories and service rules of the instrumentation processing and coverage rate analysis of the tested source program are emphasized, which provide a scientific method for black?box testing results.
Keywords: black?box testing; embedded system; program flow chart; instrumentation processing
0 引 言
黑盒測(cè)試是從用戶觀點(diǎn)出發(fā)的測(cè)試,依據(jù)需求功能說(shuō)明書中的預(yù)期用途、定時(shí)和性能的要求,推斷測(cè)試結(jié)果。黑盒測(cè)試根據(jù)測(cè)試階段可分為單元測(cè)試、集成測(cè)試、確認(rèn)測(cè)試、系統(tǒng)測(cè)試四個(gè)階段[1]。嵌入式計(jì)算機(jī)系統(tǒng)具有與傳統(tǒng)軟件測(cè)試不同的新特性,因此需要采取針對(duì)性的測(cè)試方法。通用的測(cè)試方法可分為靜態(tài)時(shí)間分析和動(dòng)態(tài)時(shí)間分析。
1 嵌入式軟件測(cè)試的環(huán)境分析
在線仿真配備了CPU芯片接口,提供和應(yīng)用程序交流信息橋,不足之處在于對(duì)硬件的依賴性較強(qiáng),測(cè)試范圍較窄;目標(biāo)機(jī)仿真測(cè)試結(jié)果真實(shí),但由于實(shí)際運(yùn)行中連接外部設(shè)備,很難辨識(shí)軟件和硬件錯(cuò)誤。在實(shí)際測(cè)試中,根據(jù)測(cè)試效率、成本、可靠性、自動(dòng)化程度等因素選擇測(cè)試環(huán)境[2]。
2 嵌入式測(cè)試系統(tǒng)的技術(shù)實(shí)現(xiàn)
CodeTest一方面吸取軟件插樁技術(shù),另一方面從硬件測(cè)試那里吸取從總線獲取數(shù)據(jù)的技術(shù),并進(jìn)行升級(jí)改造。在硬件測(cè)試時(shí),CodeTest選擇插入點(diǎn)的方式為主動(dòng)獲取關(guān)鍵數(shù)據(jù)。和CodeTest相比,純軟件測(cè)試對(duì)目標(biāo)測(cè)試的影響大大降低。因此選用Cereal仿真器。
嵌入式軟件測(cè)試系統(tǒng)由功能測(cè)試模塊、代碼測(cè)試模塊、數(shù)據(jù)分析和文檔報(bào)告模塊、通信接口轉(zhuǎn)換模塊組成。對(duì)于黑盒測(cè)試來(lái)說(shuō),功能測(cè)試模塊居主導(dǎo)地位,它主要通過(guò)接收目標(biāo)系統(tǒng)輸出信號(hào)和需要的信號(hào)進(jìn)行比對(duì)來(lái)判定目標(biāo)系統(tǒng)在功能上是否達(dá)到最優(yōu)[3]。
3 詞法語(yǔ)法分析的設(shè)計(jì)與實(shí)現(xiàn)
3.1 Lex?Yacc
Lex是檢測(cè)字符匹配性的詞法生成程序,Yacc是測(cè)定語(yǔ)法的生成程序。一個(gè)Lex程序由三段組成:首先是C和Lex定義;第二段是C代碼;第三段是C函數(shù)。一個(gè)Yacc程序也是由三段組成,分別是聲明、語(yǔ)法規(guī)則和C代碼。Lex同Yacc的工作原理如圖1所示。
3.2 Lex?Yacc之間的聯(lián)系
Lex程序用來(lái)計(jì)算數(shù)字字符串,能對(duì)各種符號(hào)進(jìn)行識(shí)別,當(dāng)插碼時(shí)可以以注釋的形式插入插樁代碼,等程序完成,可以自行取消代碼插樁,不影響整體進(jìn)程。Yylval用來(lái)傳遞Lex與Yacc之間數(shù)字字符串轉(zhuǎn)化后的數(shù)值,利用lineno傳遞正在處理的代碼行號(hào)和標(biāo)號(hào)。本次設(shè)計(jì)全程在Linux下,通過(guò)Lex編譯后生成詞法分析程序的C代碼,通過(guò)Yacc編譯后生成語(yǔ)法分析程序的C程序代碼。兩者通過(guò)gcc命令進(jìn)行編譯形成綜合分析。最后運(yùn)行該綜合分析器就可以對(duì)51系列的匯編語(yǔ)言進(jìn)行分析[4?5]。
3.3 被測(cè)源程序靜態(tài)結(jié)構(gòu)分析
Lex?Yacc工具對(duì)單文件逐行掃描,得出當(dāng)前語(yǔ)句各類參數(shù)類型,不同參數(shù)類型分別進(jìn)入不同的單鏈表中。其中除了順序單鏈表外,其他四種處理方式基本相同。待詞法、語(yǔ)法分析完畢,五個(gè)單鏈表中存儲(chǔ)了對(duì)應(yīng)的匯編程序。因?yàn)閱捂湵肀旧碇皇且粋€(gè)轉(zhuǎn)換器,無(wú)法顯示匯編程序之間的邏輯關(guān)系,所以需要對(duì)程序進(jìn)行二次分析,確定所有邏輯關(guān)系。其中五個(gè)單鏈表形成的流程圖如圖2所示。
針對(duì)程序流程圖的建立,首先搜索匹配節(jié)點(diǎn),根據(jù)節(jié)點(diǎn)不同進(jìn)入相應(yīng)分支處理。當(dāng)前語(yǔ)句在順序節(jié)點(diǎn),則進(jìn)入順序處理模塊。從關(guān)鍵字“結(jié)束行號(hào)+1”開始遍歷單鏈表,存在兩種結(jié)果:一是算法出錯(cuò);另外一種就是在主程序中時(shí)則表明當(dāng)前分支分析完成。接著要判斷條件跟蹤鏈表中的順序分支(規(guī)定為右分支)是否都已分析完畢。
4 覆蓋率分析及評(píng)測(cè)
4.1 被測(cè)源程序覆蓋率分析
虛擬插樁技術(shù)就是在匯編語(yǔ)言基本結(jié)構(gòu)的特點(diǎn)上,在源程序的插樁點(diǎn)處設(shè)置斷點(diǎn),在源程序執(zhí)行到斷點(diǎn)處,響應(yīng)斷點(diǎn)處指令,給出具體的PC地址,自動(dòng)記錄并打印出來(lái),接連下去形成PC值的數(shù)據(jù)鏈。通過(guò)查詢五類單鏈表與之建立對(duì)應(yīng)關(guān)系,就可以獲得到源程序的真實(shí)運(yùn)行軌跡,進(jìn)而計(jì)算出各類覆蓋指標(biāo)。
4.2 基于代碼的覆蓋評(píng)測(cè)
在仿真測(cè)試平臺(tái)原型系統(tǒng)上,基于代碼的覆蓋測(cè)試首先需要選定適合用作黑盒測(cè)試的子過(guò)程模塊。提取的子過(guò)程模塊必須具備獨(dú)立運(yùn)行的能力,根據(jù)覆蓋測(cè)試的標(biāo)準(zhǔn)和要求對(duì)代碼邏輯結(jié)構(gòu)進(jìn)行認(rèn)真分析,設(shè)計(jì)出多個(gè)測(cè)試用例,然后通過(guò)手工運(yùn)行該子程序的方式,在某一特定測(cè)試用例驅(qū)動(dòng)下運(yùn)行,測(cè)定出運(yùn)行路徑,通過(guò)計(jì)算得出兩種覆蓋率理論評(píng)測(cè)指標(biāo),與仿真測(cè)試平臺(tái)上實(shí)現(xiàn)的兩種覆蓋率相對(duì)比,得出覆蓋率分析法與虛擬插樁的正確性驗(yàn)證結(jié)果。
5 嵌入式系統(tǒng)平臺(tái)設(shè)計(jì)
設(shè)計(jì)一個(gè)可以代替人工進(jìn)行黑盒測(cè)試的平臺(tái)系統(tǒng),見圖3,其基本原理是通過(guò)腳本語(yǔ)言記錄狀態(tài)信息,之后通過(guò)PC回放測(cè)試信息以判斷結(jié)果是否與記錄腳本一致,以此決定本次測(cè)試是否通過(guò)。為此,在編輯源代碼時(shí)就需要滿足錄制腳本和腳本回放兩個(gè)階段的需求。
5.1 插裝代碼分析
在PC上運(yùn)行插裝系統(tǒng)最重要的原則就是要保證軟件原有功能的穩(wěn)定性和完整性。因此在設(shè)計(jì)嵌入式系統(tǒng)的插裝代碼時(shí)不能改變程序的原有邏輯和原有執(zhí)行流程,應(yīng)盡量降低在嵌入式系統(tǒng)所占的資源,盡可能將部分功能和操作交付于PC進(jìn)行。
嵌入式系統(tǒng)中的模擬用戶輸入模塊的主要功能是將計(jì)算機(jī)發(fā)送的命令進(jìn)行分析,并將結(jié)果回復(fù)到處理模塊中,其操作模擬流程見圖4。
5.2 系統(tǒng)狀態(tài)的定義和獲取
(1) 聲音信息的獲取
嵌入式系統(tǒng)中對(duì)聲音信息的獲取主要是通過(guò)識(shí)別每個(gè)聲音惟一的ID編號(hào)和固定的音頻編碼進(jìn)行的。工作時(shí),由系統(tǒng)中的服務(wù)函數(shù)獲得ID聲音的音頻編碼并發(fā)送到PC中。
(2) 獲取LED信息
LED的運(yùn)行方法和聲音相似,都有一套惟一的LED編碼,并由LED控制器控制。常用的設(shè)計(jì)方法是將LED中的編碼放到嵌入式系統(tǒng)中的緩沖區(qū)內(nèi),通過(guò)定時(shí)刷新函數(shù)提取LED信息[6]。
(3) 獲取LCD信息
由于LCD需要顯示的信息較多,且各消息屬性復(fù)雜,因此較難提取。目前常用的提取方法是點(diǎn)陣截取法和消息截取法。由于點(diǎn)陣截取法操作簡(jiǎn)單、測(cè)試結(jié)果準(zhǔn)確率高,因此本文使用點(diǎn)陣截取法獲取LCD信息。
(4) 系統(tǒng)狀態(tài)的獲取
主動(dòng)請(qǐng)求和被動(dòng)獲取是嵌入式系統(tǒng)獲取信息的主要方式。主動(dòng)請(qǐng)求是指嵌入式系統(tǒng)在處理完P(guān)C發(fā)出的操作命令時(shí),主動(dòng)將搜集好的信息發(fā)送到PC上。被動(dòng)獲取是指嵌入式系統(tǒng)并不主動(dòng)發(fā)送檢測(cè)信息,而是當(dāng)狀態(tài)出現(xiàn)時(shí)才決定是否繼續(xù)后續(xù)操作。
5.3 自動(dòng)化比較和測(cè)試
軟件是否準(zhǔn)確輸出結(jié)果,需要經(jīng)過(guò)多次測(cè)試實(shí)際輸出和預(yù)期輸出的差別。本文在設(shè)計(jì)嵌入式系統(tǒng)時(shí)綜合考慮了一些智能比較思想來(lái)優(yōu)化設(shè)計(jì)流程。由于實(shí)際的嵌入式系統(tǒng)會(huì)產(chǎn)生上百個(gè)復(fù)雜的狀態(tài)信息[7],為便于比較,本文采用了相對(duì)比較的辦法對(duì)錄制腳本時(shí)的狀態(tài)變遷進(jìn)行比較。
最后設(shè)計(jì)完成的嵌入式系統(tǒng)需對(duì)腳本進(jìn)行測(cè)試,這是交互式應(yīng)用的重要組成部分。腳本測(cè)試的準(zhǔn)確度主要依賴于所選用的測(cè)試工作和腳本技術(shù)。當(dāng)前主要的腳本技術(shù)有共享腳本、數(shù)據(jù)驅(qū)動(dòng)腳本、結(jié)構(gòu)化腳本等。這些腳本都包括了三個(gè)命令,即人工操作命令、狀態(tài)檢查命令、邏輯控制命令。測(cè)試腳本主要就是對(duì)這三個(gè)命令進(jìn)行檢查,其中在自動(dòng)化檢測(cè)中采用何種腳本記錄測(cè)試結(jié)果可依據(jù)模塊要求進(jìn)行選定。
6 結(jié) 語(yǔ)
黑盒測(cè)試技術(shù)的匯編語(yǔ)言測(cè)試系統(tǒng)用例研究在我國(guó)已經(jīng)很多,本文最大的亮點(diǎn)是引入虛擬插樁技術(shù),實(shí)現(xiàn)真正插樁,即在被測(cè)源程序的插樁點(diǎn)處設(shè)置中斷指令,當(dāng)源程序運(yùn)行到該點(diǎn)處時(shí)自動(dòng)運(yùn)行斷點(diǎn)指令,給出具體的PC地址,進(jìn)而給出一系列地址數(shù)據(jù),根據(jù)事先設(shè)定的用例判定運(yùn)行效果,得出黑盒測(cè)試的正確驗(yàn)證結(jié)果。此方法最大的優(yōu)點(diǎn)在于高效、精確、成本較低,在實(shí)際運(yùn)用中具有較高的實(shí)用價(jià)值。
參考文獻(xiàn)
[1] 孫昌愛,靳若明,劉超,等.實(shí)時(shí)嵌入式軟件的測(cè)試技術(shù)[J].小型微型計(jì)算機(jī)系統(tǒng),2000,21(9):920?924.
[2] 杜曉東.面向嵌入式系統(tǒng)的測(cè)試工具研究[D].成都:電子科技大學(xué),2003.
[3] 蘇銘,宋宗宇,王華.多計(jì)算機(jī)的自動(dòng)插樁與監(jiān)測(cè)系統(tǒng)[J].計(jì)算機(jī)工程與應(yīng)用,2002(4):79?82.
[4] 楊作梅,張旭東.1ex與yacc[M].北京:電子工業(yè)出版社,2003.
[5] 鄧支益,何亦征,田翼.嵌入式軟件測(cè)試研究[J].航空電子技術(shù),2003,34(1):37?42.
[6] 曹文靜,宮云戰(zhàn).軟件測(cè)試性計(jì)算方法研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2003,24(10):67?70.
[7] 魏光新,蘇麗.邏輯覆蓋測(cè)試工具的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2000(5):106?109.