浅析嵌入式软件可靠性设计

2013-03-27 15:29
电子世界 2013年5期
关键词:插桩软件可靠性嵌入式软件

1.嵌入式系统可靠性概述

嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”,是软件和硬件的综合体。嵌入式软件既是电子系统的核心,也是硬件系统的有效补充。需要具备防错、判错、纠错、容错的功能。嵌入式系统安全性的失效可能会导致灾难性的后果,即使是非安全性系统,由于大批量生产也会导致严重的经济损失。这就要求对嵌入式系统,包括嵌入式软件进行严格的测试、确认和验证。

2.嵌入式可靠性技术国内外研究动态

早期的嵌入式计算机大都是针对具体任务而设计的专用计算机。这种专机专用的设计方法在应用中逐渐暴露出许多弊端。首先,设计成本很高;其次,设计中有很多低水平重复性劳动;第三,要配备专用的维护人员,增加了费用等。而嵌入式系统的通用化设计则可以弥补这些不足。

国外对嵌入式软件测试的研究始于70年代,软件测试方法主要是针对单个系统的。在此后的20年,许多研究机构针对嵌入式软件的实时性、嵌入性和反应性等问题进行了大量的研究,许多支持嵌入式软件测试的工具也应运而生。很多计算机公司把嵌入式计算机设计成商用货架产品,取得相当的成功。90年代中后期,国内开始对嵌入式软件测试技术和测试工具进行研究,多数产品只应用在某一领域,通用化程度有待进一步提高,目前大型的软件工程都使用国外的软件测试平台。

3.嵌入式软件可靠性特点

(1)实时性对嵌入式软件可靠性的影响

实时软件的正确性由功能、行为和时间特性决定。如何对软件的时间特性进行验证成为嵌入式软件可靠性的核心问题之一。对软件的时间测试可分为静态时间分析和动态实时检测两种方法。

静态时间分析就是不执行被测程序,而通过分析程序结构来预估程序、子程序执行时间的方法,它不知道子程序实际运行时的分支走向和循环次数等不确定性因素,因此不能得到程序的实际执行时间。但静态分析可以确定程序在最坏情况下的执行时间,即程序最大执行时间是否满足时间约束。由于实时系统需要在任何情况下都在指定期限前完成任务,计算程序的最大执行时间具有非常重要的意义。

动态实时检测就是通过执行程序来测试程序的时间特性。在线仿真器ICE、指令仿真器和插桩工具是三种最常用的方法。

实时性使得嵌入式软件的测试用例编写不仅要测试软件的功能和行为特性,还要测试其时间特性,这给传统的测试用例生成方法带来了新问题。

(2)嵌入性对嵌入式软件可靠性的影响

嵌入式软件的开发环境和运行环境的不一致,也给嵌入式软件可靠性的测试带来了不少麻烦。一方面,测试工具运行在宿主机上,测试所需要的信息在目标机上产生,并通过一定的物理/逻辑连接传输到宿主机上,由测试工具接受。因此,嵌入式软件测试的一个重要问题是建立宿主机与目标机之间的物理/逻辑连接,解决数据信息的传输问题。

另一方面,即使在宿主机环境下测试再充分,也不能说明在目标机环境下该软件运行不出问题。因而,嵌入式软件还面临着目标环境的测试。这不仅增加了测试的代价,而且还带来了嵌入式软件测试策略问题,即哪些测试分配在宿主环境进行,哪些测试分配到目标环境下运行。

(3)反应性对嵌入式软件可靠性的影响

反应性系统在任何时刻都要对可能出现的时间作出适当反应。由于“激励-响应”在反应式系统中占主要地位,因此这类系统包含大量复杂的控制行为。

并发性是反应式系统最重要也是最基本的特征,任何反应式程序中均包含若干并发进程。所以,反应式不能简单的将它定义为输入和输出数据的函数,而需要表示为一个输入和输出序列的二元组。

4.提高嵌入式系统软件可靠性方法

(1)优化系统设计方案

嵌入式系统最大的特点是以控制为主,软硬件结合较多,功能性操作较多,模块互相调用较多,外部工作环境复杂,容易受到干扰或干扰别的设备,且执行错误的后果不仅仅是数据错误而且有可能导致系统崩溃等不可估量的灾难。在设计过程中需注意软硬件接口之间的冗余和预防性设计,可采用看门狗电路、状态保存等恢复技术;软件锁设计、程序陷阱设计等抗干扰技术以及备份技术有效的进行系统容错设计。

(2)严格的软件测试

软件可靠性测试是在软件生存周期的系统测试阶段提高软件可靠性水平的有效途径。各种测试方法、测试技术都能发现导致软件失效的缺陷,排除这些缺陷后,一般来讲一定会实现软件可靠性的增长,但是排除这些缺陷对可靠性的提高的作用却是不一样的。其中,软件可靠性测试能最有效地发现对可靠性影响大的缺陷,因此可以有效地提高软件的可靠性水平。

5.嵌入式软件测试的关键技术

预处理。在程序源代码被编译之前,由预处理器对程序源代码进行的处理。这个过程并不对程序的源代码进行解析,但它把源代码分割或处理成为特定的符号用来支持宏调用。如果测试的源代码是汇编的,要将短跳转改成长跳转。

词法语法分析。词法分析负责将源程序中的若干字符划分为若干记号,语法分析负责从若干记号中完成程序结构分析,识别出函数体、语句、表达式、关键字、程序分支等。

插桩技术。一般对程序进行动态测试时,使用程序插桩来进行覆盖测试,使被测试程序在保持原有逻辑完整性基础上在程序中插入一些探针函数即插桩语句,它是一个子过程调用,调用的子过程能在运行到插桩点时记录下有关的运行情况。基于这些运行情况的分析,可以获得程序执行过程中变量值的变化情况,也可以用来检测程序的分支覆盖和语句覆盖等覆盖信息。

6.嵌入式软件测试系统

被测试程序首先经过预处理,主要是进行宏替换和将短跳转改为远跳转。然后进行语法词法分析,对整个程序进行扫描后,生成相互有关联的链表,确定插桩函数的位置,在一些关键的字段和函数中插入桩,然后编译生成含有插桩函数的目标文件。在动态测试的集成环境中,用户选择需要测试类型是分支覆盖还是语句覆盖,相应的生成一个记录了该测试类型中所有函数的位置或者ID号的插桩文件,并自动生成相应的测试用例。根据插桩选择记录文件激活相应的插桩函数。系统运行后,将得到的信息返回给测试机,将测试结果记录到事先确定的缓冲区或文件中。测试人员就能根据测试结果与期望值相比较来判定覆盖情况是否满足要求了。若不能满足要求,就利用工具进行覆盖情况分析,找出未覆盖目标,根据控制流图,找出到达此目标的路径,依据此路径上各分支节点要到达此目标应满足的条件,设计新的测试用例,以增加覆盖率,最后将结果以GUI的形式显示。

全面提高嵌入式软件的质量、可靠性、安全性,需要提高嵌入式软件开发人员的素质。开发策略、程序设计、测试手段、安全分析、代码审核都要规范,避免开发工作的随意性、盲目性。

[1]李伯成.嵌入式系统可靠性设计[M].北京:电子工业出版社,2006.

[2]武晔卿.嵌入式系统可靠性设计技术及案例解析[M].北京:北京航空航天大学出版社,2012.

猜你喜欢
插桩软件可靠性嵌入式软件
基于TXL的源代码插桩技术研究
基于人工智能的模块化嵌入式软件开发研究
软件可靠性工程综合应用建模技术研究
基于性能分析的自适应插桩框架
基于记录重播的嵌入式系统死锁检测方法
全景相机遥控器嵌入式软件V1.0 相关操作分析
数控系统软件可靠性设计与故障分析技术
基于Eclipse的航天嵌入式软件集成开发环境设计与实现
航天嵌入式软件浮点运算误差分析与控制
基于顺序块的嵌入式白盒测试插桩技术研究