专利名称:一种嵌入式软件自动化测试的装置及其方法
技术领域:
本发明涉及计算机软件测试领域,尤其涉及一种嵌入式软件自动化测试的装置及其方法。
背景技术:
TCL(Tool Command Language,工具命令语言)于1980年被发明,是一种解释执行的脚本语言(Scripting Language),现已成为一个流行的描述语言;它拥有一个固有的核心命令集,支持类C的流程控制if控制、循环控制和switch控制等,支持过程的定义和调用,并且提供了强大的数组和字符串处理功能。TCL因其易用性、可扩展性,功能全面以及开发速度快的特性已经成为工业界自动测试最常用的语言之一。
GDB代理模块,GDB调试器的一个代理模块,本发明中依靠它对GDB调试器进行控制。
Tornado是WindRiver公司嵌入式实时操作系统VxWorks的集成开发环境,它给嵌入式系统开发人员提供了许多实用的开发和调试工具。如图1所示,图1为Tornado提供的嵌入式软件开发环境框图。
GDB调试器,一种GNU的基于源码级的调试器,它的源码是公开的,支持C、C++、JAVA、PASCAL等语言。Tornado的Debugger使用了GDB调试器的内核。GDB调试器的功能非常强大,但对于测试来说,最有用的功能为查看变量(命令名称为print,简写p)、给变量赋值(命令名称为set)以及格式化内存,举例说明
假定被测代码中有如下变量
char gCharG[]=″abcde″;int gIntG[4]={1,2,3,4};typedef struct{int m_int1;int m_int2;char m_char1;char m_char2;char*m_pChar;}TYPE1;TYPE1 gType1;
查看变量
(gdb)p gType1.m_int2
$1=0
(gdb)p gCharG
$2=″abcde″
给变量赋值
(gdb)set var gType1.m_int2=100
格式化内存
(gdb)set({TYPE1}0x 0x421ea8).m_int2=1000
现有的问题
通过TCL脚本解释器可完成嵌入式软件的测试,其原理图参考如图2所示,图2是通过TCL解释器进行嵌入式软件测试原理图。测试人员通过编写测试代码封装测试命令注册在通信服务器端,然后在客户端使用相应的命令和脚本进行自动化的软件测试。
此方案的缺点为
(1)测试人员需要编写测试代码,测试代码的正确性得不到保障,从而影响测试的正确性。
(2)测试人员增加测试用例就需要在被测代码中新增测试代码,从而导致代码需要重新编译连接,而嵌入式软件的编译连接和加载一般需要很长的时间,这样测试效率就大大下降。
(3)测试人员对一些复杂数据类型的变量的访问依然困难。
发明内容
有鉴于上述问题,本发明的目的就是为了解决如下的技术问题
(1)测试人员在嵌入式软件测试中不需要在被测系统中加测试代码,就可以进行测试。
(2)支持对复杂数据类型的变量访问。
(3)支持对入口参数为复杂数据类型的函数的调用。
本方案的前提是被测软件在编译时包含debug信息,否则本方案不能全部解决上述问题。
为实现上述目的,本发明采用如下技术方案
一种嵌入式软件自动化测试的装置,适用于在编译时包含debug信息的被测软件,包括提供对TCL脚本语言进行解释的TCL内核解释器及与被测系统连接并提供被测系统信息的目标机服务器模块,其特征在于还包括GDB代理模块和GDB调试器模块;
所述TCL内核解释器通过GDB代理模块与GDB调试器模块进行通信;
所述GDB调试器模块通过管道通信与目标机服务器模块进行通信。
所述的GDB代理模块包括GDB的TCL扩展接口模块、用户界面模块和消息命令处理模块;
所述GDB的TCL扩展接口模块接收并传递由TCL内核解释器传送来的命令并输入给消息处理模块,并将消息命令处理模块反馈的结果传递给TCL内核解释器;
所述用户界面模块传递用户输入的命令给消息处理模块,并将消息处理模块反馈的信息传递给用户界面模块;
所述消息命令处理模块对消息命令进行接收、返回和处理。
所述的消息命令处理模块进一步包括
启动GDB调试器模块,发送启动命令给GDB调试器模块;
所述的执行文件加载模块通过管道连接GDB调试器模块,完成对目标机服务器模块的被测软件加载;
所述的命令执行模块,通过管道连接GDB调试器模块,依据命令发送到不同的GDB调试器;
所述的命令结果分析模块,接收由GDB输出管道守候线程发送回来的命令执行结果。
一种嵌入式软件自动化测试的方法,适用于在编译时包含debug信息的被测软件,其特征在于包括以下步骤
a、启动目标机服务器模块,连接驻留在被测系统中的代理模块;
b、通过GDB代理模块中的命令启动GDB(The GNU Source-1evelDebugger)调试器去连接目标机服务器模块;
c、用户向被测软件发送的测试命令,GDB代理模块通过不同的管道发送到不同的GDB调试器;
d、GDB调试器将命令执行结果返回GDB代理模块并分析结果是否完整,如果不完整继续等待执行结果,如果完整,则返回用户。
所述的嵌入式软件自动化测试的方法,用户以TCL脚本语言编写输入GDB调试器命令。
所述的嵌入式软件自动化测试的方法,步骤b中的GDB代理模块是在TCL内核解释器中依靠管道通信控制GDB调试器的代理接口。
所述的嵌入式软件自动化测试的方法,步骤b进一步包括
GDB代理模块将GDB调试器的标准输入输出重定向固定管道中,同时启动两个管道守候线程接收GDB调试器的输出。
所述的嵌入式软件自动化测试的方法,GDB代理模块接收输入命令的过程进一步可分为
当输入的命令是TCL内核解释器中的命令,为GDB调试器命令时,该命令通过TCL扩展接口进入GDB代理模块;
当输入的命令为用户输入时,命令通过用户界面进入GDB代理模块。
利用此技术方案进行嵌入式软件的单元和集成测试,有以下好处
1、测试人员不需要在被测系统中加测试代码,就可以进行测试,非常方便。
2、测试功能强大,可以直接执行函数,查询变量和给变量赋值。
3、使用方法简单,测试人员容易上手。
本发明经过在MGW产品的单元和集成测试中实验使用,效果良好。
图1是Tomado提供的嵌入式软件开发环境框图2是通过TCL解释器进行嵌入式软件测试原理图3是本发明结合TCL和Tornado进行嵌入式软件测试的原理框图4是本发明中GDB代理模块基本原理框图。
具体实施例方式
下面结合说明书附图来说明本发明的具体实施方式
。
本发明技术方案的总体框图如图3所示,图3是结合TCL和GDB调试器进行嵌入式软件测试的原理框图。在图3中,灰框部分是本发明技术方案密切相关的部分。
一种嵌入式软件自动化测试的装置,适用于在编译时包含debug信息的被测软件,包括提供对TCL脚本语言进行解释的TCL内核解释器及与被测系统连接并提供被测系统信息的目标机服务器(Target Server)模块,所述装置还包括GDB代理模块、驻留在本地主机的GDB调试器模块;所述TCL内核解释器通过GDB代理模块与GDB调试器模块进行通信;所述GDB调试器模块通过管道通信与目标机服务器模块进行通信。
请参考图4,所述的GDB代理模块包括GDB的TCL扩展接口模块、用户界面模块和消息命令处理模块;所述GDB代理模块接收并传递由TCL内核解释器传送来的命令并输入给消息处理模块,并将消息命令处理模块反馈的结果传递给TCL内核解释器;所述用户界面模块传递用户输入的命令给消息处理模块,并将消息处理模块反馈的信息传递给用户界面模块;所述消息命令处理模块对消息命令进行接收、返回和处理。
所述的消息命令处理模块进一步包括启动GDB调试器模块,发送启动命令给GDB调试器模块;所述的执行文件加载模块通过管道连接GDB调试器模块,完成对Target Server模块的被测软件加载;所述的命令执行模块,通过管道连接GDB调试器模块,依据命令发送到不同的GDB调试器;所述的命令结果分析模块,接收由GDB输出管道守候线程发送回来的命令执行结果。
本发明提供的嵌入式软件自动化测试的方法,适用于在编译时包含debug信息的被测软件,包括以下步骤
a、启动目标机服务器(Target Server)模块,连接驻留在被测系统中的代理模块;
b、通过GDB代理模块中的命令启动GDB(The GNU Source-level Debugger)调试器去连接目标机服务器模块;
c、用户向被测软件发送的测试命令,GDB代理通过不同的管道发送到GDB调试器;
d、GDB调试器将命令执行结果返回GDB代理模块并分析结果是否完整,如果不完整继续等待执行结果,如果完整,则返回用户。
在执行上述方法过程中,用户是以TCL脚本语言编写输入GDB调试器命令的;步骤b中的GDB代理模块是在TCL内核解释器中依靠管道通信控制GDB调试器的代理接口,且步骤b进一步包括GDB代理模块将GDB调试器的标准输入输出重定向固定管道中,同时启动两个管道守候线程接收GDB调试器的输出。
所述GDB代理模块接收输入命令的过程进一步可分为当输入的命令是TCL内核解释器中的命令,为GDB调试器命令命令时,该命令通过TCL扩展接口与GDB代理模块交互;当输入的命令为用户输入时,命令通过用户界面与GDB代理模块交互。
可见,本发明中在TCL内核解释器中增加了控制GDB调试器的代理接口,这样通过TCL脚本集中控制GDB调试器,从而可以使用GDB调试器查看变量,给变量赋值,值得一提的是,因为GDB调试器可以将一段内存强制转化为某种数据类型的变量,这样即使被测代码中函数的入口参数比较复杂,本发明也有办法解决,解决方式如下
(1)利用GDB调试器调用分配内存的函数(如malloc)得到内存;
(2)利用GDB调试器命令将此段内存格式化为需要的数据类型变量;
(3)使用GDB调试器调用被测函数,入口参数就是上面已经被格式化的内存块首地址;
(4)最后得到函数的执行结果。
模块说明
(1)TCL内核解释器使用网上成熟源码,其功能与标准TCL一致。
(2)GDB代理接口,其软件框图如图4所示,图4是GDB调试器代理模块的基本原理框图。由图4可知,GDB调试器代理主要是依靠管道通信向GDB发起命令请求,同时依靠管道得到命令的响应信息。
(3)GDB调试器为Tornado软件提供的支持各种CPU类型的GDB调试器,本发明可直接使用。
(4)目标机服务器由Tomado软件提供,主要是负责响应GDB调试器的命令请求,提供被测系统的信息。
(5)代理模块为驻留在被测系统的代理程序,由Tornado软件提供。
下面详细介绍一下整个方案的流程
(1)启动目标机服务器去连接被测系统的代理模块,注意代理模块驻留在被测系统中。
(2)通过命令启动GDB调试器去连接目标机服务器,注意因为GDB调试器都是可执行的win32 console程序,GDB代理模块在启动它的过程中,将它们的标准输入输出复位向固定管道中,同时启动两个管道守候线程接收GDB调试器的输出。
(3)通过命令向目标机服务器加载被测软件,如果被测系统中已经有了被测软件,此过程可以省略。
(4)此时,用户可以向被测软件发送测试命令,GDB代理接收到测试命令后,通过管道将命令发送GDB调试器,GDB调试器收到命令后,并执行,然后将结果返回,被GDB代理模块的管道守候线程获得,GDB代理模块分析结果是否完整,如果不完整继续等待执行结果,如果完整,则返回给用户。
(5)如果用户编写了TCL脚本来输入GDB调试器命令,就可以进行嵌入式软件的自动化测试。
下面举一具体实施例说明本发明
typedef struct TYPE1{int m_int;char m_char;char*m_charPtr;char m_charList[5];}TYPE1;TYPE1 gType1;int FuncTest5(TYPE 1*pTypel){int ret=pType 1->m_int;retum ret;<!-- SIPO <DP n="8"> --><dp n="d8"/>}
测试脚本如下
set addr[tshell vxsim″shParse malloc 11″]
tgdb vxsim″set(\{TYPE1\$addr}.m_int=123456″
set result[tgdb vxsim″shParse FuncTest5 $addr″]
puts″$result″
tgdb vxsim″shParse free $addr″
执行结果
123456
注意,这里的tgdb就是注册在TCL内核中控制GDB调试器的命令;vxsim为目标机服务器的名称。
本发明的有益效果在于利用此方案进行嵌入式软件的单元和集成测试,
可以产生以下好处
1、测试人员不需要在被测系统中加测试代码,就可以进行测试,非常方便。
2、测试功能强大,可以直接执行函数,查询变量和给变量赋值。
3、使用方法简单,测试人员容易上手。
权利要求
1、一种嵌入式软件自动化测试的装置,适用于在编译时包含debug信息的被测软件,包括提供对TCL脚本语言进行解释的TCL内核解释器及与被测系统连接并提供被测系统信息的目标机服务器(Target Server)模块,其特征在于还包括GDB代理模块、驻留在本地主机的GDB调试器模块;
所述TCL内核解释器通过GDB代理模块与GDB调试器模块进行通信;
所述GDB调试器模块通过管道通信与目标机服务器模块进行通信。
2、根据权利要求1所述的嵌入式软件自动化测试的装置,其特征在于所述的GDB代理模块包括GDB的TCL扩展接口模块、用户界面模块和消息命令处理模块;
所述GDB代理模块接收并传递由TCL内核解释器传送来的命令并输入给消息处理模块,并将消息命令处理模块反馈的结果传递给TCL内核解释器;
所述用户界面模块传递用户输入的命令给消息处理模块,并将消息处理模块反馈的信息传递给用户界面模块;
所述消息命令处理模块对消息命令进行接收、返回和处理。
3、根据权利要求2所述的嵌入式软件自动化测试的装置,其特征在于所述的消息命令处理模块进一步包括
启动GDB调试器模块,发送启动命令给GDB调试器模块;
所述的执行文件加载模块通过管道连接GDB调试器模块,完成对TargetServer模块的被测软件加载;
所述的命令执行模块,通过管道连接GDB调试器模块,依据命令发送到不同的GDB调试器;
所述的命令结果分析模块,接收由GDB输出管道守候线程发送回来的命令执行结果。
4、一种嵌入式软件自动化测试的方法,适用于在编译时包含debug信息的被测软件,其特征在于包括以下步骤
a、启动目标机服务器(Target Server)模块,连接驻留在被测系统中的代理模块;
b、通过GDB代理模块中的命令启动GDB(The GNU Source-level Debugger)调试器去连接目标机服务器模块;
c、用户向被测软件发送的测试命令,GDB代理通过不同的管道发送到GDB调试器;
d、GDB调试器将命令执行结果返回GDB代理模块并分析结果是否完整,如果不完整继续等待执行结果,如果完整,则返回用户。
5、根据权利要求4所述的嵌入式软件自动化测试的方法,其特征在于用户以TCL脚本语言编写输入GDB调试器命令。
6、根据权利要求4所述的嵌入式软件自动化测试的方法,其特征在于步骤b中的GDB代理模块是在TCL内核解释器中依靠管道通信控制GDB调试器的代理接口。
7、根据权利要求4所述的嵌入式软件自动化测试的方法,其特征在于步骤b进一步包括
GDB代理模块将GDB调试器的标准输入输出重定向固定管道中,同时启动两个管道守候线程接收GDB调试器的输出。
8、根据权利要求4所述的嵌入式软件自动化测试的方法,其特征在于GDB代理模块接收输入命令的过程进一步可分为
当输入的命令是TCL内核解释器中的命令,为GDB调试器命令命令时,该命令通过TCL扩展接口与GDB代理模块交互;
当输入的命令为用户输入时,命令通过用户界面与GDB代理模块交互。
全文摘要
本发明涉及计算机软件测试领域,一种嵌入式软件自动化测试的装置及其方法。本发明的目的是利用TCL扩展控制GDB调试器进行嵌入式软件的自动化测试。主要步骤如下a.启动被测系统,并使用目标机服务器连接被测系统中的代理模块;b.启动GDB调试器连接目标机服务器;c.GDB代理模块接收用户向被测软件发送的测试命令,通过管道发送到GDB调试器;e.GDB调试器将命令执行结果返回,GDB代理模块分析结果返回用户。
文档编号G06F11/36GK1737775SQ20041006430
公开日2006年2月22日 申请日期2004年8月18日 优先权日2004年8月18日
发明者金雪锋 申请人:华为技术有限公司