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