当前位置:文档之家› 实时嵌入式系统平台自动测试工具

实时嵌入式系统平台自动测试工具

收稿日期:2003-10-16 基金项目:国家863计划项目(2002AA1Z2306) 作者简介:王陈(1973-),男,助理研究员,硕士,主要研究方向:嵌入式操作系统、测试工具和技术; 左雪梅(1968-),女,高级工程师,主要研究方向:嵌入式操作系统、测试工具和技术、数据通讯; 黄烨明(1974-),女,高级工程师,硕士,主要研究方向:嵌入式操作系统、第三代移动通讯.文章编号:1001-9081(2003)12Z -0339-02实时嵌入式系统平台自动测试工具王 陈,左雪梅,黄烨明(中兴通讯股份有限公司成都研究所,四川成都610041)摘 要:介绍实时嵌入式系统平台的结构,在此基础上介绍一种嵌入式平台自动测试工具的设计原理及具体组成。

该工具的使用能提高测试人员的效率,保证嵌入式平台的质量。

关键词:嵌入式系统;自动测试工具;实时;消息中图分类号:TP316 文献标识码:A1 引言随着嵌入式技术的发展,嵌入式系统复杂性不断提高,对嵌入式的测试技术的要求也越来越高,为了提高测试的效率和质量,对嵌入式自动测试工具的研究变得十分紧迫。

本课题研究的自动测试工具是针对面向通讯领域的嵌入式操作系统平台的,但其研究结果适用于嵌入式系统应用程序的自动测试。

嵌入式操作系统平台是通讯系统设备软件支撑环境。

其本质就是封装操作系统本身,使得应用程序与嵌入式操作系统无关,并提供消息驱动机制。

测试工具是建立在该平台之上的,利用其消息驱动机制对该平台进行功能性、业务性的测试,专注于测试该平台是否满足功能需求,而没有特别关心诸如代码覆盖率等这些泛泛目标。

1.1 嵌入式操作系统平台介绍如图1所示,嵌入式操作系统平台包括操作系统的适配:Linux 、VxWorks 、PSOS 等的适配。

操作系统适配位于平台支撑和操作系统之间,实现对底层操作系统的屏蔽,对嵌入式软件平台及上层应用提供统一的系统调用。

平台支撑部分提供了通讯设备分布式系统必须的基础功能,如内存管理、定时管理、调度管理、进程通信、系统监控、异常处理。

支撑部分组成了消息驱动机制。

图1 嵌入式软件平台系统结构图本平台主要为通信系统级设备提供稳定的操作系统支撑功能,屏蔽底层操作系统和硬件,向上为各处理机上的应用程序提供了一个统一的运行平台,其设计满足下列特性:1)高可靠性,能满足电信网长时间稳定运行的要求;2)实时性,能满足电信信令、协议、业务应用、多处理机间数据同步的时间要求;3)自愈性,尽可能检测、处理和记录整个系统异常;4)可维护性,能对核心资源和系统服务的使用和调用状况进行必要的跟踪和记录;5)简单性,仅向应用程序提供必要的系统服务,屏蔽非必要的系统服务;6)封装性,能完全屏蔽硬件特性,使应用层与硬件无关;彻底封装第三方的实时操作系统(VxWorks ,嵌入式Linux )的核心资源和系统服务,为各处理机的应用程序提供一个统一的和可移植的软件平台;7)可移植性,能够方便地在商业实时操作系统间进行移植;8)可扩充性,能增加、删除不同的模块和功能,具有很强的设计弹性和对不同产品的适应能力。

1.2 设计原理图2 自动测试工具总体结构嵌入式系统测试的一般步骤是在主机上编写测试用例代码,然后把该代码编译下载到目标机,接着通过调试器执行该测试用例目标代码。

在嵌入式环境下测试一项系统功能耗费的时间和人力是惊人的。

根据我们对过去多个项目的软件过程能力分析发现,测试执行所花费的时间占整个测试活动的50%左右,而编译下载这种繁琐低效的工作占了测试执行40%左右的时间。

为了解决工作效率问题,我们需要一种工具,可以一次编译,然后根据命令多次执行。

通过分析我们把嵌入式测试工具分成了三个部分,主机的脚本命令模式、主机和目标机的通讯以及目标机的代理测试执行。

基本结构如图2所示,测试人员只需要利用测试工具通过脚本发送相应的命令,命令解析部分负责把命令组成相应的消息;消息通过通讯部分发送到目标测试代理上;测试代理根据解析出的消息第23卷2003年12月计算机应用Computer ApplicationsVol.23Dec.,2003内容,进行相应的测试动作,测试结果回传到主机。

通过这种机制就可以对嵌入式操作系统平台进行自动测试,从而达到提高测试效率的目的。

2 命令解析和结果显示命令解析部分包括脚本语言、命令执行、命令翻译以及附属的显示命令执行。

该部分是测试工具的核心,在实际设计中采用了面向对象技术。

具体功能是把命令翻译为测试相应的消息,然后发送到被测试的嵌入式系统中去。

结果显示包括被测试的嵌入式系统的打印输出重定向到主机功能以及对打印输出进行结果比较。

2.1 脚本语言采用脚本语言后其测试的可复用性和可重复性得到了很大的提高,并且因为结构清晰使得维护起来非常方便。

正因为测试的脚本化能非常好地满足很多方面的测试需要,因此,在很多的商业测试软件,如Rational,Telelogic的产品,都不同程度地借助测试脚本来辅助和简化测试过程。

目前,在软件测试中应用较为广泛的商业化测试脚本语言有Perl,Tcl/tk, VBScript等等。

但作为商用化应用的脚本解释器,无法获得源码级的支持,并被绑定在某个测试工具上,缺乏灵活性。

因此根据测试工具的实际需要,我们设计了相应的脚本语言,脚本语言包括控制命令和消息命令两大部分。

控制命令对测试执行的流程进行控制,如整数变量、循环(for)、条件判断(if…else)、暂停(pause)、中止(stop)、脚本执行开始段(begin)、脚本执行中止段(end)等。

而消息命令由一个主要的命令组成,就是msg命令,msg命令后面有五个参数,分别是被测试对象的进程号、发向被测试对象的消息号、被测试的消息内容、消息内容参数1和消息内容参数2。

这五个参数就可以决定目标嵌入式系统执行何种测试。

在设计脚本语言时我们考虑到嵌入式系统平台有大量的消息号宏定义,这些消息号的宏定义都是在嵌入式系统平台代码的消息号定义头文件里,因此我们的脚本语言不但支持自定义的命令,而且扩展为能支持C语言的头文件的部分功能,如include、宏定义define以及C语言的简单表达式。

2.2 命令翻译命令翻译实际上就是一个小型的语言解释器。

涉及到语言解释器就必然要把文件流中的字符通过词法分析、语法分析和语义分析转化成需要的对象。

图3是自动测试工具命令翻译模块类之间的关系。

通过查询类型表管理类,词法分析类把字符流解析成相应的记号(Token),语法分析类再根据定义的语法规则进行相应的解析,解析结果送到执行类,执行类实际上是一个语义分析类。

分析结果转化为相应的流程控制或消息发送。

对于语法分析和词法分析我们采用了非常成熟和成功的Y ACC和L EX编程工具来生成相应的代码,这样做就不需要对该部分代码进行手工编写,从而节省大量的设计和编程工作,并且其代码的可靠性也远远超过了手工编写。

词法分析生成器L EX最早是一个Unix下的实用工具,它将一个词法分析规则转换为C函数的实现。

词法分析器读入字符串,根据词法规则,将一个个的word或字符转换为符合的token。

语法分析器Y ACC能够识别的语法是BNF(Backus Naur Form)范式,用户定义一个BNF类型的语法规则,Y ACC将该规则转换为语法分析器,通过在BNF语法规则中嵌入语法动作,可以建立某种形式的语法树。

L EX的基本原理是采用FSA(Finite State Automation,有限状态自动操作处理)原理,例如:首先,从输入流(默认为stdio)读取输入,如果输入为字符,则进入状态1;如果接着输入为数字或字符,那么停留在状态1,直到非字符或数字出现,进入状态2。

这样就分离出了合适的字符。

从L EX的基本原理我们可以看出,L EX能简单地分析出词法,但L EX不具有堆栈功能,因而不能处理嵌套结构(如括号)。

而Y ACC 是有堆栈的,可以从事复杂的语法分析。

语法分析运用自下而上的方法,利用L EX的词法分析,将匹配的表达式转化后放到堆栈。

实际的编程中我们采用了一种在Windows下的Y ACC&L EX软件,该软件可以直接生成C++语言的代码。

图3 命令翻译类的交互方式2.3 命令执行和结果显示命令执行实际上是根据语法树来确定程序的执行方向以及消息的发送。

程序的执行方向包括循环执行某些命令、判断真假后执行相应的命令段等。

在测试工具设计中我们采用维护一个执行方向栈来实现执行方向。

消息发送相对比较简单,主要是把消息的命令参数组成消息,通过主机-目标机的通讯接口发送到目标机。

结果显示是把目标机发送过来的打印信息显示在Windows窗口上。

测试人员对测试的预期被写入一个事先保存好的文件里,结果显示模块接受到打印信息就根据命令来比较该文件,如果发现与该文件有不符合的地方就弹出警告对话框,提醒测试人员该处可能有问题,需要测试人员来检查。

3 主机—目标机通讯目标机与主机间采用套接字UDP方式通信。

目标机和主机是通过以太网卡进行调试的,而我们是在局域网的方式下进行测试的,所以采用UDP方式的链接基本上能保证测试的通讯任务。

具体利用S ocket编程。

主要设计思路如下:在目标机上主要有两个进程,分别是守护进程和消息派发进行。

守护进程负责守护UDP的S ocket套接字是否有来自主机的UDP包;如果有UDP包就进行分析处理后拆分成消息,然后将消息转发给消息派发进程处理。

消息派发进程负责处理消息,发送相应的指令,运行相应的目标代理进程。

目标机的打印信息都是通过消息派发进程将其通过自己创建的一个S ocket套接字转发到主机。

这样的设计就避免了在目标进程里直接向网口发送消息。

因为直接从网口发消息会产生I/O阻塞,会影响测试用例的正常执行,特别是程序运行的时间性能可能会出现较大差异,使得平台的性能测试效果很差。

(下转第353页) 043 计算机应用2003年4 Java 程序中出现乱码的解决方案前面我们已经讨论了各环节的编码转换问题,就中文处理来说就存在G B K 、Unicode 、U TF 28、ISO 2885921等编码转换,稍有差错就容易造成错误。

那有没有简化的处理办法呢?答案是肯定的。

我们知道G B K 主要用于表示简体中文字符,BIG 5用于表示繁体中文字符,ISO 2885921用于表示英文字符,一旦超出该编码的表示范围,就会出现错误。

比如繁体汉字的BIG 5编码在简体汉字G B K 编码中就表示一个意义完全不同的字符,这就是我们在更换平台后(即编码字符集发生变化)需要进行编码转换的原因。

如果有一个字符集能表示所有的字符,我们就无需进行编码转换了。

Unicode 是微软开发的字符集,可以同时表示所有的字符,也就是说采用Unicode 编码的文件可以同时存储中文、日文、俄文等。

相关主题