嵌入式软件测试的目的是保证软件满足需求规格说明,与非嵌入式软件的测试目的是一样的。系统失效是系统没有满足—个或多个正式需求规范中所要求的需求项,嵌入式软件有其特殊的失效判定准则。那如何做好嵌入式软件开发测试呢?
嵌入式软件对可靠性的要求比较高。安全性的缺陷往往会导致灾难性的后果,即使是非安全性系统,由于大批量生产也会导致严重的经济损失。这就要求对嵌入式系统,包括嵌入式软件、嵌入式硬件进行严测试、确认和验证。
1、软件测试阶段
软件测试有7个基本阶段,即单元或模块测试、集成测试、外部功能测试、回归测试、系统测试、验收测试、安装测试。嵌入式软件测试在4个阶段上进行,即模块测试、集成测试、系统测试、硬件/软件集成测试。前3个阶段适用于任何软件的测试,硬件/软件集成测试阶段是嵌入式软件所特有的,目的是验证嵌入式软件与其所控制的硬件设备能否正确地交互。
2、嵌入式软件测试环境
嵌入式软件测试的测试环境主要有两种:
1)目标环境测试:基于目标的测试测试全面有效,但是消耗较多的经费和时间。
2)宿主环境测试:基于宿主的测试代价较小,但是有些对环境要求高的功能和性能宿主机无法模拟,测试无法实现。
目前的趋势是把更多的测试转移到宿主环境中进行,把宿主环境测试无法实现的复杂和独特功能放在目标环境测试。我们的工作重点是基于宿主环境的测试,基于目标环境的测试作为补充。
在两个环境中可以出现不同的软件缺陷,重要的是目标环境和宿主环境的测试内容有所选择。在宿主环境中,可以进行逻辑或界面的测试、以及与硬件无关的测试。在模拟或宿主环境中的测试消耗时间通常相对较少,用调试工具可以更快地完成调试和测试任务。而与定时问题有关的白盒测试、中断测试、硬件接口测试只能在目标环境中进行。在软件测试周期中,基于目标的测试是在较晚的“硬件/软件集成测试”阶段开始的,如果不更早地在模拟环境中进行白盒测试,而是等到“硬件/软件集成测试”阶段进行全部的白盒测试,将耗费更多的财力和人力。
3、白盒测试与黑盒测试
白盒测试或基本代码的测试主要任务为检查程序的内部设计,或者在开发环境中进行硬件仿真,一般不必在目标硬件上进行。根据源代码的组织结构查找软件缺陷,要求测试人员对软件的结构和功能有详细深入的了解。白盒测试与代码覆盖率密切相关,可以在测试中计算出代码的覆盖率,保证测试的充分性。嵌入式软件测试通常要求有较高的代码覆盖率,要选择最重要的代码进行白盒测试。
黑盒测试在某些情况下也称为功能测试。这类测试方法根据软件的用途和外部特征查找软件缺陷,不需要了解程序的内部结构。黑盒测试不依赖代码,从实际使用的角度进行测试。黑盒测试与需求紧密相关,需求规格说明的质量会直接影响测试的结果。在进行嵌入式软件黑盒测试时,要把系统的预期用途作为重要依据,根据需求中对负载、定时、性能的要求,判断软件是否满足这些需求规范。
4、嵌入式测试内容
嵌入式软件测试的内容主要为:软件代码测试、编程规范标准符合性测试、代码编码规范符合性测试、开发维护文档规范符合性测试、用户文档测试。
其中软件测试服务范围包括:系统级测试、应用测试、中间件测试、BSP及驱动程序测试、嵌入式硬件设计测试。
其中,按照嵌入式软件有无操作系统将嵌入式系统分为两大类:无操作系统的嵌入式软件、有操作系统的嵌入式软件。
4.1 无操作系统的嵌入式软件
无操作系统的嵌入式软件主要包括C语言代码、汇编语言代码、Apa代码等。
C语言模式软件测试:硬件设备及其他宏定义(编译阶段处理)、API函数测试、模块初始化(包括系统初始化)、中间功能件测试、功能模块测试、中断处理测试、任务调度测试、区域功能测试、总体功能测试。
汇编语言模式软件测试:硬件设备及其他宏定义(编译阶段处理)、模块初始化(包括系统初始化)、中间功能件测试、功能模块测试、中断处理测试、区域功能测试、总体功能测试。
4.2 基于操作系统的嵌入式软件
基于操作系统的嵌入式软件主要包括应用软件测试、系统软件测试、整体性能测试。
应用软件测试:模块初始化(包括系统初始化)、中间功能件测试、功能模块测试、区域功能测试、总体功能测试。
系统软件测试:硬件设备及其他宏定义(编译阶段处理)、API函数测试、模块初始化(包括系统初始化)、中间功能件测试、功能模块测试、中断处理测试、区域功能测试、总体功能测试、标准符合性测试。
整体性能测试:基于操作系统之上的嵌入式系统整体软件测试,主要采用应用软件测试,着重分析性能、内存分配、代码覆盖率、软件执行流程,并采用仿真器、逻辑分析仪的硬件测试工具进行整体性能的测试。
5、嵌入式软件的测试工具
用于辅助嵌入式软件测试的工具很多,下面对几类比较有用的有关嵌入式软件的测试工具加以介绍和分析。
5.1 内存分析工具
在嵌入式系统中,内存约束通常是有限的。内存分析工具用来处理在动态内存分配中存在的缺陷。当动态内存被错误地分配后,通常难以再现,可能导致的失效难以追踪,使用内存分析工具可以避免这类缺陷进入功能测试阶段。目前有两类内存分析工具——软件和硬件的。基于软件的内存分析工具可能会对代码的性能造成很大影响,从而严重影响实时操作;基于硬件的内存分析工具价格昂贵,而且只能在工具所限定的运行环境中使用。
5.2 性能分析工具
在嵌入式系统中,程序的性能通常是非常重要的。经常会有这样的要求,在特定时间内处理一个中断,或生成具有特定定时要求的一帧。开发人面临的问题是决定应该对哪一部分代码进行优化来改进性能,常常会花大量的时间去优化那些对性能没有任何影响的代码。性能分析工具会提供有关的数据,说明执行时间是如何消耗的,是什么时候消耗的,以及每个例程所用的时间。根据这些数据,确定哪些例程消耗部分执行时间,从而可以决定如何优化软件,获得更好的时间性能。对于大多数应用来说,大部分执行时间用在相对少量的代码上,费时的代码估计占所有软件总量的5%-20%。性能分析工具不仅能指出哪些例程花费时间,而且与调试工具联合使用可以引导开发人员查看需要优化的特定函数,性能分析工具还可以引导开发人员发现在系统调用中存在的错误以及程序结构上的缺陷。
5.3 GUI测试工具
很多嵌入式应用带有某种形式的图形用户界面进行交互,有些系统性能测试足根掘用户输入响应时间进行的。GUI测试工具可以作为脚本工具有开发环境中运行测试用例,其功能包括对操作的记录和回放、抓取屏幕显示供以后分析和比较、设置和管理测试过程。很多嵌入式设备没有GUI,但常常可以对嵌入式设备进行插装来运行GUI测试脚本,虽然这种方式可能要求对被测代码进行更改,但是节省了功能测试和回归测试的时间。
5.4 覆盖分析工具
在进行白盒测试时,可以使用代码覆盖分析工具追踪哪些代码被执行过。分析过程可以通过插装来完成,插装可以是在测试环境中嵌入硬件,也可以是在可执行代码中加入软件,也可以是二者相结合。测试人员对结果数据加以总结,确定哪些代码被执行过,哪些代码被巡漏了。覆盖分析工具一般会提供有关功能覆盖、分支覆盖、条件覆盖的信息。对于嵌入式软件来说,代码覆盖分析工具可能侵入代码的执行,影响实时代码的运行过程。基于硬件的代码覆盖分析工具的侵入程度要小一些,但是价格一般比较昂贵,而且限制被测代码的数量。
6、国内外的嵌入式测试服务
嵌入式软件测试要提供嵌入式软件及硬件的端到端测试服务,横跨工具/设备、实时操作系统(RTOS)、开发平台和编程语言。服务内容包括嵌入式软件和硬件的测试策略和代码级测试,以及覆盖分析,功能测试,压力测试,代码审查,调试和代码维护。测试服务覆盖从设备驱动,中间件/协议和系统及应用水平测试。主要解决如通信、汽车电子行业、消费电子及多媒体、工业自动化、网络、存储、计算机硬件和外设的嵌入式系统测试。
6.1 国外嵌入式软件测试服务
国外的嵌入式软件测试服务有:黑盒测试、功能测试、单元测试、回归测试、配置测试、压力测试、UI测试、安装测试、模块化测试、集成测试、手动黑盒测试、负载测试、验收测试。
提供给用户的测试结果主要为:测试规划、测试用例、验收测试用例、用户手册、缺陷报告、改进建议等。
6.2 国内嵌入式软件测试服务
国内的嵌入式软件测试服务还处于起步阶段,并且主要限于嵌入式应用软件、工业控制软件,测试的主要内容包括:
1)功能测试
依据ISO/IEC 9126-1 质量模型,验证系统是否满足明确和隐含要求功能。功能测试覆盖实用性、准确性、互操作性、互用性、保密安全性、功能依从性。
2)可靠性测试
依据ISO/IEC 9126-1 质量模型,测试在指定条件使用时,软件产品维持规定的性能级别的能力。可靠性测试覆盖成熟性、容错性、易恢复性等质量特性。
3)性能测试
依据ISO/IEC 9126-2 质量模型,检测在规定条件下,软件产品执行其功能时,提供适当的响应和处理时间以及吞吐量的能力以及使用合适的数量和类型的资源的能力。
4)安全性测试
依据ISO/IEC 9126-3 质量模型,测试在指定条件使用时,软件产品维持规定的性能级别的能力。可靠性测试覆盖成熟性、容错性、易恢复性等质量特性。
5)易用性测试
依据ISO/IEC 9126-4 质量模型,测试在指定条件使用时,软件产品被理解、学习、使用和吸引用户的能力。测试覆盖易理解性、易学性、易操作性、吸引性。
6)可移植性测试
依据ISO/IEC 9126-5 质量模型,测试软件产品从一种环境迁移到另外一种环境的能力,测试覆盖适应性7、嵌入式培训课程
嵌入式软件测试的培训在国内还没有相成规模,绝大部分是在软件测试中穿插几个课时进行嵌入式软件测试的简单培训,并且主要集中于以下几个方面:
1)嵌入式领域软件工程与软件质量的保证:嵌入式软件危机与软件缺陷,软件质量的过程与控制,嵌入式软件的特点,嵌入式软件的开发过程。
2)嵌入式软件测试技术:掌握白盒测试、黑盒测试、灰盒测试,测试覆盖率、回归测试等重要概念,掌握单测试、集成测试、系统测试等测试过程,测试的误区和经验。
3)嵌入式测试过程与测试管理:了解测试过程及测试管理的主要内容,掌握测试需求确立、测试计划和测试大纲制定、测试用例设计、测试用例执行、测试结果收集和测试结果分析,以及测试错误反馈和测试报告生成等工作。掌握测试过程辅助支持工具的使用。
4)结合目前主流应用,了解嵌入式测试工具支持及操作和使用,搭建嵌入式软件的测试平台,掌握嵌入式测试的思想和方法:软件工程与质量保证支撑系统(Panorama++)、测试自动化工具(Vectorcast)、硬件辅助的实时在线白盒测试工具(Codetest)、黑盒测试工具(GESTE)、基于全数字仿真的嵌入式软件综合测试工具(CRESTS/ATAT,与CRESTS/TESS)、嵌入式软件仿真工具Eurosim。
5)通过经典嵌入式测试安全分析,学会设计嵌入式软件测试的解决方案。
鉴于嵌入式测试的特殊要求,嵌入式测试课程应侧重以下几个主要内容:
1)嵌入式系统概要:主要包括嵌入式发展、特点、行业涵盖、新技术趋势等;
2)嵌入式硬件平台:主要包括ARM、DSP、FPGA、CPLD、单片机、SSI、I2C、I2S、EPI、μDMA、UART、IrDA、USB、Ethernet、MCI、SD、CAN、PWM、QEI、GPIO、JTAG等;
3)嵌入式编程语言和环境概要:主要包括C、C++、Ada、汇编、Java、KEIL、IAR Embedded Workbench、Sourcery G++、Code Red Technoloigy、CCstudio IDE等;
4)嵌入式测试的内容:主要包括设计方案测试、嵌入式软件代码测试、专项要求测试、嵌入式软件标准、嵌入式软件测试标准、嵌入式文档规范评测等;
5)嵌入式测试工具使用:主要包括CodeTest、VectorCAST、CRESTS/ATAT、LOGISCOPE、Logic Analyzer、Oscilloscope等;
6)嵌入式测试过程管理与报告生成:主要包括测试规划、人员管理、测试用例、验收测试用例、用户手册、缺陷报告、改进建议等。
其中,嵌入式测试的内容、工具使用、过程管理与报告生成是嵌入式软件测试培训课程的重点。
8、结论
嵌入式系统复杂多样的特点,决定了嵌入式测试是一项任务艰巨过程复杂的过程,对软件测试人员的要求也比较高。嵌入式软件测试的完善也遵从由易入难和同步推进相互结合、引进吸收与自力更生相互结合的原则。要侧重于嵌入式领域主流的嵌入式软硬件平台,着眼于社会中嵌入式应用广泛的移动通信、汽车电子、消费电子领域,着力于加快主要嵌入式软件测试工具的建设使用,立足于软件测试环境的建立和相关嵌入式测试项目的调研与推进,从无到有、从小到大、从少到多、从弱到强逐步建立起科学完善的嵌入式评测体系。