?

基于SmartRocket 的箭載嵌入式軟件集成測試

2023-11-29 11:26中國電子科技集團公司第三十二研究所蘇青琴李鳳雯周蘭英
數字技術與應用 2023年11期
關鍵詞:嵌入式軟件測試用例測試方法

中國電子科技集團公司第三十二研究所 蘇青琴 李鳳雯 周蘭英

針對目前箭載嵌入式軟件集成測試工具測試用例編寫時間長、人力成本高、測試用例報告適用性低等方面的問題,提出一種基于SmartRocket 的箭載嵌入式軟件集成測試方法。SmartRocket 采用廣度優先自頂向下集成測試方法確定集成測試組合,基于動態符號執行技術自動生成集成測試用例,在滿足函數覆蓋和調用覆蓋指標下生成與實際要求相符的測試用例報告。通過實驗發現,該集成測試方法能夠很好地實現集成測試用例自動化,提高了測試用例報告適用性,一定程度地增加了箭載嵌入式軟件集成測試人員的測試效率。

隨著嵌入式軟件在各個領域的廣泛應用,對嵌入式軟件的各項要求也越來越高,特別是作為航天產業的箭載嵌入式軟件的測試工作變得尤為重要。集成測試作為一種重要的箭載嵌入式軟件測試方法,能在早期發現與軟件設計相關的模塊調用關系以及模塊間接口方面的問題。目前主要使用的箭載嵌入式軟件集成測試工具為Testbed[1]和VeterCast。Testbded 無法自動生成集成測試用例,增加了測試時間和人力成本;VeterCast 雖然可以自動生成測試用例,但生成的測試用例報告需要編寫腳本轉化成實際使用的測試用例報告,導致適用性不高。為了改進Testbed 和VeterCast 這兩種集成測試工具的不足,結合具體箭載嵌入式軟件實踐,形成了基于SmartRocket 的箭載嵌入式軟件集成測試方法。

1 SmartRocket

SmartRocket 是一種基于動態符號執行技術的集成測試工具。SmartRocket 工具能自動生成集成測試用例,并采用函數覆蓋、調用覆蓋作為集成測試指標,自動生成符合實際需要的測試用例報告。

1.1 動態符號技術

動態符號執行技術[2]是實際執行和符號執行同時執行的技術。對于與符號無關的操作或變量等程序會實際執行,對于與符號相關的操作或變量等程序會符號執行。符號執行將程序中的每一個輸入變量作為符號處理,將不同的路徑約束條件用輸入的符號來執行,符號執行會模擬程序執行并收集所有路徑上的約束信息[3]。最終,約束求解器會根據每條路徑上的符號組合信息求得每條路徑的輸入。

如圖1 所示是一個程序代碼轉化成符號執行控制流程圖的示例。程序的輸入是一個整型變量i和一個整型變量j,若i+j>0,則將返回i;否則,返回-i。

圖1 程序代碼轉化符號執行流程圖Fig.1 Program code conversion symbol execution flowchart

如圖2 所示是符號執行的路徑圖。首先隨機輸入i為1,j為2,依據該隨機輸入值可以到達一條路徑終點4;接著對約束條件取反得到新的輸入i為1,j為-2,依據該新的輸入可以到達另一條路徑終點6,從而覆蓋了所有的路徑。

圖2 符號執行路徑圖Fig.2 Symbol execution path diagram

1.2 測試用例自動生成

SmartRocket 能夠自動生成集成測試用例。以C 語言為例說明SmartRocket 自動生成集成測試用例的過程。SmartRocket 將接收到的.c 和.h 源文件轉化成可識別格式,使用C 語言編譯器對源文件進行預處理和編譯,得到抽象語法樹。在抽象語法樹的基礎上構造出含有程序結構和信息的控制流程圖。以控制流圖的初始節點為起始點,采用搜索算法[4]尋找下一個節點,只有當識別出分支條件時才會執行該分支。在遍歷整個控制流程圖過程中,將所有約束條件收集起來添加到一個路徑,當搜索到終點時求解該路徑,并轉換成能夠識別的集成測試用例。

2 集成測試

集成測試依據軟件概要設計并遵循特定的策略和步驟,將已經通過單元測試的各個軟件單元(或模塊)逐步組合在一起進行測試,以期通過測試發現各軟件單元接口之間存在的問題。

2.1 集成測試方法

集成測試方法包括漸增式和非漸增式兩大類,其中漸增式測試又可分為自頂向下、自底向上和三明治集成三種方法[5],而自頂向下的漸增式測試方法又可以分為深度優先自頂向下測試法和廣度優先自頂向下測試法。

SmartRocket 工具采用廣度優先自頂向下集成測試法。

廣度優先自頂向下的集成測試分為以下三個步驟:

(1)用主控制模塊(如圖3 中D1 所示)做測試驅動模塊,用樁模塊代替所有間接被主控模塊調用的模塊。

圖3 廣度優先自頂向下集成測試Fig.3 Breadth first top down integration testing

(2)根據廣度優先法(如圖3 中從D1 出發,先集成M1、M2 及M3,接著是S1、S2 這一層,以此類推)和新模塊的選擇原則,每次用一個實際單元替代一個被調用的樁模塊,并開發該單元可能需要的樁模塊。

(3)每組裝一個新模塊,測試一個,直到新模塊為系統函數。

2.2 集成測試覆蓋準則

SmartRocket 工具支持集成測試的函數覆蓋和調用覆蓋兩大覆蓋準則。

2.2.1 函數覆蓋

函數覆蓋是指程序中所有被調不同函數(除系統函數)均被調用一次。函數覆蓋是條件最弱的一種集成覆蓋準則。其原因是它只考慮了被調不同函數只調用一次,忽略了同一個被調函數[6]可能在不同的分支被調用多次。舉例說明函數覆蓋的局限性,如圖4 所示。

圖4 函數覆蓋局限性實例Fig.4 Function coverage limitation instance

按照函數覆蓋的標準,該集成的覆蓋率已經達到了100%,然而卻沒有發現明顯的錯誤,如當x為-1 時,程序會出現除零異常。因此,函數覆蓋沒有考慮到相同被調函數的邏輯性,需要結合其他的集成測試方法來使用。

2.2.2 調用覆蓋

調用覆蓋是指程序中所有被調函數均被調用。調用覆蓋需要結合分支覆蓋指標,確保程序真假分支上的被調函數都遍歷過至少一次。調用覆蓋更能準確地反映集成測試的集成關系。

3 實驗與分析

以編譯環境為Rede 的箭載嵌入式軟件中的BC 模式初始化功能為例,使用SmartRocket 進行集成測試。集成關系如圖5 所示,其中printf 函數為系統函數。

圖5 集成關系Fig.5 Integration relationship

3.1 配置集成測試環境

首先新建編譯環境Rede 和GCC;其次創建項目信息(項目名稱、版本號、項目類型、編譯器),并上傳被測項目文件;最后選擇集成測試的覆蓋準則(調用覆蓋、函數覆蓋),并填寫配置信息(運行環境、編譯環境、包含目錄等)。

3.2 執行集成測試

解析被測項目文件,在被測項目文件解析無誤的情況下,依據廣度優先的自頂向下的集成方法確定圖4 中的集成組合并選擇集成測試層級,運行自動生成的測試用例,并在調用覆蓋率和函數覆蓋率指標滿足要求的情況下導出測試用例報告。SmartRocket 集成測試界面如圖6 所示。

圖6 SmartRocket 集成測試界面Fig.6 SmartRocket integration test interface

3.3 集成用例報告

部分集成測試用例報告如表1 所示。

表1 部分測試用例報告Pig.1 Partial test case report

4 結語

SmartRocket 工具選擇廣度優先的自頂向下的集成方法,利用符號執行技術自動生成集成測試用例,并以函數覆蓋和調用覆蓋作為集成覆蓋標準,自動生成所需測試用例報告,實現了對箭載嵌入式軟件自動化集成測試,并解決了集成測試用例自動生成和測試用例報告適用性問題。

目前,箭載嵌入式軟件含有絕對地址變量時,Smart Rocket 自動生成的集成測試用例無法滿足函數覆蓋和調用覆蓋100%的指標,需人工設計集成測試用例,后續自動生成集成測試用例時需針對絕對地址變量自動識別并賦值進一步研究。

猜你喜歡
嵌入式軟件測試用例測試方法
基于泊松對相關的偽隨機數發生器的統計測試方法
基于SmartUnit的安全通信系統單元測試用例自動生成
基于云計算的軟件自動化測試方法
DLD-100C型雷達測試方法和應用
基于混合遺傳算法的回歸測試用例集最小化研究
實時嵌入式軟件的測試技術
全景相機遙控器嵌入式軟件V1.0 相關操作分析
對改良的三種最小抑菌濃度測試方法的探討
基于Eclipse的航天嵌入式軟件集成開發環境設計與實現
航天嵌入式軟件浮點運算誤差分析與控制
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合