CN110928760B - 一种嵌入式***中的单元测试方法与装置 - Google Patents
一种嵌入式***中的单元测试方法与装置 Download PDFInfo
- Publication number
- CN110928760B CN110928760B CN201811101373.2A CN201811101373A CN110928760B CN 110928760 B CN110928760 B CN 110928760B CN 201811101373 A CN201811101373 A CN 201811101373A CN 110928760 B CN110928760 B CN 110928760B
- Authority
- CN
- China
- Prior art keywords
- test case
- file
- test
- source code
- tool
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000010998 test method Methods 0.000 title description 2
- 238000012360 testing method Methods 0.000 claims abstract description 392
- 238000004590 computer program Methods 0.000 claims abstract description 32
- 238000000034 method Methods 0.000 claims abstract description 32
- 230000008569 process Effects 0.000 claims abstract description 17
- 230000006870 function Effects 0.000 claims description 113
- 238000010606 normalization Methods 0.000 claims description 16
- 238000012545 processing Methods 0.000 claims description 16
- 239000010979 ruby Substances 0.000 claims description 13
- 229910001750 ruby Inorganic materials 0.000 claims description 13
- 230000003068 static effect Effects 0.000 claims description 12
- 238000010276 construction Methods 0.000 claims description 8
- 230000004048 modification Effects 0.000 claims description 8
- 238000012986 modification Methods 0.000 claims description 8
- 230000015572 biosynthetic process Effects 0.000 claims description 6
- 238000010586 diagram Methods 0.000 description 10
- 238000013461 design Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000002372 labelling Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种嵌入式***中的单元测试方法,包括,为嵌入式源代码中的被测函数编写测试用例,得到测试用例可扩展标记文件;通过面向对象的解释型计算机程序,将所述测试用例可扩展标记文件自动化生成基于单文件级源码对应的测试用例源码文件;通过编程工具将所述测试用例码源文件自动生成目标测试用例;通过自动化测试软件工具执行所述目标测试用例,得到测试结果。本发明实施例优化了编程测试用例的过程,提高了测试效率。
Description
技术领域
本发明实施例涉及软件测试技术,具体地,涉及一种嵌入式***中的单元测试方法。
背景技术
在嵌入式***软件开发过程中,基于“积木”方式进行,“积木”对应于软件开发中的组件,组件的高质量将极大提高嵌入式***的开发效率及可靠性,故对组件进行单元测试尤为重要。
嵌入式***中,单元测试是白盒测试的一种,实现被测函数内部的逻辑测试,旨在检测程序代码中的错误和漏洞,从源头上保证程序的质量,是对程序每一行代码或代码块进行覆盖测试以判断其正确与否。例如,实现被测函数内部的逻辑测试,需要开发人员编写大量的测试用例,同时需要编写相关的桩函数在测试用例中进行打桩,以模拟被测试函数中调用的接口,为被测试函数返回空,或返回固定的值,以使得被测函数能够正常测试其功能。
测试用例大部分基于.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工具中选择测试环境构建设置、编译器种类设置以定义编译选项,在项目设置中配置构建命令行、构建工作目录等,以实现对目标测试用例的执行。
当目标测试用例执行完成后,可直接在源码文件中反馈测试的情况,显示源码文件中被执行源码的命令行覆盖情况、修改条件(modified condition)、判定范围(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工具中选择测试环境构建设置、编译器种类设置以定义编译选项,在项目设置中配置构建命令行、构建工作目录等,以实现对目标测试用例的执行。
当目标测试用例执行完成后,可直接在源码文件中反馈测试的情况,显示源码文件中被执行源码的命令行覆盖情况、修改条件(modified condition)、判定范围(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工具所构建的测试环境执行目标测试用例;
测试结果获取模块,当完成目标测试用例执行后,在所述源代码文件反馈至少包括命令行、修改条件、判定范围之一的覆盖情况。
本发明实施例还提供了一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现如下步骤:
为嵌入式源代码中的被测函数编写测试用例,得到测试用例可扩展标记文件;
通过面向对象的解释型计算机程序,将所述测试用例可扩展标记文件自动化生成基于单文件级源码对应的测试用例源码文件;
通过编程工具将所述测试用例码源文件自动生成目标测试用例;
通过自动化测试软件工具执行所述目标测试用例,得到测试结果。
对于存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (15)
1.一种嵌入式***中的单元测试方法,其特征在于,该方法包括,
获得被测对象测试用例的可扩展标记文件;
通过面向对象的解释型计算机程序,将所述测试用例可扩展标记文件自动化生成基于单文件级源码对应的测试用例源码文件;
通过编程工具,将所述测试用例源码文件自动生成测试用例,通过面向对象的解释型计算机程序遍历所述测试用例,并进行归一化处理,得到目标测试用例;
其中,
所述将所述测试用例可扩展标记文件自动化生成基于单文件级源码对应的测试用例源码文件,包括:
在面向对象的解释型计算机程序运行界面下输入所述可扩展标记文件;
当面向对象的解释型计算机程序读出有可扩展标记文件存在时,则解析输入的可扩展标记文件内容,并解析出可扩展标记文件内容中包括的头文件、和/或静态全局变量、和/或被测函数的部分;
将解析出的头文件、和/或静态全局变量、和/或被测函数分别按照解析出后的测试用例的形成规则进行对应,用以生成测试用例;
将生成的测试用例按照框架文件格式进行配置;
在面向对象的解释型计算机程序运行环境下,将配置了框架格式的测试用例生成为测试用例源码文件;
所述归一化处理包括:
当遍历的测试用例数量与输入的数量一致时,解析读入的所有文件信息,逐一解析头文件、和/或函数内容信息,
将解析后相同的头文件、相同的函数内容合并,并统一生成一目标测试函数;
将生成的目标测试函数按照Unity框架文件格式进行配置,
通过Unity工具,将配置了Unity框架格式的目标测试函数生成为一个目标测试用例文件。
2.如权利要求1所述的方法,其特征在于,该方法还包括,通过自动化测试软件工具执行所述目标测试用例,得到测试结果。
3.如权利要求1所述的方法,其特征在于,所述通过编程工具将所述测试用例源码文件自动生成测试用例包括,
采用Unity工具将所述测试用例源码文件自动生成测试用例,其中,测试用例源码文件中的桩函数用Ruby工具生成。
4.如权利要求2所述的方法,其特征在于,所述面向对象的解释型计算机程序为Python脚本程序,所述自动化测试软件工具为Parasoft工具。
5.如权利要求4所述的方法,其特征在于,所述通过自动化测试软件工具执行所述目标测试用例,得到测试结果包括,
基于编译文件,利用Parasoft工具所构建的测试环境执行目标测试用例;
当完成目标测试用例执行后,在源代码文件反馈至少包括命令行、修改条件、判定范围之一的覆盖情况。
6.如权利要求1所述的方法,其特征在于,所述获得被测对象测试用例的可扩展标记文件包括,为嵌入式源代码中的被测函数用可扩展标记语言编写测试用例,得到测试用例可扩展标记文件,其中,被测函数中需要构造的桩函数,采用Ruby工具编写。
7.如权利要求1所述的方法,其特征在于,所述将生成的测试用例按照框架文件格式进行配置,包括:将生成的被测函数测试用例按照Unity框架文件格式进行配置;
所述将配置了框架格式的测试用例生成为测试用例源码文件,包括:通过Unity工具,将配置了Unity框架格式的被测函数测试用例生成为该被测函数测试用例源码文件。
8.如权利要求1所述的方法,其特征在于,所述通过面向对象的解释型计算机程序遍历所述测试用例,包括,
在脚本程序运行下,遍历指定路径下的测试用例。
9.一种嵌入式***中的单元测试装置,其特征在于,该装置包括,
测试用例可扩展标记文件生成模块,获得被测对象测试用例的可扩展标记文件;
测试用例源码文件生成模块,通过面向对象的解释型计算机程序,将所述测试用例可扩展标记文件自动化生成基于单文件级源码对应的测试用例源码文件;
目标测试用例生成模块,通过编程工具将所述测试用例源码文件自动生成测试用例;
其中,
目标测试用例生成模块进一步包括,
归一化处理模块,通过面向对象的解释型计算机程序遍历所述测试用例,并进行归一化处理,得到目标测试用例;
所述将所述测试用例可扩展标记文件自动化生成基于单文件级源码对应的测试用例源码文件,包括:
在面向对象的解释型计算机程序运行界面下输入所述可扩展标记文件;
当面向对象的解释型计算机程序读出有可扩展标记文件存在时,则解析输入的可扩展标记文件内容,并解析出可扩展标记文件内容中包括的头文件、和/或静态全局变量、和/或被测函数的部分;
将解析出的头文件、和/或静态全局变量、和/或被测函数分别按照解析出后的测试用例的形成规则进行对应,用以生成测试用例;
将生成的测试用例按照框架文件格式进行配置;
在面向对象的解释型计算机程序运行环境下,将配置了框架格式的测试用例生成为测试用例源码文件;
所述归一化处理包括:
当遍历的测试用例数量与输入的数量一致时,解析读入的所有文件信息,逐一解析头文件、和/或函数内容信息,
将解析后相同的头文件、相同的函数内容合并,并统一生成一目标测试函数;
将生成的目标测试函数按照Unity框架文件格式进行配置;
通过Unity工具,将配置了Unity框架格式的目标测试函数生成为一个目标测试用例文件。
10.如权利要求9所述的装置,其特征在于,该装置还包括,
执行目标测试用例模块,通过自动化测试软件工具执行所述目标测试用例,得到测试结果。
11.如权利要求9所述的装置,其特征在于,所述目标测试用例生成模块包括,
桩函数生成模块,采用Ruby工具为所述测试用例源码文件中的调用接口生成桩函数;
测试用例生成模块,采用Unity工具生成测试用例源码文件的测试用例。
12.如权利要求10所述的装置,其特征在于,所述面向对象的解释型计算机程序为Python脚本程序,所述自动化测试软件工具为Parasoft工具。
13.如权利要求12所述的装置,其特征在于,所述执行目标测试用例模块包括,
测试环境构建模块,基于编译文件,利用Parasoft工具所构建的测试环境执行目标测试用例;
测试结果获取模块,当完成目标测试用例执行后,在源代码文件反馈至少包括命令行、修改条件、判定范围之一的覆盖情况。
14.如权利要求9所述的装置,其特征在于,所述将生成的测试用例按照框架文件格式进行配置,包括:将生成的被测函数测试用例按照Unity框架文件格式进行配置;
所述将配置了框架格式的测试用例生成为测试用例源码文件,包括:通过Unity工具,将配置了Unity框架格式的被测函数测试用例生成为该被测函数测试用例源码文件。
15.如权利要求9所述的装置,其特征在于,所述通过面向对象的解释型计算机程序遍历所述测试用例,包括,
在脚本程序运行下,遍历指定路径下的测试用例。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811101373.2A CN110928760B (zh) | 2018-09-20 | 2018-09-20 | 一种嵌入式***中的单元测试方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811101373.2A CN110928760B (zh) | 2018-09-20 | 2018-09-20 | 一种嵌入式***中的单元测试方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110928760A CN110928760A (zh) | 2020-03-27 |
CN110928760B true CN110928760B (zh) | 2023-10-20 |
Family
ID=69855502
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811101373.2A Active CN110928760B (zh) | 2018-09-20 | 2018-09-20 | 一种嵌入式***中的单元测试方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110928760B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113360410A (zh) * | 2021-07-19 | 2021-09-07 | 上汽通用五菱汽车股份有限公司 | 一种c代码软件的测试方法与可读存储介质 |
CN116578498B (zh) * | 2023-07-12 | 2023-09-29 | 西南交通大学 | 一种单元测试用例自动生成方法及*** |
CN117472785B (zh) * | 2023-12-25 | 2024-04-16 | 银河麒麟软件(长沙)有限公司 | Linux***下的Openstack测试方法及*** |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6505342B1 (en) * | 2000-05-31 | 2003-01-07 | Siemens Corporate Research, Inc. | System and method for functional testing of distributed, component-based software |
CN1873626A (zh) * | 2005-06-01 | 2006-12-06 | 中兴通讯股份有限公司 | 一种自动生成桩和驱动函数的单元测试***及方法 |
US8028276B1 (en) * | 2007-06-29 | 2011-09-27 | Oracle America, Inc. | Method and system for generating a test file |
CN102955740A (zh) * | 2012-12-13 | 2013-03-06 | 中国航空无线电电子研究所 | 一种基于Perl的驱动函数和桩函数生成方法 |
CN103001813A (zh) * | 2013-01-08 | 2013-03-27 | 太仓市同维电子有限公司 | 一种用于网管设备中配置管理的方法 |
KR20160044305A (ko) * | 2014-10-15 | 2016-04-25 | 삼성에스디에스 주식회사 | 코드의 단위 테스트를 위한 장치 및 방법 |
CN106874202A (zh) * | 2017-02-14 | 2017-06-20 | 网易无尾熊(杭州)科技有限公司 | 用于单元测试的方法、装置以及可读存储介质 |
CN107807883A (zh) * | 2017-10-27 | 2018-03-16 | 郑州云海信息技术有限公司 | 一种用户态网络文件***的单元测试方法及装置 |
CN108153661A (zh) * | 2016-12-05 | 2018-06-12 | 腾讯科技(深圳)有限公司 | 执行测试用例的方法和装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN201392526Y (zh) * | 2009-03-25 | 2010-01-27 | 大连海事大学 | 用于移动应用程序的机上测试*** |
US9552281B2 (en) * | 2011-12-28 | 2017-01-24 | Verisign, Inc. | Utilizing a test automation tool in a test automation environment |
US9135150B2 (en) * | 2013-02-27 | 2015-09-15 | International Business Machines Corporation | Automated execution of functional test scripts on a remote system within a unit testing framework |
-
2018
- 2018-09-20 CN CN201811101373.2A patent/CN110928760B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6505342B1 (en) * | 2000-05-31 | 2003-01-07 | Siemens Corporate Research, Inc. | System and method for functional testing of distributed, component-based software |
CN1873626A (zh) * | 2005-06-01 | 2006-12-06 | 中兴通讯股份有限公司 | 一种自动生成桩和驱动函数的单元测试***及方法 |
US8028276B1 (en) * | 2007-06-29 | 2011-09-27 | Oracle America, Inc. | Method and system for generating a test file |
CN102955740A (zh) * | 2012-12-13 | 2013-03-06 | 中国航空无线电电子研究所 | 一种基于Perl的驱动函数和桩函数生成方法 |
CN103001813A (zh) * | 2013-01-08 | 2013-03-27 | 太仓市同维电子有限公司 | 一种用于网管设备中配置管理的方法 |
KR20160044305A (ko) * | 2014-10-15 | 2016-04-25 | 삼성에스디에스 주식회사 | 코드의 단위 테스트를 위한 장치 및 방법 |
CN108153661A (zh) * | 2016-12-05 | 2018-06-12 | 腾讯科技(深圳)有限公司 | 执行测试用例的方法和装置 |
CN106874202A (zh) * | 2017-02-14 | 2017-06-20 | 网易无尾熊(杭州)科技有限公司 | 用于单元测试的方法、装置以及可读存储介质 |
CN107807883A (zh) * | 2017-10-27 | 2018-03-16 | 郑州云海信息技术有限公司 | 一种用户态网络文件***的单元测试方法及装置 |
Non-Patent Citations (1)
Title |
---|
徐宏革等.《白盒测试之道》.北京航空航天大学出版社,2011,第63,79-81,225-233页. * |
Also Published As
Publication number | Publication date |
---|---|
CN110928760A (zh) | 2020-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10853231B2 (en) | Detection and correction of coding errors in software development | |
US8549483B1 (en) | Engine for scalable software testing | |
US8881109B1 (en) | Runtime documentation of software testing | |
US20160357519A1 (en) | Natural Language Engine for Coding and Debugging | |
US7856619B2 (en) | Method and system for automated testing of a graphic-based programming tool | |
CN108845940B (zh) | 一种企业级信息***自动化功能测试方法和*** | |
US7900198B2 (en) | Method and system for parameter profile compiling | |
US20060064677A1 (en) | Debugger and method for debugging computer programs across multiple programming languages | |
US20110191752A1 (en) | Method and System for Debugging of Software on Target Devices | |
US10565089B2 (en) | Identification of code features potentially associated with code behavior | |
CN110928760B (zh) | 一种嵌入式***中的单元测试方法与装置 | |
US20090241096A1 (en) | Dynamic Software Tracing | |
US10496379B2 (en) | Facilitated production of code for software testing | |
CN111309609B (zh) | 软件处理*** | |
CN112131116A (zh) | 一种嵌入式软件自动化回归测试方法 | |
CN112230904A (zh) | 基于接口文档的代码生成方法、装置、存储介质及服务器 | |
US20080127118A1 (en) | Method and system for dynamic patching of software | |
CN115705250A (zh) | 监测堆栈使用量以优化程序 | |
CN117076338B (zh) | 基于kprobe的linux内核动态调试方法及*** | |
Bünder et al. | A model-driven approach for behavior-driven GUI testing | |
US10740222B2 (en) | Intelligent unitizer test plug-in | |
US20140040666A1 (en) | Systems and methods for feedback driven regression testing | |
CN116893960A (zh) | 代码质量检测方法、装置、计算机设备和存储介质 | |
Wang et al. | Fast reproducing web application errors | |
CN114356783A (zh) | 单元测试代码自动生成方法、装置、存储介质及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |