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