关闭

嵌入式软件测试的数据获取技术

发表于:2011-7-19 14:17

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  1、引言

  随着航空、航天、核电等领域嵌入式产品在信息化、体系化、自主化和智能化等方面的飞速发展,软件的规模越来越大、关键程度越来越高,软件的质量与可靠性已经成为影响产品质量与可靠性的重要因素。软件测试是目前普遍采用的提高软件质量的重要手段,是软件质量保证工作中的重要环节之一。测试数据获取是软件测试的首要前提,数据获取的准确性、实时性和可靠性对测试质量有决定性影响,是评估被测对象的稳定性、安全性以及技术指标满足用户需求的重要依据。

  2、数据获取技术

  数据获取是通过软件、硬件等方式获取测试数据以评价软件质量的技术。根据测试数据的获取手段,可以将嵌入式软件测试的数据获取技术分为3种方式[1]:实际的物理通道;开发工具IDE的虚拟I/O功能;读取内存区数据。

  2.1 实际的物理通道

  若目标系统上含有可以外接的物理通道,如USB、I2C、I2S、SSI、SPI、UART、CAN、以太网、并口等接口,且使用这些物理通道对目标系统运行影响不大或者其影响可以接受时,可以将其作为测试通道使用。计算机含有USB、UART、以太网、并口等接口,在测试时可以直接使用这些物理通道与主机建立通信,实时获得目标系统产生的测试数据。其他的通道需要外配转换接口方能与计算机建立通信。当这些物理通道不能作为测试使用时,可以通过总线监听的方式直接从CPU的地址总线和数据总线上获取数据。

  实际的物理通道方式,数据获取真实准确,实时性好,较为有效,但需要测试人员深入了解目标系统。

  2.2 开发工具虚拟I/O

  嵌入式软件一般在交叉开发环境下开发,大多数嵌入式开发工具具备编译、链接、加载、调试等功能,有些高级的开发工具IDE具备虚拟I/O功能,给测试带来了很大的方便。比如:Tornado、TICCS,在Tornado的shell中运行测试程序时,可以把printf的内容打印到消息窗口中;CCS可以支持fprintf,直接在主机上生成测试数据文件。

  开发工具虚拟I/O方式,数据获取简单容易,自动化程度较低,也有通过开发环境改造或者在开发环境上集成应用的途径,来提高测试数据获取的自动化程度。

  2.3 读取内存数据

  若目标系统没有可以供测试使用的物理通道,开发工具也不具备虚拟I/O功能,可以采用读取内存数据的方式。具体实现方法是开辟一块足够大的缓存区,测试时可以借助开发工具来加载含有测试脚本的程序,在目标系统运行的过程中把测试数据写入缓存区中,在测试过程中或者测试执行后,使用开发工具读取内存的功能把缓存区中的数据读取出来,在主机上保存成测试数据文件。

  读取内存数据方式,适用性广,但要求系统有足够的内存资源,当涉及到实时性测试时需要记录时间信息,对测试脚本的要求较高。

  3、插桩技术

  插桩技术也叫软件打点技术,在保持被测试程序原有逻辑正确性的基础上,通过向程序中插入探测器,即信息采集的代码段(可以是赋值语句或采集程序运行信息的函数),来捕获测试数据,是一种侵入式的数据获取技术。依据插桩的阶段和对象不同,分为源代码插桩和目标代码插桩?源代码插桩会因编程语言或版本不同而有所差异,但语法、语义信息全面,利于进行准确的插桩分析;目标代码因代码语法和语义信息不完整,易造成对程序运行错误的定位?捕获和分析,插桩难度较大。

  程序插桩常用于实现覆盖测试,来检测程序的分支覆盖、条件覆盖、语句覆盖、修改的分支/条件覆盖(MC/DC);也可以用来捕获程序执行过程中变量的变化情况,得出程序的控制流信息、数据流信息以及效率特性等性能信息。进行插桩之前,需要明确要探测哪些信息,在程序的什么部位放置探测器,探测器的数量,探测器所带来的代码膨胀影响等。以利用脚本语言Fortran进行程序插桩为例,在一般情况下,探测器的位置放置于程序块的第一个可执行语句之前、有标号的可执行语句处、entry语句的前后、循环语句之后、条件语句之后、logicalif语句之后、call语句之后、goto语句之后等。为方便测试的实现和管理,往往将探测器以函数调用的方式插入,并依据测试的目的不同将探测器分为不同类别,例如线性块探测器、分支探测器、模块探测器、时间探测器等。

  按照插桩实现的方式,主要有硬件采集方式的插桩、硬件收发方式的插桩以及纯软件方式的插桩。

  3.1 硬件采集方式

  硬件采集方式的插桩测试,需要在程序执行到插桩点时,通过外接的硬件采集器从目标板总线采集总线信号,并传输到测试用的计算机(以下称为宿主机),进而进行测试分析,是一种硬件与软件相结合的测试方法。其具体实现过程如图1所示。

图1 硬件采集方式的插桩实现过程

  1)预处理器对源代码进行预处理,如去掉注释行,将宏定义进行语义展开,生成中间代码;插桩器对中间代码进行插桩,生成插桩后的代码,并建立符号数据库以保存插桩标记等信息[4]。

  2)插桩后的代码通过编译器翻译成汇编代码,汇编代码通过汇编器翻译成可重定位目标文件,可重定位目标文件再通过链接器进行链接,生成可执行目标文件。

  3)可执行目标文件通过加载器加载到目标板中运行,当运行到探测点时,数据采集器读取目标板上控制总线的控制信号、地址总线的地址信号和数据总线的数据信号,并将原始的测试数据传送到宿主机,宿主机对原始测试数据进行处理生成初级测试数据。

  4)测试数据管理器依照插桩标记等信息,对测试数据进行比较处理,得出最终的测试数据,如覆盖率信息、控制流信息、数据流信息以及效率特性等性能信息。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号