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