1引言
隨著(zhù)航空、航天、核電等領(lǐng)域嵌入式產(chǎn)品在信息化、體系化、自主化和智能化等方面的飛速發(fā)展,軟件的規模越來(lái)越大、關(guān)鍵程度越來(lái)越高,軟件的質(zhì)量與可靠性已經(jīng)成為影響產(chǎn)品質(zhì)量與可靠性的重要因素。軟件測試是目前普遍采用的提高軟件質(zhì)量的重要手段,是軟件質(zhì)量保證工作中的重要環(huán)節之一。測試數據獲取是軟件測試的首要前提,數據獲取的準確性、實(shí)時(shí)性和可靠性對測試質(zhì)量有決定性影響,是評估被測對象的穩定性、安全性以及技術(shù)指標滿(mǎn)足用戶(hù)需求的重要依據。
2數據獲取技術(shù)
數據獲取是通過(guò)軟件、硬件等方式獲取測試數據以評價(jià)軟件質(zhì)量的技術(shù)。根據測試數據的獲取手段,可以將嵌入式軟件測試的數據獲取技術(shù)分為3種方式[1]:實(shí)際的物理通道;開(kāi)發(fā)工具IDE的虛擬I/O功能;讀取內存區數據。
2.1 實(shí)際的物理通道
若目標系統上含有可以外接的物理通道,如USB、I2C、I2S、SSI、SPI、UART、CAN、以太網(wǎng)、并口等接口,且使用這些物理通道對目標系統運行影響不大或者其影響可以接受時(shí),可以將其作為測試通道使用。計算機含有USB、UART、以太網(wǎng)、并口等接口,在測試時(shí)可以直接使用這些物理通道與主機建立通信,實(shí)時(shí)獲得目標系統產(chǎn)生的測試數據。其他的通道需要外配轉換接口方能與計算機建立通信。當這些物理通道不能作為測試使用時(shí),可以通過(guò)總線(xiàn)監聽(tīng)的方式直接從CPU的地址總線(xiàn)和數據總線(xiàn)上獲取數據。
實(shí)際的物理通道方式,數據獲取真實(shí)準確,實(shí)時(shí)性好,較為有效,但需要測試人員深入了解目標系統。
2.2 開(kāi)發(fā)工具虛擬I/O
嵌入式軟件一般在交叉開(kāi)發(fā)環(huán)境下開(kāi)發(fā),大多數嵌入式開(kāi)發(fā)工具具備編譯、鏈接、加載、調試等功能,有些高級的開(kāi)發(fā)工具IDE具備虛擬I/O功能,給測試帶來(lái)了很大的方便。比如: Tornado、TI CCS,在Tornado的shell中運行測試程序時(shí),可以把printf的內容打印到消息窗口中;CCS可以支持fprintf,直接在主機上生成測試數據文件。
開(kāi)發(fā)工具虛擬I/O方式,數據獲取簡(jiǎn)單容易,自動(dòng)化程度較低,也有通過(guò)開(kāi)發(fā)環(huán)境改造或者在開(kāi)發(fā)環(huán)境上集成應用的途徑,來(lái)提高測試數據獲取的自動(dòng)化程度。
2.3 讀取內存數據
若目標系統沒(méi)有可以供測試使用的物理通道,開(kāi)發(fā)工具也不具備虛擬I/O功能,可以采用讀取內存數據的方式。具體實(shí)現方法是開(kāi)辟一塊足夠大的緩存區,測試時(shí)可以借助開(kāi)發(fā)工具來(lái)加載含有測試腳本的程序,在目標系統運行的過(guò)程中把測試數據寫(xiě)入緩存區中,在測試過(guò)程中或者測試執行后,使用開(kāi)發(fā)工具讀取內存的功能把緩存區中的數據讀取出來(lái),在主機上保存成測試數據文件。
讀取內存數據方式,適用性廣,但要求系統有足夠的內存資源,當涉及到實(shí)時(shí)性測試時(shí)需要記錄時(shí)間信息,對測試腳本的要求較高。
3插樁技術(shù)
插樁技術(shù)也叫軟件打點(diǎn)技術(shù),在保持被測試程序原有邏輯正確性的基礎上,通過(guò)向程序中插入探測器,即信息采集的代碼段(可以是賦值語(yǔ)句或采集程序運行信息的函數),來(lái)捕獲測試數據,是一種侵入式的數據獲取技術(shù)。依據插樁的階段和對象不同,分為源代碼插樁和目標代碼插樁。源代碼插樁會(huì )因編程語(yǔ)言或版本不同而有所差異,但語(yǔ)法、語(yǔ)義信息全面,利于進(jìn)行準確的插樁分析;目標代碼因代碼語(yǔ)法和語(yǔ)義信息不完整,易造成對程序運行錯誤的定位、捕獲和分析,插樁難度較大。
程序插樁常用于實(shí)現覆蓋測試,來(lái)檢測程序的分支覆蓋、條件覆蓋、語(yǔ)句覆蓋、修改的分支/條件覆蓋(MC/DC);也可以用來(lái)捕獲程序執行過(guò)程中變量的變化情況,得出程序的控制流信息、數據流信息以及效率特性等性能信息。進(jìn)行插樁之前,需要明確要探測哪些信息,在程序的什么部位放置探測器,探測器的數量,探測器所帶來(lái)的代碼膨脹影響等。以利用腳本語(yǔ)言Fortran進(jìn)行程序插樁為例,在一般情況下,探測器的位置放置于程序塊的第一個(gè)可執行語(yǔ)句之前、有標號的可執行語(yǔ)句處、entry語(yǔ)句的前后、循環(huán)語(yǔ)句之后、條件語(yǔ)句之后、logical if語(yǔ)句之后、call語(yǔ)句之后、go to語(yǔ)句之后等。為方便測試的實(shí)現和管理,往往將探測器以函數調用的方式插入,并依據測試的目的不同將探測器分為不同類(lèi)別,例如線(xiàn)性塊探測器、分支探測器、模塊探測器、時(shí)間探測器等。
按照插樁實(shí)現的方式,主要有硬件采集方式的插樁、硬件收發(fā)方式的插樁以及純軟件方式的插樁。
3.1 硬件采集方式
硬件采集方式的插樁測試,需要在程序執行到插樁點(diǎn)時(shí),通過(guò)外接的硬件采集器從目標板總線(xiàn)采集總線(xiàn)信號,并傳輸到測試用的計算機(以下稱(chēng)為宿主機),進(jìn)而進(jìn)行測試分析,是一種硬件與軟件相結合的測試方法。其具體實(shí)現過(guò)程如圖1所示。

圖1 硬件采集方式的插樁實(shí)現過(guò)程
1) 預處理器對源代碼進(jìn)行預處理,如去掉注釋行,將宏定義進(jìn)行語(yǔ)義展開(kāi),生成中間代碼;插樁器對中間代碼進(jìn)行插樁,生成插樁后的代碼,并建立符號數據庫以保存插樁標記等信息[4]。
2) 插樁后的代碼通過(guò)編譯器翻譯成匯編代碼,匯編代碼通過(guò)匯編器翻譯成可重定位目標文件,可重定位目標文件再通過(guò)鏈接器進(jìn)行鏈接,生成可執行目標文件。
3) 可執行目標文件通過(guò)加載器加載到目標板中運行,當運行到探測點(diǎn)時(shí),數據采集器讀取目標板上控制總線(xiàn)的控制信號、地址總線(xiàn)的地址信號和數據總線(xiàn)的數據信號,并將原始的測試數據傳送到宿主機,宿主機對原始測試數據進(jìn)行處理生成初級測試數據。
4) 測試數據管理器依照插樁標記等信息,對測試數據進(jìn)行比較處理,得出最終的測試數據,如覆蓋率信息、控制流信息、數據流信息以及效率特性等性能信息。
3.2 硬件收發(fā)方式
硬件收發(fā)方式的插樁是采用軟硬件結合的方式,利用目標板上的通信資源,在軟件源代碼上插入包含程序運行狀態(tài)的信息記錄及其發(fā)送指令的探測器,在運行到插樁點(diǎn)時(shí)將測試數據傳輸到測試工具或宿主機上,進(jìn)而進(jìn)行測試分析的一種方法。硬件收發(fā)方式的插樁實(shí)現過(guò)程如圖2所示,由于插入的探測器中含有發(fā)送程序運行狀態(tài)的信息記錄的指令,當運行到探測點(diǎn)時(shí),可以直接通過(guò)物理通道將原始測試數據發(fā)送到測試工具或宿主機,不需要通過(guò)數據采集器來(lái)采集總線(xiàn)上的各種信號,大大降低了數據獲取的難度和成本。

圖2 硬件收發(fā)方式的插樁實(shí)現過(guò)程
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/