嵌入式系统测试探讨
【摘要】嵌入式应用系统日趋复杂,由于竞争要求,产品快速上市,开发技术日新月异。随着软硬件发展,怎样有效、科学的测试嵌入式系统,受到大家重视。如何从测试过程中提取经验,结合测试特点,研究出实时有效的嵌入式系统测试方法,是本文的意义所在。
【关键词】嵌入式;测试
一、嵌入式系统和测试简介
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。
嵌入式系统包括硬件和软件两部分。硬件包括处理器/微处理器、存储器及外设器件和I/O端口、图形控制器等。软件部分包括操作系统软件(要求实时和多任务操作)和应用程序编程。应用程序控制着系统的运作和行为;而操作系统控制着应用程序编程与硬件的交互作用。
嵌入式计算机系统同通用型计算机系统相比具有以下特点:
1、嵌入式系统通常是面向特定应用的嵌入式CPU与通用型的最大不同就是嵌入式CPU大多工作在为特定用户群设计的系统中,它通常都具有低功耗、体积小、集成度高等特点,能够把通用CPU中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化,移动能力大大增强,跟网络的耦合也越来越紧密。
嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能,这样才能在具体应用中对处理器的选择更具有竞争力。嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。
2、嵌入式软件的开发和测试也就与一般商用软件的开发和测试策略有了很大的不同,可以说嵌入式软件是最难测试的一种软件。嵌入式系统测试与非嵌入式软件是相同的,都是为了查找软件潜在的缺陷。但在嵌入式系统设计中,软件正越来越多地取代硬件,以降低系统的成本,获得更大的灵活性,这就需要使用更好的测试方法和工具进行嵌入式和实时软件的测试。嵌入式软件测试使用有效的测试策略是唯一的出路,它可以使开发的效率最大化,避免目标系统的瓶颈,使用在线仿真器节省昂贵的目标资源。开发环境与最终运行环境通常都是存在差异的,嵌入式系统更是如此。开发环境被认为是主机平台,软件运行环境为目标平台。嵌入式系统的测试种类有:模块测试、集成测试、系统测试、硬件/软件集成测试、验收和确认测试。
二、嵌入式测试基本方法探讨
那么如何进行有效而科学的测试呢?一个基本而行之有效的测试方法是:
1、开发前的原型设计
原型设计在开放流程中是非常需要的。比如说一个计算器版面的设计,可以定义好版面上面的按键以及每个按键功能。然后画出状态转化图,写清楚每个按键何时可以触发,触发后由哪个状态转入别的状态。原型设计好了,组织专家,工程师进行评审,找出原型中不合理需要改进的地方;改进以后,有必要可以进行再一次的评审工作。每一次评审工作需要记录评审建议是否需要解决?如何解决以及实际解决情况。
2、设计和开发
设计和开发工作需要设立里程碑。每个里程碑结束前都需要进行评审工作。由于嵌入式软件的运行环境不同,受到很大的限制,所以在进行开发之前需要进行编程规范工作,编码的时候需要严格按照编码要求进行工作,每一个条款都需要认真执行和审查。现在业界提供许多关于嵌入式软件开发的标准,大家可以通过网站搜索,最好能够购买业界一些比较著名的标准。目前市场上也提供许多关于代码检验的工具。为什么一直提出代码编码规范?这是因为嵌入式软件的质量与代码规范是十分重要的。举个例子,著名的阿里亚火箭失事,专家进行详细的调查工作,最后发现问题出在代码上。代码是符合标准C语言的,但是在运行过程中由于程序员将一个长整形变量赋给了一个短整形变量,造成内存溢出,这是导致火箭失事的关键所在。
3、代码测试
当程序开发完毕,需要进行测试工作,但是在程序烧入或固化芯片之前如何进行测试呢?这里介绍一种方法:比如程序时使用C语言进行开发的,请将所有的操作都封入在函数中,函数的定义都在相应的头文件中定义(。h),然后设计测试用例,书写测试代码,测试代码包含相应头文件,可以对函数进行检测。测试案例往往分为两类:一种是功能测试,主要测试函数的功能;另外一种是错误参数测试,主要检查程序对进行错误参数进行检验。
4、功能测试
这种测试的运行往往需要通过仿真器辅助完成,比如类似录音机软件程序,分别测试播放,加大(减小)音量,停止,暂停(取消暂停),快速前进,快速后退,录音对应的功能是否能够正常运行。
5、错误测试
主要测试函数在调用参数无效的时候,系统是否会按照规定返回正确的错误代码。比如func test(int T)。
测试的时候给出一个错误的序列号(T),看程序是否返回正确的错误代码。
对于函数func test1(int t)需要进行特出的处理t定义为1-100我们可以按照边界值法和等价分类法进行测试上边界:-1,0,1,下边界:99,100,101,中边界:50所以测试用例集合为(-1,0,1,50,99,100,101),其中-1,101为错误测试用例,其他为正确测试用例。
6、功能组合测试
在进行完功能测试后,我们可以进行功能组和测试,还是拿录音机程序做个例子。我们可以定义将音量增加到10,快速前进,检查音量,看是否还是为10;播放,暂停,试图调整音量,检查调整音量的功能是否可以被成功执行。
7、烧入固化测试
当以上测试都通过后可以将程序烧入芯片或者固化,最后在实际环境中进行测试工作
三、结论
测试不但要求测试系统的能力,也对整个测试环境提出了更高的要求。软硬件测试结合进行。硬件测试中,首先会面临到传输线的问题,传输线材质的不同,其相对的电容特性及电感特性也不一样。在芯片测试中,包含了测试系统,配套设备如送片机、探头及芯片等几个主要因素。结合软件测试,在测试条件、测试环境、测试方法、测试用例的制定上更需全面考虑。测试系统都必须有完整的计划和方案。