1、浅析嵌入式软件测试【摘要】本文介绍了嵌入式软件系统测试的概念及特点以及测试工具的使用,在此基础上对嵌入式软件测试的策略进行了分析和研究。 【关键词】嵌入式软件;测试;工具;策略 中图分类号:D912.29 文献标识码:A 文章编号: 引言 随着经济的发展和科技的进步,信息技术的发展使人类进入数字时代,而伴随着计算机技术发展起来的嵌入式技术得到了巨大的发展,改变了人们的日常生活。随着嵌入式产品对各方面的要求越来越高。对嵌入式产品的性能有着决定性影响的嵌入式软件的测试咸的尤为重要。目前嵌入式系统已经广泛应用于人类生活中,包括消费电子产品、交通系统、工业过程控制等。 1 嵌入式软件测试的概念 软件测
2、试是从经济、效率的角度出发,对软件代码进行质量、正确性保证的一个过程。从软件工程角度来看,在软件开发的生命周期中,软件测试工作是贯穿软件开发生命周期的重要环节。作为软件质量的控制手段之一,软件测试活动在软件产品开发中具备非常重要的作用。嵌入式软件测试和普通软件测试的目的相同,都是为了尽可能多的发现软件缺陷并保证软件产品的质量。但是由于嵌入式系统的实时可靠性、专用性和硬件依赖、交互性等特点,使得一个系统级的嵌入式软件缺陷,很有可能会导致系统的崩溃,从而造成巨大的损失。因此,嵌入式软件产品对软件的质量要求比普通软件要高很多,这也要求对嵌入式系统及软件必须进行严格的测试、确认和验证。 2 嵌入式软件
3、测试的特点 嵌入式系统的软硬件功能界限模糊,测试比普通的软件测试要困难得多,嵌入式软件测试具有如下特点: (1)实时性:实时约束、实时控制; (2)依赖于特定硬件环境:只有在特定的硬件环境下,嵌入式软件才能运行; (3)测试软件功能依赖不需编码的硬件功能,快速定位软硬件错误困难; (4)交叉测试平台的测试用例、测试结果上载困难; (5)基于消息系统测试的复杂性,包括过程、任务、子系统之间的交互,并发、容错和对时间的要求 (6)性能测试、确定性能瓶颈困难; (7)实施测试自动化技术困难。大量统计资料表明,软件测试的工作量往往占软件开发总工作量的 40%以上,在极端情况,测试那种关系人的生命安全的
4、重要行业中的嵌入式软件所花费的成本,可能相当于软件工程其他开发步骤总成本的三倍到五倍。 3 嵌入式软件测试的分类 嵌入式软件测试与普通软件测试相似,可按照以下几个不同的角度来进行分类: (1)从是否关心软件内部结构的角度分类:白盒测试、黑盒测试、灰盒测试; (2)从程序是否会被执行的角度分类:静态测试、动态测试; (3)从软件测试过程的阶段分类:单元测试、集成测试、系统测试、验收测试和回归测试; (4)从软件是否在目标机上运行分类:脱机环境测试和联机环境测试。4 嵌入式软件的测试工具 由于嵌入式软件测试有其自身的特点和困难,对其进行测试除了要采用一定的测试策略外,还应借助于一定的测试工具,使测
5、试过程更方便地进行。 4.1 性能测试工具 在嵌入式系统中, 性能是其质量的一个非常重要的组成部分。作为解决软件性能问题的重要手段,软件性能测试已经广为人们所熟悉,并受到很高的关注。软件测试人员可以使用性能测试工具来帮助开发人员定位性能问题并决定应该对哪一部分代码进行优化来改进性能。性能测试工具会提供有关的数据,说明执行时间是如何消耗的,是什么时候消耗的,以及每段代码所用的时间.根据这些数据,确定哪些代码消耗部分执行时间,从而可以决定如何优化软件,获得更好的时间性能.对于大多数应用来说,大部分执行时间用在相对少量的代码上,费时的代码估计占所有软件总量的 5% -20%.性能分析工具不仅能指出哪
6、些代码花费时间,而且与调试工具联合使用可以引导开发人员查看需要优化的特定函数,性能分析工具还可以引导开发人员发现在系统调用中存在的错误以及程序结构上的缺陷。 目前市场上的性能测试工具种类很多,可以简单的划分为以下几种:负载压力测试工具、资源监控工具、故障定位工具以及调优工具。 4.2 内存分析工具 在嵌入式系统中,内存约束通常是有限的.内存分析工具用来处理在动态内存分配中存在的缺陷.当动态内存被错误地分配后,通常难以再现,可能导致的失效难以追踪,使用内存分析工具可以避免这类缺陷进入功能测试阶段。目前有两类内存分析工具软件和硬件的.基于软件的内存分析工具可能会对代码的性能造成很大影响,从而严重影
7、响实时操作;基于硬件的内存分析工具价格昂贵,而且只能在工具所限定的运行环境中使用。 4.3 GUI 测试工具 很多嵌入式应用带有某种形式的图形用户界面进行交互,有些系统性能测试是根据用户输入响应时间进行的。GUI 测试工具可以作为脚本工具,在开发环境中运行测试用例,其功能包括对操作的记录和回放、抓取屏幕显示供以后分析和比较、设置和管理测试过程.很多嵌入式设备没有 GUI,但常常可以对嵌入式设备进行插装(所谓插装是在目标操作系统和调试器内分别加入某些功能模块,二者互通信息来进行调试)来运行 GUI 测试脚本,虽然这种方式可能要求对被测代码进行更改,但是节省了功能测试和回归测试的时间。 4.4 覆
8、盖分析工具 在进行白盒测试时,可以使用代码覆盖分析工具追踪哪些代码被执行过。分析过程可以通过插装来完成,插装可以是在测试环境中嵌入硬件,也可以是在可执行代码中加入软件,也可以是二者相结合。测试人员对结果数据加以总结,确定哪些代码被执行过,哪些代码被巡漏了。覆盖分析工具一般会提供有关功能覆盖、分支覆盖、条件覆盖的信息。对于嵌入式软件来说,代码覆盖分析工具可能侵入代码的执行,影响实时代码的运行过程。基于硬件的代码覆盖分析工具的侵入程度要小一些,但是价格一般比较昂贵,而且限制被测代码的数量。 5 嵌入式软件的测试策略 嵌入式软件测试使用有效的测试策略是唯一的出路,它可以使开发的效率最大化,避免目标系
9、统的瓶颈,使用在线仿真节省昂贵的目标资源.自从出现高级语言,开发环境与最终运行环境通常都是存在差异的,嵌入式系统更是如此,开发环境被认为是主机平台,软件运行环境为目标平台.相应的测试为 host-targel 测试或 cross-testing.对于嵌入式软件测试或叫交叉测试(cross-test),在测试的各个阶段有着通用的策略: 5.1 单元测试 单元测试(Unit testing)是完成对最小的软件设计单元的验证工作,只有在该基础之上才能保证后续的测试工作。主要采用白盒测试技术, 用来保证单元的最大覆盖率和发现编码和详细设计中的错误。单元测试一般可以就在宿主环境上运行。嵌入式测试系统一般
10、分为以下几个单元: 预处理和词法语法分析单元、插桩单元,测试信息分析,显示单元以及测试用例单元。一般由开发团队中的测试人员进行。 5.2 集成测试 集成测试( Integration testing)是把经过单元测试的模块按软件的结构组合在一起作为一个系统或一个子系统来综合测试。主要是用来发现程序的架构和体系结构设计方面的错误。虽然白盒测试用来保证大部分的路径覆盖率,但黑盒测试在集成测试中还是挺流行的。集成测试一般是在宿主环境中进行。 5.3 确认测试 确认测试(Validation testing) :是把软件系统作为一个单一的执行实体而进行的需求有效性测试。其目的是验证我们的软件是否满足所
11、有的功能、行为和执行要求,这部分主要是用黑盒测试。 5.4 系统测试 系统测试(System Testing) :将系统的测试软件系统和其他资源(硬件、人机交互信息资源和数据库等) 都综合起来构成完整的计算机应用系统进行测试的。是用来确保整个系统的性能、执行强度、安全性和功能都达到了我们的要求。所以在这个阶段是要和硬件结合, 即和目标板一起进行测试, 在目标环境中进行。 结束语 嵌入式系统复杂多样的特点,决定了嵌入式测试是一项任务艰巨过程复杂的过程,对软件测试人员的要求也比较高。在嵌入式系统设计中,软件正越来越多地取代硬件,以降低系统的成本,获得更大的灵活性,软件的重要性逐渐引起人们的重视,越来越多的人认识到嵌入式系统的测试势在必行。这就需要使用更好的测试工具和策略方法进行嵌入式软件的测试,从而能够对日益复杂的嵌入式软件进行快速有效的测试,提高软件测试效率,开发出用户满意的高质量的软件。 参考文献 1刘利枚,石彪.嵌入式软件测试系统的研究与实现J. 国外电子测量技术. 2009(01) 2奚水清,胡飞.基于模型的嵌入式软件测试J. 微处理机. 2009(01) 3唐铱笛,张义德,刘利枚.嵌入式软件测试系统的设计与实现J. 福建电脑. 2009(07)