王 華, 高 揚, 吳 強, 張 侹
(1. 西安測繪研究所, 陜西 西安 710054; 2. 地理信息工程國家重點實驗室, 陜西 西安 710054)
嵌入式測繪導航軟件是指運行于以北斗用戶終端、 嵌入式GIS終端為代表的嵌入式測繪導航設備之上, 為用戶提供精確定位、 高精度授時、 短報文通信、 精密測量、 地圖顯示、 路徑規(guī)劃、 智能導航、 地圖標繪、 地形分析等任務保障的嵌入式軟件系統(tǒng), 具有導航定位信息和地理空間信息的接收、 采集、 處理、 分析、 顯示、 管理等功能.
嵌入式測繪導航軟件測試涉及功能性、 可靠性、 安全性和容錯性等諸多方面, 其軟件故障具有以下特點: ① 故障類型多樣: 嵌入式測繪導航軟件需要進行多種類型的測試, 其故障類型較為多樣, 如接口協(xié)議故障、 軟件界面故障、 數(shù)據(jù)處理故障、 地圖數(shù)據(jù)故障等; ② 故障難以檢測: 嵌入式測繪導航軟件的很多故障在正常運行情況下發(fā)生概率很低, 采用常規(guī)測試方法很難發(fā)現(xiàn), 如北斗用戶終端軟件的衛(wèi)星完好性檢測和自毀等相關功能故障; ③ 故障后果嚴重: 嵌入式測繪導航軟件應用廣泛, 其很多故障的發(fā)生會導致嚴重的后果, 如定位算法故障或對異常信號的處理故障將會引起定位錯誤或定位精度下降, 從而導致飛機、 汽車等自動駕駛功能失效或發(fā)生嚴重事故; 又如路徑規(guī)劃功能故障或導航圖數(shù)據(jù)故障可能導致“繞路”、 “費時”和“無路可走”等行車事故.
嵌入式測繪導航軟件的這些特點對軟件測試工作提出了挑戰(zhàn), 為了提高測試的有效性和測試效率, 我們引入基于故障注入的軟件測試技術. 故障注入是一種仿真技術, 它通過人為的手段直接把故障引入到被驗證目標系統(tǒng)之中, 從而縮短故障的潛伏期, 加速系統(tǒng)的失效過程[1]. 通過這種方法, 模擬目標系統(tǒng)在實際運行環(huán)境中可能發(fā)生的各種故障, 讓目標系統(tǒng)帶著故障運行, 然后通過對目標系統(tǒng)的運行情況、 系統(tǒng)行為等進行觀察、 記錄和分析, 驗證目標系統(tǒng)故障檢測、 故障隔離、 系統(tǒng)恢復和重組等故障處理機制的有效性, 為完善和改進對目標系統(tǒng)的設計提供重要的反饋信息[2].
基于故障注入的嵌入式測繪導航軟件測試是在嵌入式測繪導航軟件仿真測試基礎上, 結合故障注入過程的特點, 將故障分析、 故障建模和故障注入技術有效應用于仿真測試過程當中, 有效擴大被測系統(tǒng)的測試空間, 提高嵌入式測繪導航軟件測試的有效性和充分性.
針對嵌入測繪導航軟件測試實際, 提出如圖 1 所示的故障注入測試框架.
圖 1 基于故障注入的嵌入式測繪導航軟件測試框架Fig.1 Embedded surveying, mapping and navigation software testing framework based on fault injection
1) 軟件測試需求分析: 從軟件需求規(guī)格說明出發(fā), 根據(jù)軟件的可靠性、 安全性、 容錯性等方面要求進行軟件測試需求分析, 梳理出需要采用故障注入測試方法的功能、 性能、 接口等測試項.
2) 故障模型建立: 在軟件故障注入測試需求分析的基礎上, 參考通用故障模型, 從便于測試開展和確保測試效果的角度出發(fā)建立適用于嵌入式測繪導航軟件測試的故障模型.
3) 故障數(shù)據(jù)生成: 根據(jù)嵌入式測繪導航軟件測試故障模型, 設計測試用例, 生成故障數(shù)據(jù), 包括輸入故障數(shù)據(jù)、 故障注入位置和條件、 預期輸出等.
4) 故障注入: 依據(jù)測試用例, 向待測目標系統(tǒng)注入故障.
5) 目標系統(tǒng): 對注入的具體故障作出反應, 并給出相應的反饋, 目標系統(tǒng)除了被測軟硬件環(huán)境外, 還應包括與之相連的外圍仿真環(huán)境、 測試工具和測量設備等.
6) 反饋數(shù)據(jù)收集: 收集目標系統(tǒng)的反饋輸出數(shù)據(jù).
7) 測試結果分析: 將收集到的目標系統(tǒng)反饋數(shù)據(jù)和測試用例的預期輸出進行比較分析, 形成測試結果.
8) 測試管理: 在測試管理工具的支持下, 對故障注入測試的全過程進行管理.
故障模型指在故障注入過程中根據(jù)不同的測試對象及其所面臨的需要處理的故障類型, 所采用的各種不同的故障形式[3]. 故障注入測試結果的正確性和精確性直接取決于故障模型的準確程度, 故障模型是故障注入是否可以進行的關鍵. 故障模型是在一定層次上對目標系統(tǒng)真實故障的抽象. 抽象級別不同, 系統(tǒng)的故障模型也不同.
按照引起故障的方式將故障模型分為基于硬件的故障模型和基于軟件的故障模型[4].
1) 基于硬件的故障模型: 由硬件引起的故障模型, 如寄存器故障、 內存故障、 電壓不穩(wěn)、 意外斷電、 時鐘偏移、 電磁干擾等;
2) 基于軟件的故障模型: 由軟件引起的故障模型, 如協(xié)議錯誤、 操作錯誤、 輸入數(shù)據(jù)錯誤、 指針錯誤、 內存溢出等.
按照故障測試的類別將故障模型分為白盒測試故障模型和黑盒測試故障模型.
3) 白盒測試故障模型: 需要通過改變軟件源代碼來注入故障, 如通過改變賦值語句和邏輯結構來注入故障, 引起這類故障的軟件缺陷可采用正交分類方法[5];
4) 黑盒測試故障模型: 不需要改變軟件源代碼, 而只需改變軟件輸入來進行故障注入, 如數(shù)據(jù)格式錯誤、 數(shù)據(jù)類型錯誤、 數(shù)據(jù)輸入順序錯誤、 數(shù)據(jù)超出范圍等.
考慮嵌入式測繪導航軟件特點和測試需要, 這里主要研究基于軟件的黑盒測試故障模型. 故障模型一般用故障的公共屬性來表征. 目前, 采用較多的故障模型是使用故障的4個屬性來描述目標系統(tǒng), 即故障位置、 故障類型、 故障持續(xù)時間和故障注入時刻[6]. 其中, 故障持續(xù)時間可分為永久性故障、 瞬態(tài)故障和間歇性故障, 在嵌入式測繪導航軟件測試中我們并不關心. 從測試用例完整性和便于測試開展的角度出發(fā), 建立嵌入式測繪導航軟件故障模型, 包括故障類型、 故障名稱、 故障輸入、 可能導致的軟件故障和軟件預期反應等5個屬性, 表 1 列出了部分常見嵌入式測繪導航軟件故障, 主要包括導航電文類[7]、 接口協(xié)議類[8]、 處理算法類、 軟件界面類、 系統(tǒng)安全類等幾類故障.
表 1 部分常見嵌入式測繪導航軟件故障
續(xù)表1:
故障類型故障名稱故障輸入可能導致的軟件故障軟件預期反應故障說明接口協(xié)議類校驗錯誤修改正常語句的校驗字段為其他有效值(0~9,A~F)未能識別校驗錯誤,導致軟件作出錯誤反應或死機等其他故障識別出校驗錯誤,丟棄該指令測試軟件對校驗錯誤的檢測能力語句格式錯誤語句不以$或!開始,不以
針對上面總結的幾類常見嵌入式測繪導航軟件故障, 結合具體的軟件測試方法, 其故障注入方法包括場景注入法、 接口注入法、 界面注入法和綜合注入法.
1) 場景注入法
場景注入法即通過測試場景注入故障, 其關鍵在于設計故障場景. 對于北斗用戶終端軟件測試, 可通過北斗信號模擬源進行測試場景設計, 如導航電文類故障和處理算法類故障中的接收機自主完好性監(jiān)測故障、 可見衛(wèi)星不足故障等; 對于嵌入式GIS軟件測試, 可通過配置或修改地圖數(shù)據(jù)來生成故障測試場景, 如圖號錯誤故障、 數(shù)據(jù)完整性故障等.
2) 接口注入法
接口注入法即通過軟件接口注入故障, 其關鍵在于設計故障接口數(shù)據(jù). 故障接口數(shù)據(jù)主要按照接口協(xié)議的格式要求進行設計, 如校驗錯誤、 數(shù)值超出范圍等接口協(xié)議類故障.
3) 界面注入法
界面注入法即通過操作軟件界面注入故障, 其關鍵在于尋找可導致軟件故障的界面操作方法和步驟, 如異常輸入、 快速操作、 亂序操作等.
4) 綜合注入法
綜合注入法是綜合運用測試場景、 軟件接口、 軟件界面操作等方法的故障注入方法. 如在場景中設計了某個故障, 但是在測試過程中需要通過軟件界面操作來觸發(fā)這個故障.
嵌入式測繪導航軟件的故障注入需要根據(jù)不同的故障類型選擇相應的故障注入方法, 使用時要靈活運用以達到最好的效果.
5) 應用驗證
基于故障注入的嵌入式測繪導航軟件測試技術在某型北斗用戶終端軟件測試和某型嵌入式GIS軟件測試中進行了應用, 按照本文提出的測試框架進行了測試環(huán)境構建、 測試需求分析、 故障模型建立、 測試用例設計、 故障數(shù)據(jù)生成、 故障注入、 故障數(shù)據(jù)收集和測試結果分析等工作, 相比之前的同類軟件測試, 增強了軟件故障測試的針對性, 有效提高了故障檢測效率, 提升了測試的有效性和充分性, 具體如表 2 所示.
表 2 基于故障注入的嵌入式測繪導航軟件測試技術應用結果
嵌入式測繪導航軟件具有故障類型多樣、 故障難以檢測、 故障后果嚴重等特點, 這對其軟件測試工作提出了極大挑戰(zhàn). 本文針對嵌入式測繪導航軟件測試, 提出一種基于故障注入的測試技術, 結合具體的測試工作構建了測試框架, 建立了實用的測試模型, 列出了部分常見的嵌入式測繪導航軟件故障, 提出了幾種故障注入方法, 并在實際的軟件測試工作中進行了應用驗證. 測試結果表明, 該技術可有效提高嵌入式測繪導航軟件故障檢測效率, 提升測試的有效性和充分性.
[1] 王勝文. 基于軟件的故障注入方法研究[D]. 哈爾濱: 哈爾濱工業(yè)大學, 2005.
[2] 王金波, 張濤. 基于故障注入的嵌入式軟件安全性測試框架及實現(xiàn)[J]. 計算機應用研究, 2012, 29(8): 2991-2995.
Wang Jinbo, Zhang Tao. Framework and realization of embedded software safety-testing based on fault injection[J]. Application Research of Computers, 2012, 29(8): 2991-2995. (in Chinese)
[3] 李娟. 基于故障注入的軟件安全測試技術研究[D]. 合肥: 中國科學技術大學, 2009.
[4] 葉焰鋒. 基于故障模型的軟件故障注入方法研究[D]. 武漢: 華中師范大學, 2008.
[5] 賀仁亞, 唐龍利. 用于故障注入的軟件代碼缺陷模式研究[C]. 第六屆全國軟件測試學術會議論文集, 2015: 28-37.
[6] 徐曉露. 基于故障注入的嵌入式系統(tǒng)測試研究[D]. 杭州: 浙江大學, 2008.
[7] 中國衛(wèi)星導航系統(tǒng)管理辦公室. 北斗衛(wèi)星導航系統(tǒng)空間信號接口控制文件公開服務信號(2.1版)[DB/OL]. http:∥nteract.beidou.gov.cn/interact/download.service?attachment=2016/11/07/13411.pdf.
[8] BD 410004-2015. 北斗/全球衛(wèi)星導航系統(tǒng)(GNSS)接收機導航定位數(shù)據(jù)輸出格式[S].