嵌入式软件覆盖测试综述
2017-04-13郭旺
郭 旺
(西南大学 数学与统计学院,重庆 400715)
嵌入式软件覆盖测试综述
郭 旺
(西南大学 数学与统计学院,重庆 400715)
嵌入式软件规模日益增大,结构也越来越复杂,对嵌入式软件系统必须进行严格的测试,如何提高嵌入式软件测试的质量和效率已经成为当前研究的重点。介绍当前嵌入式软件测试的3种主要环境,分析嵌入式软件测试的特点,并阐述了覆盖测试基本原理,最后对嵌入式软件覆盖测试关键技术进行了探讨。
嵌入式软件;软件测试;覆盖测试
0 引言
近年来,随着计算机技术的飞速发展,嵌入式软件得到了充分发展,其国防工业、工业控制、家用电器、医疗卫生、通讯产业等领域得到了广泛运用。随着嵌入式硬件的飞速发展,嵌入式系统软件也随之发展,软件的规模日益庞大,结构也越来越复杂[1]。由于嵌入式软件经常应用在一些关键性任务上,软件产生的错误可能给人们的生产和生活带来严重损失,甚至威胁人身安全。因此,软件质量引起了各方的高度重视[2]。对嵌入式软件系统及软件必须进行严格测试、确认和验证[3]。由于嵌入式系统具有实时性、资源有限、与硬件紧密相关、开发环境异于执行环境等特点[4],与嵌入式软件相比较,一般应用软件更为复杂,要求也更高。如何提高嵌入式软件测试的质量和效率已经成为当前研究的重点。
1 嵌入式软件测试环境
根据被测嵌入式软件所提供的运行环境的不同,嵌入式软件测试系统可分为3种类型:全实物仿真测试系统、半实物仿真测试系统、全数字仿真测试系统[5]。这3种嵌入式软件仿真测试系统都是嵌入式软件测试的重要手段和方法。
(1)全实物仿真测试。全实物仿真运行环境是最逼近真实环境的一种运行环境。在该运行环境下,整个嵌入式应用系统(包括硬件与软件)进行运行,全实物仿真运行环境与真实环境有一致的映射关系,如同样的设备接口、同样的I/O传输格式、同样的工作方式及状态等。待测程序处于完全真实的运行环境中,直接在目标机与其外设连接后运行,形成闭环进行测试。全实物仿真测试不必用数学模型来代理控制系统,可以有效发现真实系统设计和部分模型存在的问题,也防止部分部件难以仿真建模的问题,同时对软件接口测试和实时性测试比较真实。缺点是可控性弱,真实的外围设备使得系统设置缺乏灵活性,测试用例中的很多输入条件无法满足,测试结果的记录比较困难,测试有效性差。同时一旦被测系统的更换导致与它交联的系统也发生变化,测试环境就需要重新搭建,通用性受到很大限制。
(2)全数字仿真测试。全数字仿真测试是通过开发目标机CPU、内存、外围可编程芯片、外围设备I/O接口以及外部信号事件激励的数字模拟器,从而构成纯数字化的嵌入式软件目标机。在宿主机上实现对嵌入式软件的测试。
全数字仿真测试把嵌入式软件与真实目标机相剥离,摆脱了嵌入式软件执行过程中对硬件的依赖,优点包括成本低、测试可重复、测试的可控性大大增加、软件的执行比较透明,对测试用例支持较好,支持故障注入测试等。然而,随着计算机系统和物理系统的耦合越来越紧密[6],仿真模拟目标平台的软硬件环境变得越来越困难。并且仿真环境下的某些测试结果(特别是对实时软件)不能真实地反应软件的运行情况,数据真实性较弱。同硬件测试环境相比,全数字仿真环境下的被测程序运行速度较慢,这是因为仿真运行使用了多几倍、几十倍的指令去模拟一条指令的执行,加上执行过程中为满足测试的需要,仿真运行比实际运行要慢几百倍。
(3)半实物仿真测试研究。半实物仿真测试系统介于全数字测试与全实物测试,集成了全实物运行环境的真实性和全数字模拟测试的灵活性、透明性等特点。在半实物仿真系统中,待测程序依然在所需的特定目标机运行,确保了待测程序运行环境的真实性;同时,系统能够根据需要设置待测程序的输入,记录待测程序的运行结果。
2 嵌入式软件测试特点
嵌入式系统具有系统资源有限、专用性强、实时性强等特点,因此嵌入式软件测试与传统软件的测试策略有较大不同。嵌入式软件测试的特点包括:
(1)嵌入式软件与硬件密切相关,且嵌入式软件与其所运行的计算机系统高度耦合,只能运行在特定的目标机上。嵌入式软件的功能、性能与其所运行的硬件性能及结构紧密相关。因此,搭建嵌入式软件运行所需的特定硬件环境是嵌入式软件测试的重要过程之一。
(2)嵌入式系统实时性要求较高,要求嵌入式软件在规定的时间内完成任务处理,当面临并发任务时,要求系统严格按照一定的时序进行处理。为了保障嵌入式软件的高可靠性,要求其在运行时不能发生内存泄露。因此,对嵌入式软件进行的测试包括功能测试、性能测试、接口测试、覆盖率分析测试、内存泄漏测试等。
(3)嵌入式软件开发采用交叉开发方式,其开发环境不同于其运行环境,在宿主机上测试再充分也不能保证在目标机器上正常运行。而且在目标机器上软硬件资源有限,难以满足测试需求,因而测试过程中产生的测试数据必须发回至宿主机分析。
(4)嵌入式系统通常面临复杂的工作环境(如工业强磁场、高温工作区、海洋等),因而需要在不同环境下进行测试,以确保在真实环境下嵌入式软件的可靠性。
3 嵌入式软件覆盖测试原理
嵌入式软件的开发与传统软件很大的不同点在于采用交叉开发方式。开发工具运行在软件和硬件资源较为丰富的宿主机上,而嵌入式应用程序运行在资源相对稀少的目标机上。因而当对软件测试时面临着类似情况:测试工具在宿主机上运行,而被测程序在目标机上运行并产生测试数据,最后通过某种物理/逻辑连接方式传输到宿主机上的测试工具那里。
嵌入式软件覆盖测试的基本原理如图1所示。
图1 嵌入式软件覆盖测试原理
4 嵌入式软件覆盖测试关键技术
4.1 源代码分析技术
程序分析是软件测试的重要方法之一[7]。首先对待测程序源代码进行静态分析,从而提取出函数名称、参数类型、返回类型等结构信息,最后将收集到的程序结构信息以某种易于分析和检索的格式存储,即可得到抽象语法树(Abstract Syntax Tree,缩写为AST)。
抽象语法树是源程序经过词法分析[8]、语法分析和语义分析后逐步产生的。语法树的构造过程如图2所示。
图2 抽象语法树的构造过程
抽象语法树由不同类型的节点组成,每种节点代表了一种不同的语法结构。节点类型包括名字节点、表达式节点、语句节点、声明节点、复合语句、类型节点、函数声明节点、函数体节点等等。抽象语法树反应了程序结构,由它可以生成程序的控制流图,它也包含了很多程序关键信息,这些信息可供后续环节进一步使用。
4.2 插桩技术
插桩技术能够根据用户需求,记录待测程序在运行过程中的运行状态,是软件测试的有效方法。主要内容是:在保证待测程序逻辑完整性的基础上,在其源代码中植入探针函数。探针函数是一个子过程调用,调用的子过程能在运行到插桩点时记录有关信息,采集被测软件运行时程序的运行特征数据。基于对这些特征数据的分析,可以揭示程序的内部行为和特征[10]。插桩技术既要保证收集足够的测试过程信息,又要尽可能减少代码膨胀率以减小插桩对被测程序执行效率的影响。
插桩技术包括以下4个阶段:①插桩植入。依据源代码分析获得的程序结构信息和覆盖原则确认插桩位置,插入对应的探针函数;②编译链接。对插桩后的源程序代码进行编译链接,生成可执行文件;③程序执行。执行被测程序,在执行过程中之前插入的探针函数会将产生的程序控制流和数据流信息等测试数据记录下来;④数据分析。将之前探针函数记录的测试数据与源程序进行匹配,根据相应的方法获得相应的覆盖率。
根据测试要求可以采用不同的插桩策略,每次在不同的位置插入相应的探针。每次只是插入有限的探针,提高插桩效率,同时降低程序执行的开销。插桩位置的选择必须建立在确保插桩后的程序可以正确运行的基础上。主要的插桩策略包括:
(1)语句覆盖插桩策略。对程序进行基于块的划分,块是一段顺序执行的程序语句序列,只要块中的任意一条语句被执行,则整个块都会被执行,因此在每个块的入口处,插入探针函数,在程序执行过程中跟踪该块是否有执行。
(2)分支覆盖插桩策略。对于源程序中的每个分支,在其不同的跳转语句处植入相应的探针,在程序执行过程中跟踪该分支是否有执行。
(3)条件覆盖插桩策略。在if、switch、while、do-while、for几种条件语句的布尔表达式处插入探针,在程序执行过程中跟踪该条件是否执行。
5 结语
随着计算机硬件技术和软件技术的发展,嵌入式软件结构日益复杂,因此对嵌入式软件的测试尤为必要,对嵌入式软件测试质量和效率的提升值得研究。本文总结了当前嵌入式软件测试的3种主要环境,分析了嵌入式软件测试特点,阐述了覆盖测试基本原理,最后介绍了嵌入式软件覆盖测试所涉及的主要技术:源代码分析技术和插桩技术,能够对嵌入式软件测试相关研究提供一些参考。
[1] EBERT C,JONES C.Embedded software:facts,figures and future[J].IEEE Computer,2009,42(4):42-52.
[2] YIN Y,LIU B.A method of test case automatic generation for embedded software[C].International Conference on Information Engineering and Computer Science,2009:1-5.
[3] 郭群.嵌入式软件测试设计技术[J].微处理机,2008,29(4):104-106.
[4] BROEKMAN B,NOTENBOOM E.Testing embedded software[M].Pearson Education,2003.
[5] 蔡建平,沈琦,谢会东.嵌入式软件测试实用技术[M].北京:清华大学出版社,2010.
[6] KIM J E,MOSSE D.Generic framework for design,modeling and simulation of cyber physical systems[J].ACM SIGBED Review,2008,5(1):1-5.
[7] 蔡虹,沈雷,李永红.基于覆盖测试的嵌入式软件自动裁剪[J].计算机工程,2010(1):73-75.
[8] 陈火旺,刘春林,谭庆平,等.程序设计语言编译原理[M].北京:国防工业出版社,2010.
[9] HUANG J C.Program instrumentation and software testing[J].Computer,1978(4):25-32.
(责任编辑:孙 娟)
Review of the Embedded Software Coverage Testing
With the software application domain continue to expand, the embedded system has been fully developed and widely used. As an important part of embedded system, the embedded software quality has attracted great attention of all parties. Three main testing environment for embedded software are elaborated. The characteristics of embedded software testing are analyzed. Also the fundamental principle of embedded software testing is emphasized. Finally the key technologies of embedded software coverage testing are introduced, including source code analysis and instrumentation technology.
Embedded Software; Software Testing; Coverage Testing
郭旺(1990-),男,陕西韩城人,硕士,西南大学数学与统计学院助理实验师,研究方向为软件工程、软件测试。
10.11907/rjdk.162658
TP301
A
1672-7800(2017)003-0179-03