一种嵌入式系统中的单元测试方法与装置与流程

文档序号:20204398发布日期:2020-03-27 20:59阅读:220来源:国知局
一种嵌入式系统中的单元测试方法与装置与流程

本发明实施例涉及软件测试技术,具体地,涉及一种嵌入式系统中的单元测试方法。



背景技术:

在嵌入式系统软件开发过程中,基于“积木”方式进行,“积木”对应于软件开发中的组件,组件的高质量将极大提高嵌入式系统的开发效率及可靠性,故对组件进行单元测试尤为重要。

嵌入式系统中,单元测试是白盒测试的一种,实现被测函数内部的逻辑测试,旨在检测程序代码中的错误和漏洞,从源头上保证程序的质量,是对程序每一行代码或代码块进行覆盖测试以判断其正确与否。例如,实现被测函数内部的逻辑测试,需要开发人员编写大量的测试用例,同时需要编写相关的桩函数在测试用例中进行打桩,以模拟被测试函数中调用的接口,为被测试函数返回空,或返回固定的值,以使得被测函数能够正常测试其功能。

测试用例大部分基于.c单文件实施,这耗费开发人员大量精力。测试用例执行成功后,需要对测试用例结果进行分析,但目前无法直观地在程序源码中体现已经被测试过的代码及其逻辑。



技术实现要素:

本发明实施例提供了一种嵌入式系统中的单元测试方法,以优化编程测试用例的过程,提高测试效率。

本发明实施例通过如下技术手段实现,

一种嵌入式系统中的单元测试方法,该方法包括,

获得被测对象测试用例的可扩展标记文件;

通过面向对象的解释型计算机程序,将所述测试用例可扩展标记文件自动化生成基于单文件级源码对应的测试用例源码文件;

通过编程工具,将所述测试用例码源文件自动生成目标测试用例。

较佳地,该方法还包括,通过自动化测试软件工具执行所述目标测试用例,得到测试结果。

较佳地,所述通过编程工具将所述测试用例源码文件自动生成目标测试用例包括,

采用unity工具将所述测试用例源码文件自动生成测试用例,将所述测试用例作为目标测试用例,其中,测试用例源码文件中的桩函数用ruby工具生成。

较佳地,所述通过编程工具将所述测试用例源码文件自动生成目标测试用例进一步包括,

通过面向对象的解释型计算机程序遍历所述测试用例,并进行归一化处理,得到目标测试用例。

较佳地,所述面向对象的解释型计算机程序为python脚本程序,所述自动化测试软件工具为parasoft工具。

较佳地,所述通过自动化测试软件工具执行所述目标测试用例,得到测试结果包括,

基于编译文件,利用parasoft工具所构建的测试环境执行目标测试用例;

当完成目标测试用例执行后,在所述源代码文件反馈至少包括命令行、修改条件、判定范围之一的覆盖情况。

较佳地,所述获得被测对象测试用例的可扩展标记文件包括,为嵌入式源代码中的被测函数用可扩展标记语言编写测试用例,得到测试用例可扩展标记文件,其中,被测函数中需要构造的桩函数,采用ruby工具编写。

较佳地,所述将所述测试用例可扩展标记文件自动化生成基于单文件级源码对应的测试用例源码文件包括,

在脚本程序运行界面下输入所述可扩展标记文件;

当脚本程序读出有可扩展标记文件存在时,则解析输入的可扩展标记文件内容,并解析出可扩展标记文件内容中包括的头文件、和/或静态全局变量、和/或被测函数的部分;

将解析出的头文件、和/或静态全局变量、和/或被测函数分别按照解析出后的测试用例的形成规则进行对应,用以生成该被测函数的测试用例;

将生成的被测函数测试用例按照unity框架文件格式进行配置;

在脚本程序运行环境下,通过unity工具,将配置了unity框架格式的被测函数测试用例生成为该被测函数测试用例源码文件。

较佳地,所述通过面向对象的解释型计算机程序遍历所述测试用例框架,并进行归一化处理,得到目标测试用例包括,

在脚本程序运行下,遍历指定路径下的测试用例,

当遍历的测试用例数量与输入的数量一致时,解析读入的所有文件信息,逐一解析头文件、和/或函数内容信息,

将解析后相同的头文件、相同的函数内容合并,并统一生成一目标测试函数;

将生成的目标测试函数按照unity框架文件格式进行配置,

通过unity工具,将配置了unity框架格式的目标测试函数生成为一个目标测试用例文件。

本发明另一方面提供了一种嵌入式系统中的单元测试装置,该装置包括,

测试用例可扩展标记文件生成模块,获得被测对象测试用例的可扩展标记文件;

测试用例源码文件生成模块,通过面向对象的解释型计算机程序,将所述测试用例可扩展标记文件自动化生成基于单文件级源码对应的测试用例源码文件;

目标测试用例生成模块,通过编程工具将所述测试用例码源文件自动生成目标测试用例。

较佳地,该装置还包括,

执行目标测试用例模块,通过自动化测试软件工具执行所述目标测试用例,得到测试结果。

较佳地,所述目标测试用例生成模块包括,

桩函数生成模块,采用ruby工具为所述测试用例源码文件中的调用接口生成桩函数;

测试用例生成模块,采用unity工具生成测试用例源码文件的测试用例。

较佳地,所述目标测试用例生成模块进一步包括,

归一化处理模块,通过面向对象的解释型计算机程序遍历所述测试用例,并进行归一化处理,得到目标测试用例。

较佳地,所述面向对象的解释型计算机程序为python脚本程序,所述自动化测试软件工具为parasoft工具。

较佳地,所述执行目标测试用例模块包括,

测试环境构建模块,基于编译文件,利用parasoft工具所构建的测试环境执行目标测试用例;

测试结果获取模块,当完成目标测试用例执行后,在所述源代码文件反馈至少包括命令行、修改条件、判定范围之一的覆盖情况。

较佳地,所述将所述测试用例可扩展标记文件自动化生成基于单文件级源码对应的测试用例源码文件包括,

在脚本程序运行界面下输入所述可扩展标记文件;

当脚本程序读出有可扩展标记文件存在时,则解析输入的可扩展标记文件内容,并解析出可扩展标记文件内容中包括的头文件、和/或静态全局变量、和/或被测函数的部分;

将解析出的头文件、和/或静态全局变量、和/或被测函数分别按照解析出后的测试用例的形成规则进行对应,用以生成该被测函数的测试用例;

将生成的被测函数测试用例按照unity框架文件格式进行配置;

在脚本程序运行环境下,通过unity工具,将配置了unity框架格式的被测函数测试用例生成为该被测函数测试用例源码文件。

较佳地,所述通过面向对象的解释型计算机程序遍历所述测试用例框架,并进行归一化处理,得到目标测试用例包括,

在脚本程序运行下,遍历指定路径下的测试用例,

当遍历的测试用例数量与输入的数量一致时,解析读入的所有文件信息,逐一解析头文件、和/或函数内容信息,

将解析后相同的头文件、相同的函数内容合并,并统一生成一目标测试函数;

将生成的目标测试函数按照unity框架文件格式进行配置,

通过unity工具,将配置了unity框架格式的目标测试函数生成为一个目标测试用例文件。

本发明实施例优化了开发人员编写测试用例的过程,使得测试用例的形成过程中,只要关注测试用例的输入条件和预期结果,应用脚本程序自动生成测试用例,提高了测试用例编写效率,减少人为编写失误;利用工具生成测试用例的过程中,采用归一化脚本将测试用例基于单文件级执行,可提升为针对组件级甚至系统级的单元测试。利用parasoft工具与编译文件执行生成的测试用例,实现了源码级测试用例执行结果的展示及统计功能,直观地显示了可以保证测试用例设计质量及执行结果。

附图说明

图1为本发明实施例一的嵌入式系统中的单元测试方法的一种示意图。

图2为xml文件生成单文件测试用例的一种流程示意图。

图3为本发明实施例二的嵌入式系统中的单元测试方法的一种示意图,

图4为归一化所有测试用例的一种流程图。

图5为以图3流程处理中的文件转化为主线的示意图。

图6为组件源码文件中的event为例来展示不同阶段的输出文件示意图

图7为本发明实施例嵌入式系统中的单元测试装置的一种示意图。

具体实施方式

为了使本发明实施例的目的、技术手段和优点更加清楚明白,以下结合附图对本发明做进一步详细说明。

在现有技术中,通常所采用的单元测试方式是通过人工编写大量的测试用例代码对源程序代码进行测试验证,并通过编译生成测试报告,再通过解读测试报告中令人费解的测试数据,最终才能判断出源程序代码中的错误和漏洞。

上述现有技术存在的技术缺陷在于:在编写测试用例的过程中,可能会因为编写者的编码笔误等原因而造成测试错误,故使源程序遗留或多或少的漏洞未能及时发现;并且,测试用例代码量往往都比源程序代码量更庞大,工作量非常大,特别是在源程序代码更改后进行回归测试时,如果需要重新修改测试用例代码甚至要重写,则更是会耗费大量的编码时间。

本发明实施例为被测对象编写测试条件的可扩展标记语言(xml)文件,以面向对象的解释型计算机程序,将xml文件自动生成基于单文件级源码对应的测试用例码源文件;采用编程工具将测试用例码源文件自动生成目标测试用例,利用自动化测试软件工具执行所述基于单文件级源码对应的测试用例后,从而能够在源码中显示已测代码行、及函数逻辑是否被设计的测试用例执行过;如果存在未被执行逻辑或代码行,只需要在xml文件中根据函数逻辑增加/修改测试条件后,再进行自动化测试执行,从而保证单元测试质量。

实施例一:

参见图1所示,图1为本发明实施例一的嵌入式系统中的单元测试方法的一种示意图,在该图中以一组件文件为基础来形成该组件的测试用例为例。例如,事件(event)。

步骤101,根据嵌入式系统的源代码中的函数,为被测函数编写xml文件,以得到测试用例的格式为xml的文件,即,得到测试用例的xml文件,在计算机终端上显示为后缀名为.xml文件。其中,被测函数中需要构建的桩函数,可采用ruby工具来编写,被测函数包括且不限于函数逻辑、条件逻辑等。

例如,如图6所示,组件文件列表中包括了事件(event)、头文件(include)、资源(resource)、任务(task)、时间分片(timeslice)、实时数据库(rtdb)等文件,其中,event、resource、task、timeslice、rtdb文件的后缀名为.c的单文件,以event为例,基于event.c单文件用xml语言编写其配置测试用例,得到测试用例的xml文件。

该步骤中,基于源码函数来编写xml文件,相对于现有技术中在嵌入式系统下用源代码来编写测试用例,由于xml文件具有可扩展性强、标记性强的特点,从而优化了开发人员编写测试用例的过程,采用ruby工具来编写桩函数,提高了编写测试用例的效率。

步骤102,使用运行面向对象的解释型计算机程序,将xml文件自动生成基于单文件级源码对应的测试用例源码文件:

实施方式之一,例如,使用运行python脚本程序,将xml文件自动生成基于单文件级源码对应的测试用例,即,输出.c文件对应测试用例源码_ut.c文件;

该步骤中,通过python脚本程序来自动生成测试用例,能够减少人为编写测试用例代码的失误,提高了测试用例的编写效率。

具体过程参见图2,图2为xml文件生成单文件测试用例的一种流程示意图。

步骤1021,在脚本程序运行界面下输入步骤101所得到的xml文件;当脚本程序读出有xml文件存在时,则执行步骤1022;否则,终止当前脚本程序的运行,退出当前脚本程序的运行,并显示出错信息;

步骤1022,脚本程序解析输入的xml文件内容,并解析出xml文件内容中包括的头文件、静态全局变量、被测函数等的部分;

步骤1023,脚本程序将解析出的头文件、静态全局变量、被测函数等分别按照解析出后的测试用例的形成规则进行对应,用以生成该被测函数的测试用例;

步骤1024,脚本程序将生成的被测函数测试用例按照unity框架文件格式进行配置;

步骤1025,在脚本程序运行环境下,通过unity工具,将配置了unity框架格式的被测函数测试用例生成为该被测函数测试用例源码文件。

将步骤101得到的xml文件中的所有被测函数逐一按照上述步骤1022到~1025处理,从而得到单文件级测试用例码源文件,即测试用例源码_ut.c文件。

步骤103,采用ruby和unity工具将测试用例源码文件自动生成测试用例,其中,测试用例源码文件中的桩函数可用ruby工具生成,用于为测试用例源码文件中的调用接口生成测试用例中的桩函数,由于unity工具本身具有框架设计生成功能,当将测试用例源码文件输入框架时可用于生成基于_ut.c文件的测试用例,即_unity_run.c文件;

该测试用例即可以作为目标测试用例。

步骤104,基于编译文件,利用parasoft工具所构建的测试环境执行目标测试用例,例如,在parasoft工具中选择测试环境构建设置、编译器种类设置以定义编译选项,在项目设置中配置构建命令行、构建工作目录等,以实现对目标测试用例的执行。

当目标测试用例执行完成后,可直接在源码文件中反馈测试的情况,显示源码文件中被执行源码的命令行覆盖情况、修改条件(modifiedcondition)、判定范围(decisioncoverage)的覆盖情况,例如,行覆盖率、改进条件覆盖率、判定范围覆盖率,从而实现源码级测试用例执行结果的展示以及统计功能,并且,直接的反馈显示可以保证测试用例设计的质量和执行结果。

如果存在未被执行逻辑或代码行,只需要在xml文件中根据函数逻辑增加/修改测试条件后,再执行步骤103~104,进行自动化测试执行,从而保证单元测试质量。

实施例二:

参见图3所示,图3为本发明实施例二的嵌入式系统中的单元测试方法的一种示意图,在该图中以一组件文件为基础来形成该组件的测试用例为例。例如,事件(event)。

步骤201,根据嵌入式系统的源代码中的函数,为被测函数编写xml文件,以得到测试用例的格式为xml的文件,即,得到测试用例的xml文件,在计算机终端上显示为后缀名为.xml文件。其中,被测函数中需要构建的桩函数,可采用ruby工具来编写,被测函数包括且不限于函数逻辑、条件逻辑等。

例如,如图6所示,组件文件列表中包括了事件(event)、资源(resource)、任务(task)、时间分片(timeslice)、实时数据库(rtdb)等后缀名为.c的单文件,以event为例,基于event.c单文件用xml语言编写其配置测试用例,得到测试用例的xml文件。

该步骤中,基于源码函数来编写xml文件,相对于现有技术中在嵌入式系统下用源代码来编写测试用例,由于xml文件具有可扩展性强、标记性强的特点,从而优化了开发人员编写测试用例的过程,采用ruby工具来编写桩函数,提高了编写测试用例的效率。

步骤202,运行面向对象的解释型计算机程序,将xml文件自动生成基于单文件级源码对应的测试用例源码文件:

实施方式之一,例如,运行python脚本程序,将xml文件自动生成基于单文件级源码对应的测试用例,即,输出.c文件对应测试用例源码_ut.c文件;

该步骤中,通过python脚本程序来自动生成测试用例,能够减少人为编写测试用例代码的失误,提高了测试用例的编写效率。

参见图2所示,图2为xml文件生成单文件测试用例的一种流程示意图。

步骤1021,在脚本程序运行界面下输入步骤101所得到的xml文件;当脚本程序读出有xml文件存在时,则执行步骤1022;否则,终止当前脚本程序的运行,退出当前脚本程序的运行,并显示出错信息;

步骤1022,脚本程序解析输入的xml文件内容,并解析出xml文件内容中包括的头文件、静态全局变量、被测函数等的部分;

步骤1023,脚本程序将解析出的头文件、静态全局变量、被测函数等分别按照解析出后的测试用例的形成规则进行对应,用以生成该被测函数的测试用例;

步骤1024,脚本程序将生成的被测函数测试用例按照unity框架文件格式进行配置;

步骤1025,在脚本程序运行环境下,通过unity工具,将配置了unity框架格式的被测函数测试用例生成为该被测函数测试用例源码文件。

将步骤201得到的xml文件中的所有被测函数逐一按照上述步骤1022到~1025处理,从而得到单文件级测试用例码源文件,即测试用例源码_ut.c文件。

步骤203,采用unity工具将测试用例源码文件自动生成测试用例,其中,测试用例源码文件中的桩函数可用ruby工具生成,由于unity工具本身具有框架设计生成功能,当将测试用例源码文件输入框架时可用于生成基于_ut.c文件的测试用例,即_unity_run.c文件;

按照上述步骤201~203,同样地,可以将组件文件列表中资源(resource)、任务(task)、时间分片(timeslice)、实时数据库(rtdb)等后缀名为.c的单文件分别生成该组件文件的测试用例。

步骤204,采用python脚本程序遍历所有测试用例,例如,event测试用例、resource测试用例、task测试用例等,将所有测试用例中相同的头文件、主函数等进行归一化,即合并测试用例中相同的头文件、主函数、任务、数据库等,然后自动生成组件级的测试用例,即目标测试用例;具体步骤参见图4所示,图4为归一化所有测试用例的一种流程图。

步骤2041,在脚本程序运行下,遍历指定路径下的测试用例,即,遍历unity_run.c文件,当遍历的测试用例数量与输入的数量一致时,则执行步骤2042,否则,终止当前脚本程序的运行,退出当前脚本程序的运行,并显示出错信息;

步骤2042,脚本程序解析读入的所有文件信息,逐一解析头文件、函数内容等信息,

步骤2043,脚本程序将解析后相同的头文件、相同的函数内容合并,并统一生成一目标测试函数;

步骤2044,脚本程序将生成的目标测试函数按照unity框架文件格式进行配置,

步骤2045,在脚本程序运行环境下,通过unity工具,将配置了unity框架格式的目标测试函数生成为一个目标测试用例文件,即main.c文件。

在该步骤中,进行归一化的处理一方面有利于精简目标测试用例的程序长度,另一方面有利于提取出目标用例中公共的部分,由此可将单文件级执行的所有目标测试用例通过归一化处理提升为针对组件级、甚至是系统级的单元测试。例如,采用该测试方案对嵌入式的框架设计进行组件级解耦,同时也提高组件代码质量。类似地,也可以基于一个测试用例来进行归一化处理,通过上述步骤2041~2045,来精简目标测是用例程序的长度。

步骤205,基于编译文件,利用parasoft工具所构建的测试环境执行目标测试用例,例如,在parasoft工具中选择测试环境构建设置、编译器种类设置以定义编译选项,在项目设置中配置构建命令行、构建工作目录等,以实现对目标测试用例的执行。

当目标测试用例执行完成后,可直接在源码文件中反馈测试的情况,显示源码文件中被执行源码的命令行覆盖情况、修改条件(modifiedcondition)、判定范围(decisioncoverage)的覆盖情况,例如,行覆盖率、改进条件覆盖率、判定范围覆盖率,从而实现源码级测试用例执行结果的展示以及统计功能,并且,直接的反馈显示可以保证测试用例设计的质量和执行结果。

如果存在未被执行逻辑或代码行,只需要在xml文件中根据函数逻辑增加/修改测试条件后,再执行步骤203~205,进行自动化测试执行,从而保证单元测试质量。

为便于对上述流程的理解,结合图5所示进一步说明本发明实施例的单元测试方法。参见图5所示,图5为以图3流程处理中的文件转化为主线的示意图。根据嵌入式源代码,用xml语言为被测试函数编写测试用例,得到测试用例可扩展标记文件,用python脚本程序将测试用例可扩展标记文件自动化生成基于单文件级源码对应的测试用例,得到测试用例源码文件;用unity工具将测试用例源码文件自动生成测试用例;用python脚本程序对测试用例进行归一化处理,得到目标测试用例;用parasoft工具根据编译文件构建测试环境,运行所述目标测试用例。当目标测试用例执行完成后,可直接在源码文件中反馈测试的情况。上述测试用例文件基于单文件级。

参见图6所示,图6是组件源码文件中的event为例来展示不同阶段的输出文件示意图。图中,虚线表示组件源码文件中的其他文件例如resource等都可与event的目标测试用例的生成过程相同,文件后缀名为.c表示均为单文件级。在该图中表示了,通过归一化处理,将event测试用例、resource测试用例等测试用例生成一个目标测试用例的示例。参见图7所示,图7为本发明实施例嵌入式系统中的单元测试装置的一种示意图。该装置包括,

测试用例可扩展标记文件生成模块,为嵌入式源代码中的被测函数编写测试用例,得到测试用例可扩展标记文件;

测试用例源码文件生成模块,通过面向对象的解释型计算机程序,将所述测试用例可扩展标记文件自动化生成基于单文件级源码对应的测试用例源码文件;

目标测试用例生成模块,通过编程工具将所述测试用例码源文件自动生成目标测试用例;

执行目标测试用例模块,通过自动化测试软件工具执行所述目标测试用例,得到测试结果。

其中,所述目标测试用例生成模块包括,

测试用例生成模块,采用unity工具生成测试用例源码文件的测试用例,

归一化处理模块,通过面向对象的解释型计算机程序遍历所述测试用例,并进行归一化处理,得到目标测试用例。

所述面向对象的解释型计算机程序为python脚本程序,所述自动化测试软件工具为parasoft工具。

所述执行目标测试用例模块包括,

测试环境构建模块,基于编译文件,利用parasoft工具所构建的测试环境执行目标测试用例;

测试结果获取模块,当完成目标测试用例执行后,在所述源代码文件反馈至少包括命令行、修改条件、判定范围之一的覆盖情况。

本发明实施例还提供了一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现如下步骤:

为嵌入式源代码中的被测函数编写测试用例,得到测试用例可扩展标记文件;

通过面向对象的解释型计算机程序,将所述测试用例可扩展标记文件自动化生成基于单文件级源码对应的测试用例源码文件;

通过编程工具将所述测试用例码源文件自动生成目标测试用例;

通过自动化测试软件工具执行所述目标测试用例,得到测试结果。

对于存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1