首页> 中国专利> 一种基于设备的软件测试自动化系统及其方法

一种基于设备的软件测试自动化系统及其方法

摘要

本发明公开了一种基于设备的软件测试自动化系统及其方法,涉及软件测试自动化技术。为解决现有技术中软件在PC机上测试正常后,在现场设备上仍不能正常运行的问题而发明。本发明一种基于设备的软件测试自动化系统,包括:软件版本分析存储单元、后台自动测试单元和前台测试代理单元。本发明一种基于设备的软件测试自动化方法:软件版本分析存储单元分析软件版本获取版本信息文件;后台自动测试单元读取版本信息文件,设置测试用例并对该测试用例进行拆分,把测试信息发送到前台测试代理单元进行测试。采用本发明所述的基于设备的软件测试自动化系统和方法,能够直接在设备上进行一体化的软件自动化测试,提高了测试效率和软件版本的可靠性。

著录项

  • 公开/公告号CN101145127A

    专利类型发明专利

  • 公开/公告日2008-03-19

    原文格式PDF

  • 申请/专利权人 中兴通讯股份有限公司;

    申请/专利号CN200610152049.4

  • 发明设计人 王新余;

    申请日2006-09-12

  • 分类号G06F11/36(20060101);

  • 代理机构11274 北京中博世达专利商标代理有限公司;

  • 代理人申健

  • 地址 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦6层法律部

  • 入库时间 2023-12-17 19:54:11

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-04-22

    专利权的转移 IPC(主分类):G06F11/36 变更前: 变更后: 登记生效日:20150401 申请日:20060912

    专利申请权、专利权的转移

  • 2009-09-02

    授权

    授权

  • 2008-05-14

    实质审查的生效

    实质审查的生效

  • 2008-03-19

    公开

    公开

说明书

技术领域

本发明涉及基于设备的软件测试领域,尤其基于设备的软件测试自动化系统及其方法。

背景技术

软件测试自动化已经获得广泛应用,软件自动测试可以大大减少测试的开销,可以在机器空闲时执行夜间测试,增加在有限时间内的测试。自动测试是可以重复的,在相同的序列中使用完全相同的输入再进行测试。

设备上运行的软件,由于其特殊性,要求软件具有更高的可靠性,如电信设备,要求系统中断时间在20年内累计不能超过1小时。而且在设备上运行的软件,进行软件升级不方便。这就要求在设备上运行的软件在版本推出之前,需要进行更全面,更细致的测试,包括软件中每个分支,每行代码都必须经过运行,模拟各种情况,实现常规测试和边缘测试,函数的入参需要穷举。

随着根据客户的需求,软件的功能会不断增加,软件的规模越来越大,并随着时间的推移,软件各模块间的耦合性越来越强。这种情况下,软件版本的修改越来越难,往往修改这边功能实现了,却导致那边出问题,往往机房版本测试正常,拿到现场版本却不能用。一个版本推出之前,我们需要增强对版本的回归性测试来提高版本质量。如何更好地做好回归性测试,自动化测试是一个很好的选择,把原先设计的测试用例在新版本上重新回放一下,自动判断测试结果,省时省力。

现在的单元测试方法需要把要测试的目标函数从系统中单独拿出来,经过对一些调用函数修改后,在PC机上编译运行测试。这种测试方法存在一个很大的弊端,这样操作导致目标函数的运行环境不一样,如地址对齐和高低字节序等,且目标函数内调用其它函数也是经过修改,目标函数在单元测试时的运行结果有可能和真实系统中的结果不一样,在单元测试中测试正常了在真实系统中也可能不正常。目前,利用软件技术直接在设备上进行软件测试自动化的方法还很少。

发明内容

为解决上述缺陷与不足,本发明的目的是提供一种基于设备的软件测试自动化系统及其方法,实现在设备上进行一体化的软件自动化测试,提高测试效率和软件版本的可靠性。

为达到上述发明目的,本发明一种基于设备的软件测试自动化系统,包括:后台自动测试单元以及与其分别相连的软件版本分析存储单元和前台测试代理单元;

所述软件版本分析存储单元用于对被自动化测试的软件版本进行分析,并将分析结果保存为版本信息文件;

所述后台自动测试单元用于读取软件版本分析存储单元中的版本信息文件,新建或提取已保存的测试用例,对该测试用例进行拆分,并把拆分结果和运行命令发送到前台测试代理单元;

所述前台测试代理单元用于根据收到的拆分结果和运行命令进行处理。

优选地,所述软件版本分析存储单元与后台自动测试单元设置在后台,所述前台测试代理单元设置在前台。

优选地,所述软件版本分析存储单元包括软件版本分析模块和与其相连的版本信息存储模块;其中

所述软件版本分析模块用于根据软件版本的绑定顺序,从源文件生成的目标文件中获取函数信息和全局变量信息,同时分析计算出各函数和全局变量的地址;

所述版本信息存储模块用于将获取的函数信息和全局变量信息及通过分析计算得到的地址保存为版本信息文件。

优选地,所述后台自动测试单元包括与版本信息存储模块相连的后台设置模块,以及与该后台设置模块相连的后台执行模块;其中

所述后台设置模块用于根据读取的版本信息存储模块所存储的版本信息文件,新建测试用例并保存为文本格式,或读取已保存的测试用例,并把测试用例提交给后台执行模块;

所述后台执行模块用于对测试用例中文本格式的信息进行分析得到二进制信息、把测试用例与当前版本结合生成函数测试代码,并将该二进制信息以及该函数测试代码和运行命令分别发送到前台测试代理单元。

优选地,所述前台测试代理单元包括内存管理模块和运行测试模块,其中

所述内存管理模块用于根据后台执行模块发送的二进制信息申请内存并在测试运行完成后释放申请的内存;

所述运行测试模块用于根据后台执行模块发送的运行命令运行函数测试代码进行测试。

优选地,所述后台执行模块中还包括后台结果信息获取子模块,用于根据后台执行模块分析得到的二进制信息来分别获取前观察项和前台测试代理单元运行测试得到的后观察项。

优选地,所述后台自动测试单元还包括与所述后台执行模块和所述前台测试代理单元分别相连的结果处理显示模块;

所述结果处理显示模块用于接收后台结果信息获取子模块发送的前观察项和后观察项,根据设置规则对该前观察项和后观察项进行判断,保存判断结果并予以显示。

优选地,所述结果处理显示模块包括与所述后台执行模块和所述前台测试代理单元分别相连的结果处理模块,以及与该结果处理模块相连的结果显示模块;  其中

所述结果处理模块,用于接收后台结果信息获取子模块发送的前观察项和后观察项,根据设置的规则对该前观察项和后观察项进行判断,保存判断结果并把该结果发送到结果显示模块;

所述结果显示模块用于将结果处理模块的判断结果进行显示。

一种基于设备的软件测试自动化的方法,包括以下步骤:

(1)后台的软件版本分析存储单元对要自动化测试的软件版本进行分析,并将分析结果保存为版本信息文件;

(2)后台的后台自动测试单元读取版本信息文件,新建或提取已保存的测试用例,对该测试用例进行拆分,并把拆分结果发送到前台的前台测试代理单元;

(3)前台的前台测试代理单元根据收到的拆分结果进行相应处理后,并将处理完成信息返回给后台自动测试单元;

(4)后台的后台自动测试单元生成函数测试代码,并将该函数测试代码和运行命令发送到前台测试代理单元进行测试。

优选地,所述步骤(1)具体为:

(11)软件版本分析存储单元中的软件版本分析模块,根据软件版本的绑定顺序,从源文件生成的目标文件中读出函数信息和全局变量信息,同时计算出各函数和全局变量的地址;

(12)软件版本分析存储单元中的版本信息存储模块,把软件版本分析模块对被自动化测试的软件版本分析后所获得的信息进行保存。

优选地,所述步骤(2)具体为:

(21)后台自动测试单元中的后台设置模块,从软件版本分析存储单元中的版本信息存储模块读取版本信息文件;

(22)后台自动测试单元中的后台设置模块,根据读取的版本信息文件,新建测试用例,或者修改已保存的测试用例,将测试用例保存为文本格式并提交给后台自动测试单元中的后台执行模块;

(23)后台自动测试单元中的后台执行模块,将测试用例中文本格式的信息转换生成二进制信息,发送到前台测试代理单元。

优选地,所述步骤(22)中新建测试用例的方法为:

(221)从版本信息文件的函数列表中选择测试目标函数;

(222)后台设置模块对该测试目标函数进行设置,形成新的测试用例;其中,后台设置模块对该测试目标函数的设置至少包括对其覆盖率的设置。

优选地,所述步骤(22)中修改已保存的测试用例的方法为:

后台设置模块从已保存的测试用例中取出测试目标函数,与版本信息文件中的函数列表进行比较,验证该测试目标函数是否有效,如果有效,则后台设置模块对该测试目标函数进行设置,形成新的测试用例;如果无效,步骤结束;其中,后台设置模块对该测试目标函数的设置至少包括对其覆盖率的设置。

优选地,所述后台设置模块对测试目标函数的设置还包括:初始化设置、前观察项设置、桩函数设置、入参设置、后观察项设置、判断规则设置。这样,能够对函数入参自动穷举,可实现测试用例的自动设计,并且能够保存设计结果作为测试用例或者读出已保存的测试用例来进行测试。

优选地,所述步骤(23)具体为:

(231)后台执行模块将测试用例中文本格式的信息转换生成二进制信息;

(232)后台执行模块根据所述二进制信息对前台的全局数据进行初始化,获取前观察项;

(233)后台执行模块把所述二进制信息中的申请堆栈空间、申请覆盖率空间和申请运行空间的命令发送到前台测试代理单元的内存管理模块。

优选地,所述步骤(3)具体为:

(31)前台测试代理单元的内存管理模块,根据后台自动测试单元中的后台执行模块发送的二进制信息中申请堆栈空间、申请覆盖率空间和申请运行空间的命令,申请内存块,把内存的地址返回给后台自动测试单元中的后台执行模块。

优选地,所述步骤(4)具体为:

(41)后台自动测试单元中的后台执行模块,在前台测试代理单元申请到的堆栈空间上,根据所述二进制信息初始化函数入参;

(42)后台自动测试单元中的后台执行模块,把对测试目标函数的代码进行覆盖率设置和桩函数设置后,形成函数测试代码发送到申请到的运行空间上;

(43)后台自动测试单元中的后台执行模块为自己设置定时器;

(44)后台自动测试单元中的后台执行模块,把运行命令发送到前台测试代理单元的运行测试模块;

(45)前台测试代理单元的运行测试模块,用该运行命令中指定的堆栈地址,设置堆栈的寄存器,根据该运行命令中指定的代码地址运行函数测试代码。

这样,测试时不需要把被测试的目标函数从系统中拿出来,可实现基于函数的单元测试、基于进程的集成测试、以及基于版本的回归性测试。

优选地,所述步骤(4)后还包括步骤:

(5)前台测试代理单元运行测试结束后,通知后台自动测试单元;

(6)后台自动测试单元收到运行结束通知后,从前台测试代理单元中获取测试得到的后观察项,并把该后观察项与后台自动测试单元对测试用例拆分后获得的前观察项,提交给结果处理显示模块;

(7)结果处理显示模块接收后台自动测试单元提交的前观察项和后观察项,用设置规则进行判断,保存判断结果并予以显示。

优选地,所述步骤(6)具体为:

(61)后台自动测试单元的后台信息获取子模块,根据后台执行模块对测试用例分析得到的二进制信息,从前台测试代理单元中获取后观察项;

(62)后台信息获取子模块把该后观察项,与后台执行模块根据对测试用例分析得到的二进制信息获得的前观察项,提交给结果处理显示模块。

优选地,所述步骤(7)具体为:

(71)结果处理显示模块中的结果处理模块,接收后台执行模块中的后台结果信息获取子模块发送的前观察项和后观察项;

(72)结果处理显示模块中的结果处理模块,用判断函数运行正常与否的判断规则,对接收的该前观察项和后观察项进行判断;

(73)结果处理显示模块中的结果处理模块,将判断结果保存为用文本格式,并把该判断结果送结果处理显示模块中的结果显示模块;

(74)结果处理显示模块中的结果显示模块将该结果予以显示。

这样,能够自动判断测试结果是否正常,测试结果能够保存,并且保存的测试结果能够读出显示。

采用上述方法后,与现有技术相比,由于本发明通过软件版本分析存储单元分析软件版本获取版本信息文件;后台自动测试单元读取版本信息文件,设置测试用例并对该测试用例进行拆分,把测试信息发送到前台测试代理单元进行测试,并对测试结果进行处理和显示,使基于设备的软件测试自动化系统和方法能够直接在设备上进行一体化的软件自动化测试,提高了测试效率和软件版本的可靠性。

附图说明

图1是本发明的测试系统模块架构图;

图2是本发明的测试用例设置过程;

图3是本发明的后台执行模块处理过程;

图4是本发明的结果处理模块处理过程;

图5是本发明的前台测试代理单元处理过程。

具体实施方式

本发明一种基于设备的软件测试自动化系统包括以下模块:

A、软件版本分析模块;

B、版本信息存储模块;

C、后台设置模块;

D、后台执行模块;

E、结果处理模块;

F、结果显示模块;

G、前台测试代理单元;

上述前台指的是设备,后台是指能与前台通信的PC机。

进行自动化测试时,各模块功能如下:

软件版本分析模块对待进行自动化测试的软件版本进行分析,分析的目的是从软件版本计算出各个函数的详细信息,包括内存起始地址,函数长度,入参信息,和各全局数据的详细信息,把这些信息保存成版本信息文件。

后台自动测试单元读取版本信息文件,通过后台设置模块生成要进行自动化测试的测试用例,也可直接打开以前保存的测试用例,把测试用例提交给后台执行模块,后台执行模块分析测试用例,通过前台测试代理单元申请内存,为测试准备运行空间和堆栈空间,在堆栈空间中根据测试用例中的设置预先初置入参值,然后后台执行模块把测试指令发送给前台测试代理单元,

前台测试代理单元在指定的运行空间和堆栈空间上运行指定的目标函数。函数运行结束后,前台测试代理单元通知后台执行模块。后台执行模块获取全局数据和从堆栈空间中获取临时变量的值,提交给结果处理模块,

结果处理模块把这些值与测试用例中的设置条件进行比较,是否一致,判断出测试运行是否正确,提交给结果显示模块。

本发明一种基于设备的软件测试自动化方法包括以下步骤:

第一步:运行软件版本分析模块对软件版本进行分析,生成版本信息文件;

第二步:后台自动测试模块打开版本信息文件;

第三步:后台设置模块生成和打开测试用例;

第四步:后台执行模块把测试用例进行拆分,结合版本信息,把测试信息发给前台测试代理单元;

第五步:前台测试代理单元根据测试信息运行测试;

第六步:测试结束后,前台测试代理单元通知后台执行模块;

第七步:后台执行模块从前台内存中取出变量值,把值提交给结果处理模块;

第八步:结果处理模块保存测试结果,把这些值与测试用例中的设置条件进行比较,是否一致,判断出测试运行是否正确;

第九步:结果显示模块显示测试结果。

下面结合附图对技术方案的实施作进一步的详细描述:

图1列出了本发明的测试系统模块架构图。

软件版本分析模块101是把版本中的所有函数信息,包括函数名,函数类型,函数的入参,函数中的临时变量,函数的起始地址和所有的全局变量,包括变量名,变量类型,变量的内存地址等信息搜集保存。

它根据软件版本的绑定顺序,从源文件生成的目标文件中读出函数信息和全局变量信息,同时计算出各函数和全局变量的地址,把信息保存到版本信息存储模块中供后台自动测试模块读取。该模块是版本测试自动化的基石。

版本信息存储模块102中保存着软件版本分析模块所获得的版本信息文件。

后台自动测试模块在后台,通过前后台通信接口与前台交互。读取版本信息存储模块所保存的版本信息文件,能够让测试人员选取测试目标函数,根据函数信息,设置各入参值的范围域,同时设置函数运行结果观察项,包括函数返回值,全局变量,局部变量,内存块等。需要注意的是能够保存设置信息作为测试用例,并能够从读取保存的测试用例进行测试是后台自动测试模块必须实行的功能。

按照图1的系统框图,后台自动测试模块共有4个模块组成:

后台设置模块103读取版本信息,允许测试人员新创建测试用例并保存,或把原先的测试用例读出来继续测试。对于原先的测试用例,在新版本中可能有修改,如函数的入参个数或入参的类型或原先设置的观察项已经不存在了,要提醒测试人员进行修改。该模块的输入是版本信息存储模块保存的版本信息或原先保存的测试用例,输出是新的测试用例(详见图2说明)。

后台执行模块104根据设置模块的结果,把测试命令发到前台测试代理单元(详见图3说明);在后台执行模块104中还包括一个后台结果信息获取子模块(图中未示出),从前台测试代理单元获取测试观察项并提交给结果处理模块。

结果处理模块105根据后台结果信息获取子模块提交的测试观察项,判断测试是否正常,并根据设置保存到测试结果文件中。

结果显示模块106显示当前从前台返回的结果,或显示以前运行保存在文件中的结果,对于结果中的各个字段可以临时指定其它显示类型。

前台测试代理单元107从后台自动测试软件接收测试命令,根据测试命令中的信息,调用相应的目标函数108。待目标函数108运行结束后,后台结果信息获取子模块获取各观察项。如果目标函数108中导致调用没有返回到原调用点,为防止这种情况,后台执行模块设置有定时器,目标函数正常返回,后台执行模块清除定时器,目标函数没有正常返回,默认为目标函数执行完成。

由于要调用的目标函数入参个数不同及返回值差别,所占用的堆栈空间不一样,需要测试代理模块把入参压入堆栈,再根据目标函数的类型不同采取不同的调用方式,段内调用还是长调用。

前台测试代理单元中含有内存管理模块和测试运行模块(图中未示出)。内存管理模块根据后台执行模块发送的命令申请、释放或修改内存;测试运行模块根据后台执行模块发送的运行命令,运行目标函数代码。

图2列出了测试用例设置过程。

测试用例设置包括新创建测试用例和修改已保存的测试用例。测试用例设置分11步。201)软件版本分析模块读取版本信息,取出所有的函数信息,包括函数名,函数类型(长调用还是短调用),函数地址,函数长度,函数入参名,函数入参数据类型,函数返回数据类型,函数内临时变量信息(临时变量名,临时变量数据类型,临时变量在堆栈中偏移)和所有全局数据信息,包括全局数据名,全局数据类型,全局数据内存地址;

202)新创建测试用例时,在函数列表中,选择要测试目标函数;

203)对函数运行前进行一些初始化设置,给函数运行做准备;

204)设置前观察项,先获取函数运行前的变量,主要是全局数据,可用于后面函数运行判断规则;

207)设置覆盖率,在单元测试中使用,设置需要进行覆盖率统计的代码范围;

208)设置桩函数,在单元测试中使用,可以给其中调用的函数设置一个指定返回值;

209)对目标函数的入参进行设置,对入参值的设置可以是一个范围,这样实现对函数的入参进行穷举,增大测试的全面性;

210)设置后观察项,设置在函数运行完毕后,要获取的变量,与前观察项不同,后观察项可以是全局数据,局部变量,函数返回值;

211)设置判断规则,这步操作设置判断函数的运行是否正常的判断规则。

设置完成后,就可以进行保存为测试用例,供后续使用。

以上9步,除201),202),207)是必须的,其它步骤是可以根据需要省略的。

修改测试用例时,包括步骤:205)读取测试用例,从测试用例取出测试目标函数;206)在版本信息的函数列表中进行比较,判断目标函数是否有效,主要是判断目标函数是否存在,入参是否匹配,各观察项是否存在,后续的设置同新创建测试用例。

测试用例保存用文本格式,类似配置文件,可以直接用文本编辑器进行修改。测试用例保存格式举例如下(具体实现时可以采用其它方式):

版本中定义了两个内存管理的函数,获取内存函数GetUB和释放内存函数RetUB,char*GetUB(unsigned short size);

void RetUB(char*token);

[测试用例名称]

BRIEF=                         /*在测试用例名称还不能完全表达的情况下,用该项简单说明该

                                测试用例的用途,所要测试的功能。这部分在新创建用例时由

                                测试人员直接填写*/

RUNMODE=IN_TURN              /*运行模式*/

RUNCOUNT=1                   /*运行次数*/

FUNC0=GetUB                  /*函数0名称*/

FUNC0_TIMEOUT=5              /*函数0单次运行最大时长*/

FUNC0_INIT0()=

FUNC0_PARA0(size)=100~200,300     /*函数0入参size值域*/

FUNC0_OBSV0=#RESULT          /*函数0观察项0*/

FUNC0_OBSV1=                 /*函数0观察项1*/

FUNC0_RULE=#FUNC0 OBSV0 !=0         /*函数0运行情况判断规则*/

FUNC1=RetUB

FUNC1_TIMEOUT=5             /*函数1单次运行最大时长*/

FUNC1_PARA0(token)=#FUNC0 OBSV0       /*函数1入参token值域*/

FUNC1_OBSV0=                    /*函数1观察项0*/

FUNC1_OBSV1=                   /*函数1观察项1*/

FUNC1_RULE=                    /*函数1运行情况判断规则*/

测试用例的运行模式(RUN_MODE),对于一个测试用例中包含多个测试函数的情况,考虑到各个函数的入参有值域范围,有两种运行模式:IN_TURN,各函数轮流运行一次;OUT_TURN,一个函数把入参的各种值都运行过后,再运行下一个函数。

函数的观察项,于有时需要在一个函数执行后,观察其它全局变量、函数调用过的局部变量或某内存块才能判断该函数是否运行正常。函数的观察项有4种类型:1)#RESULT,观察函数返回值;2)#内存段:内存偏移,长度,观察内存块;3)函数名,变量名,观察局部变量;4)其它为观察全局变量

函数的入参,函数入参值域范围用‘~’表示。如果需要用其它函数的观察项作为输入值,格式为#FUNC?_OBSV?。

函数运行正常与否的判断规则(FUN?_RULE),设置是输入函数的观察项的判断式,例中函数GetUB的判断规则为其返回值不为空,#FUNC0_OBSV0!=0。

图3列出了后台执行模块处理过程。包括以下步骤:

301:后台执行模块处在接收测试命令状态中。

302:接收到命令后,对命令进行拆分,拆分就是把测试用例中文本格式的信息转换成二进制信息,分步发送到前台测试代理单元,对前台的全局数据进行初始化,获取函数运行前的数据值(前观察项),申请堆栈空间,在申请到的堆栈空间上,初始化函数入参,申请覆盖率空间,用于存放代码覆盖率统计值,申请运行空间,对目标函数的代码进行覆盖率设置和桩函数设置后,形成函数测试代码发送到申请到的运行空间上。

303:设置定时,防止测试函数运行异常,没有返回结果。

304:发送运行命令到测试代理模块,等待返回结果。

305:前台测试代理单元调用目标函数运行完毕后,前台测试代理单元返回运行结束消息。

306:后台结果信息获取子模块获取后观察项。

307:释放前台申请的内存空间。

308:把前观察项和后观察项送结果处理模块。

然后判断测试是否已经结束,选取下一组入参进行测试。

图4列出了结果处理过程。包括以下步骤:

401:判断测试函数运行是否正常,把后台结果信息获取子模块送过来的数据用设置规则进行判断。

402:保存运行结果。

403:把结果送结果显示模块。

测试结果保存也用文本格式,方便直接查看,内容同测试用例。

图5列出了前台测试代理单元的处理过程。

前台测试代理单元是典型的客户服务器模式中的服务器端,它接收后台发送的命令,执行,返回结果。包括以下4种命令。

1)申请内存命令501,根据命令中指定的长度,申请内存块502,把内存的地址返回给后台503。

2)释放内存命令504,根据命令中指定的内存地址,释放该内存505。

3)修改内存命令506,用命令中指定值修改指定内存地址指向的内存507,返回修改完毕508。

4)运行测试命令509,用命令中指定的堆栈地址,设置堆栈的寄存器,运行命令中指定的代码地址510,返回运行结束511。

上述对本发明的较佳实施的描述中,具体的数字和程序代码仅为示例说明,并不能因此限定本发明的专利保护范围,在不违背本发明精神所做的改进都应涵盖于本发明权利要求书的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号