王 华, 高 扬, 吴 强, 张 侹
(1. 西安测绘研究所, 陕西 西安 710054; 2. 地理信息工程国家重点实验室, 陕西 西安 710054)
嵌入式测绘导航软件是指运行于以北斗用户终端、 嵌入式GIS终端为代表的嵌入式测绘导航设备之上, 为用户提供精确定位、 高精度授时、 短报文通信、 精密测量、 地图显示、 路径规划、 智能导航、 地图标绘、 地形分析等任务保障的嵌入式软件系统, 具有导航定位信息和地理空间信息的接收、 采集、 处理、 分析、 显示、 管理等功能.
嵌入式测绘导航软件测试涉及功能性、 可靠性、 安全性和容错性等诸多方面, 其软件故障具有以下特点: ① 故障类型多样: 嵌入式测绘导航软件需要进行多种类型的测试, 其故障类型较为多样, 如接口协议故障、 软件界面故障、 数据处理故障、 地图数据故障等; ② 故障难以检测: 嵌入式测绘导航软件的很多故障在正常运行情况下发生概率很低, 采用常规测试方法很难发现, 如北斗用户终端软件的卫星完好性检测和自毁等相关功能故障; ③ 故障后果严重: 嵌入式测绘导航软件应用广泛, 其很多故障的发生会导致严重的后果, 如定位算法故障或对异常信号的处理故障将会引起定位错误或定位精度下降, 从而导致飞机、 汽车等自动驾驶功能失效或发生严重事故; 又如路径规划功能故障或导航图数据故障可能导致“绕路”、 “费时”和“无路可走”等行车事故.
嵌入式测绘导航软件的这些特点对软件测试工作提出了挑战, 为了提高测试的有效性和测试效率, 我们引入基于故障注入的软件测试技术. 故障注入是一种仿真技术, 它通过人为的手段直接把故障引入到被验证目标系统之中, 从而缩短故障的潜伏期, 加速系统的失效过程[1]. 通过这种方法, 模拟目标系统在实际运行环境中可能发生的各种故障, 让目标系统带着故障运行, 然后通过对目标系统的运行情况、 系统行为等进行观察、 记录和分析, 验证目标系统故障检测、 故障隔离、 系统恢复和重组等故障处理机制的有效性, 为完善和改进对目标系统的设计提供重要的反馈信息[2].
基于故障注入的嵌入式测绘导航软件测试是在嵌入式测绘导航软件仿真测试基础上, 结合故障注入过程的特点, 将故障分析、 故障建模和故障注入技术有效应用于仿真测试过程当中, 有效扩大被测系统的测试空间, 提高嵌入式测绘导航软件测试的有效性和充分性.
针对嵌入测绘导航软件测试实际, 提出如图 1 所示的故障注入测试框架.
图 1 基于故障注入的嵌入式测绘导航软件测试框架Fig.1 Embedded surveying, mapping and navigation software testing framework based on fault injection
1) 软件测试需求分析: 从软件需求规格说明出发, 根据软件的可靠性、 安全性、 容错性等方面要求进行软件测试需求分析, 梳理出需要采用故障注入测试方法的功能、 性能、 接口等测试项.
2) 故障模型建立: 在软件故障注入测试需求分析的基础上, 参考通用故障模型, 从便于测试开展和确保测试效果的角度出发建立适用于嵌入式测绘导航软件测试的故障模型.
3) 故障数据生成: 根据嵌入式测绘导航软件测试故障模型, 设计测试用例, 生成故障数据, 包括输入故障数据、 故障注入位置和条件、 预期输出等.
4) 故障注入: 依据测试用例, 向待测目标系统注入故障.
5) 目标系统: 对注入的具体故障作出反应, 并给出相应的反馈, 目标系统除了被测软硬件环境外, 还应包括与之相连的外围仿真环境、 测试工具和测量设备等.
6) 反馈数据收集: 收集目标系统的反馈输出数据.
7) 测试结果分析: 将收集到的目标系统反馈数据和测试用例的预期输出进行比较分析, 形成测试结果.
8) 测试管理: 在测试管理工具的支持下, 对故障注入测试的全过程进行管理.
故障模型指在故障注入过程中根据不同的测试对象及其所面临的需要处理的故障类型, 所采用的各种不同的故障形式[3]. 故障注入测试结果的正确性和精确性直接取决于故障模型的准确程度, 故障模型是故障注入是否可以进行的关键. 故障模型是在一定层次上对目标系统真实故障的抽象. 抽象级别不同, 系统的故障模型也不同.
按照引起故障的方式将故障模型分为基于硬件的故障模型和基于软件的故障模型[4].
1) 基于硬件的故障模型: 由硬件引起的故障模型, 如寄存器故障、 内存故障、 电压不稳、 意外断电、 时钟偏移、 电磁干扰等;
2) 基于软件的故障模型: 由软件引起的故障模型, 如协议错误、 操作错误、 输入数据错误、 指针错误、 内存溢出等.
按照故障测试的类别将故障模型分为白盒测试故障模型和黑盒测试故障模型.
3) 白盒测试故障模型: 需要通过改变软件源代码来注入故障, 如通过改变赋值语句和逻辑结构来注入故障, 引起这类故障的软件缺陷可采用正交分类方法[5];
4) 黑盒测试故障模型: 不需要改变软件源代码, 而只需改变软件输入来进行故障注入, 如数据格式错误、 数据类型错误、 数据输入顺序错误、 数据超出范围等.
考虑嵌入式测绘导航软件特点和测试需要, 这里主要研究基于软件的黑盒测试故障模型. 故障模型一般用故障的公共属性来表征. 目前, 采用较多的故障模型是使用故障的4个属性来描述目标系统, 即故障位置、 故障类型、 故障持续时间和故障注入时刻[6]. 其中, 故障持续时间可分为永久性故障、 瞬态故障和间歇性故障, 在嵌入式测绘导航软件测试中我们并不关心. 从测试用例完整性和便于测试开展的角度出发, 建立嵌入式测绘导航软件故障模型, 包括故障类型、 故障名称、 故障输入、 可能导致的软件故障和软件预期反应等5个属性, 表 1 列出了部分常见嵌入式测绘导航软件故障, 主要包括导航电文类[7]、 接口协议类[8]、 处理算法类、 软件界面类、 系统安全类等几类故障.
表 1 部分常见嵌入式测绘导航软件故障
续表1:
故障类型故障名称故障输入可能导致的软件故障软件预期反应故障说明接口协议类校验错误修改正常语句的校验字段为其他有效值(0~9,A~F)未能识别校验错误,导致软件作出错误反应或死机等其他故障识别出校验错误,丢弃该指令测试软件对校验错误的检测能力语句格式错误语句不以$或!开始,不以
针对上面总结的几类常见嵌入式测绘导航软件故障, 结合具体的软件测试方法, 其故障注入方法包括场景注入法、 接口注入法、 界面注入法和综合注入法.
1) 场景注入法
场景注入法即通过测试场景注入故障, 其关键在于设计故障场景. 对于北斗用户终端软件测试, 可通过北斗信号模拟源进行测试场景设计, 如导航电文类故障和处理算法类故障中的接收机自主完好性监测故障、 可见卫星不足故障等; 对于嵌入式GIS软件测试, 可通过配置或修改地图数据来生成故障测试场景, 如图号错误故障、 数据完整性故障等.
2) 接口注入法
接口注入法即通过软件接口注入故障, 其关键在于设计故障接口数据. 故障接口数据主要按照接口协议的格式要求进行设计, 如校验错误、 数值超出范围等接口协议类故障.
3) 界面注入法
界面注入法即通过操作软件界面注入故障, 其关键在于寻找可导致软件故障的界面操作方法和步骤, 如异常输入、 快速操作、 乱序操作等.
4) 综合注入法
综合注入法是综合运用测试场景、 软件接口、 软件界面操作等方法的故障注入方法. 如在场景中设计了某个故障, 但是在测试过程中需要通过软件界面操作来触发这个故障.
嵌入式测绘导航软件的故障注入需要根据不同的故障类型选择相应的故障注入方法, 使用时要灵活运用以达到最好的效果.
5) 应用验证
基于故障注入的嵌入式测绘导航软件测试技术在某型北斗用户终端软件测试和某型嵌入式GIS软件测试中进行了应用, 按照本文提出的测试框架进行了测试环境构建、 测试需求分析、 故障模型建立、 测试用例设计、 故障数据生成、 故障注入、 故障数据收集和测试结果分析等工作, 相比之前的同类软件测试, 增强了软件故障测试的针对性, 有效提高了故障检测效率, 提升了测试的有效性和充分性, 具体如表 2 所示.
表 2 基于故障注入的嵌入式测绘导航软件测试技术应用结果
嵌入式测绘导航软件具有故障类型多样、 故障难以检测、 故障后果严重等特点, 这对其软件测试工作提出了极大挑战. 本文针对嵌入式测绘导航软件测试, 提出一种基于故障注入的测试技术, 结合具体的测试工作构建了测试框架, 建立了实用的测试模型, 列出了部分常见的嵌入式测绘导航软件故障, 提出了几种故障注入方法, 并在实际的软件测试工作中进行了应用验证. 测试结果表明, 该技术可有效提高嵌入式测绘导航软件故障检测效率, 提升测试的有效性和充分性.
[1] 王胜文. 基于软件的故障注入方法研究[D]. 哈尔滨: 哈尔滨工业大学, 2005.
[2] 王金波, 张涛. 基于故障注入的嵌入式软件安全性测试框架及实现[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] 徐晓露. 基于故障注入的嵌入式系统测试研究[D]. 杭州: 浙江大学, 2008.
[7] 中国卫星导航系统管理办公室. 北斗卫星导航系统空间信号接口控制文件公开服务信号(2.1版)[DB/OL]. http:∥nteract.beidou.gov.cn/interact/download.service?attachment=2016/11/07/13411.pdf.
[8] BD 410004-2015. 北斗/全球卫星导航系统(GNSS)接收机导航定位数据输出格式[S].