一种面向复杂软件的全自动测试用例驱动生成系统技术方案

技术编号:20272220 阅读:25 留言:0更新日期:2019-02-02 03:33
本发明专利技术公开了一种面向复杂软件的全自动测试用例驱动生成系统,主要用于开发阶段的单元测试和系统集成阶段的模块测试。该系统包括程序参数深度分析模块、驱动函数自动生成模块和测试数据自动生成模块。该系统可以对被测源程序中任意复杂的函数参数进行深度分析,将解析到的全局变量信息与函数参数信息保存到PSD文件中,基于PSD文件,实现驱动函数和测试数据的自动生成。本发明专利技术实现了由计算机软件在无人干预的情况下,全自动产生可执行的单元测试用例驱动和对应的测试数据,可大幅度的降低开发阶段对于单元测试的投入,并且进而降低包括系统测试在内的各阶段测试成本投入。

【技术实现步骤摘要】
一种面向复杂软件的全自动测试用例驱动生成系统
:本专利技术属于软件测试
,具体是涉及一种面向复杂软件的全自动测试用例驱动生成系统,主要用于开发阶段的单元测试和系统集成阶段的模块测试。
技术介绍
:单元测试是保证软件质量非常有效的手段,无论是从测试理论早期介入测试的理念来看或是从单元测试不受UI影响可以高速批量验证的特性,所以业界所倡导的测试驱动开发,这个里面提到的测试驱动更多的就是指单元测试驱动。但一般开发团队还是很少的系统化的执行单元测试,针对应用软件的测试更多是由专业测试团队来执行黑盒测试。单元测试的最大的难点不在于无法确定输入输出,这毕竟是模块开发阶段就已经定好的,而在于单元测试用例的编写会耗费开发人员大量的工时,按照相关统计单元测试用例的时间甚至会远超过功能本身开发的时间。上述几点其实分析根本原因是单元测试编写太耗时,最终导致测试驱动的引擎失去了动力,致使测试驱动开发的美好愿景在现实场景熄火,因为构建这个驱动用的发动机实在是难度和成本太大了。市场上的各种“x”Unit,单元测试框架仅仅解决了生成测试驱动的外框,没有任何基于深度程序理解的用例逻辑和数据的产生能力。因此在各种开发相关场景中都让开发人员产生抵触情绪。一种面向复杂软件的全自动测试用例驱动生成系统的提出则解决这个困扰程序员的一个最大的难题,同时也有可能从根本上改变单元测试的现状,充分的、高效率的单元测试将有效缓解基于海量人力的系统级黑盒测试以及自动化测试的压力。制约测试用例采用程序自动生成,最关键的底层技术是复杂的参数解析技术。即:能够在编译器层面对于任意复杂的类型,任意定义嵌套层级的递归解析。如果没有这个关键技术的突破,那么测试用例自动生成系统要么无法商用,要么将以极低的效率来演化、产生合规的测试数据。例如著名的模糊测试工具AmericanFuzzyLop,它并不能够识别用户的程序所需要的结构类型,需要从最外层进行基于搜索算法的演化。程序的特性是接口层面的输入和内部某个模块的数据要求距离很远,外部数据通常是经过层层复杂转换才可以成为内部模块所需要的数据结构类型,因此从外层探索所需要的计算量和时间将是难以想象的。基于AmericanFuzzyLop,为了能够生成一个合法的SQL语句,让程序内部模块能够通过外围数据校验需要探索时间以天数计,远非分钟或者小时可以生成。另外一个制约性条件是:每个程序能够接手的输入都是经过精心结构编制、含有大量规则的数据,而这些数据通过随机+探索的方式生成是非常不现实和极其耗时的。所以,从黑盒以及最外层输入产生自动产生用例是不可行的。如果从软件内部结构分析产生用例驱动,就需要对软件的编译结构进行深度理解。可行的测试用例生成系统,应该是基于程序的中间(关键入口)作为测试切入最为合适。这些模块的输入,已经将模糊的输入转化为高度结构化的参数。只要能够识别这些复杂结构,将复杂数据类型一步步降解为简单数据类型,同时完成参数构造,就可以自动完成驱动用例的生成。系统集成阶段的模块测试,可以划归为传统的单元测试,它是将缺陷发现并遏制在研发阶段最好的方法。但受限于单元测试需要开发大量的驱动程序,在行业内的推广和应用受到了极大的限制。当然单元测试也可以在系统集成完毕后执行,避免构建虚拟的桩程序。
技术实现思路
:为此,本专利技术所要解决的技术问题在于现有技术中无法实现对任意复杂参数进行“测试用例框架自动生成”的技术问题,从而提出一种面向复杂软件的全自动测试用例驱动生成系统,该系统提供了一种基于程序函数参数深度解析的编译技术,实现用例框架由软件进行全自动编写,并且可保证生成的用例可直接进行编译运行,并开始执行测试。为达到上述目的,本专利技术的技术方案如下:一种面向复杂软件的全自动测试用例驱动生成系统,包括:程序参数深度分析模块,所述程序参数深度分析模块用于读取输入的被测源程序,利用编译器底层技术对输入的被测源程序进行词法分析和语法分析,生成抽象语法树,通过遍历抽象语法树获取全局变量信息与函数参数信息,针对被测源程序的每个编译单元,将解析到的全局变量信息与函数参数信息保存到PSD文件中。驱动函数自动生成模块,所述驱动函数自动生成模块用于读取PSD文件,对保存在PSD文件中的全局变量信息与函数参数信息进行分析和提取,生成驱动函数,所述驱动函数包括全局变量的声明、函数的调用次数、全局变量与函数参数的赋值、原函数的调用以及函数返回值的打印输出。测试数据自动生成模块,所述测试数据自动生成模块用于读取PSD文件,根据PSD文件中保存的函数参数信息,自动生成与函数参数信息一一对应的测试数据,并将生成的测试数据按照参数层级进行组织,最后将生成的多层级的测试数据存储在json文件中。作为上述技术方案的优选,程序参数深度分析模块中:所述全局变量信息包括全局变量的名称以及类型,所述函数信息包括函数的名称、参数个数、参数展开类型以及返回值展开类型。作为上述技术方案的优选,程序参数深度分析模块中:所述PSD文件为程序参数描述文件,不同数据类型在PSD文件中的保存方法如下:针对基本数据类型,存储变量名与类型;针对数组类型,存储数组类型以及数组的长度;针对指针类型,存储几级指针;针对链表,存储标记为链表。作为上述技术方案的优选,所述程序参数深度分析模块对全局变量的分析包括分析变量是用户自定义变量还是系统头文件变量,针对复杂的系统头文件变量,分析过程解析到系统头文件变量后停止分析,并根据提前预设置好的模板对已知的系统头文件变量进行处理。作为上述技术方案的优选,驱动函数自动生成模块中:根据变量的不同类型,对全局变量与函数参数的赋值方法如下:针对基本类型的变量,直接赋值;针对数据类型的变量,内存拷贝赋值;针对指针类型的变量,先判断该指针是普通类型的指针还是复杂类型的指针,若是普通类型的指针,则将其作为数组首地址,然后进行内存拷贝赋值;若是复杂类型的指针,则通过指向一个有效的结构地址赋值;针对属于系统头文件定义类型的变量,通过添加模板进行赋值。作为上述技术方案的优选,测试数据自动生成模块中:json文件中存储了对应层级的变量的名称以及对应的值,值文件中只对字符串、数值型变量进行数值存储,值文件中的数据结构层级关系和PSD文件中的数据结构层级关系一一对应,同时json文件以可视化表格的方式展示,表格支持多层级变量的展开以及多组测试数据的展示,并支持可视化编辑。作为上述技术方案的优选,系统还包括测试结构分析模块,所述测试结果分析模块用于编辑驱动与用例、编译被测程序、执行测试用例以及测试结果输出。本专利技术的有益效果在于:被测源程序的信息通过编译技术自动提取,使得测试人员不用关心程序的内部结构;测试人员不需要再手动编写驱动文件,提高了单元测试的效率;测试数据自动生成,并自动配置测试次数,测试数据可以灵活修改,不用再次编译源程序;利用模板灵活配置不同类型的变量的赋值过程;利用自动生成的驱动函数和测试数据,可以灵活的边修改函数边进行测试。附图说明:以下附图仅旨在于对本专利技术做示意性说明和解释,并不限定本专利技术的范围。其中:图1为本专利技术一个实施例的一种面向复杂软件的全自动测试用例驱动生成系统示意图;图2为本专利技术一个实施例的将全局变量与函数参数解析存储为PSD结构的流程图。图3为本专利技术一本文档来自技高网
...

【技术保护点】
1.一种面向复杂软件的全自动测试用例驱动生成系统,其特征在于,包括:程序参数深度分析模块,所述程序参数深度分析模块用于读取输入的被测源程序,利用编译器底层技术对输入的被测源程序进行词法分析和语法分析,生成抽象语法树,通过遍历抽象语法树获取全局变量信息与函数参数信息,针对被测源程序的每个编译单元,将解析到的全局变量信息与函数参数信息保存到PSD文件中;驱动函数自动生成模块,所述驱动函数自动生成模块用于读取PSD文件,对保存在PSD文件中的全局变量信息与函数参数信息进行分析和提取,生成驱动函数,所述驱动函数包括全局变量的声明、函数的调用次数、全局变量与函数参数的赋值、原函数的调用以及函数返回值的打印输出;测试数据自动生成模块,所述测试数据自动生成模块用于读取PSD文件,根据PSD文件中保存的函数参数信息,自动生成与函数参数信息一一对应的测试数据,并将生成的测试数据按照参数层级进行组织,最后将生成的多层级的测试数据存储在json文件中。

【技术特征摘要】
1.一种面向复杂软件的全自动测试用例驱动生成系统,其特征在于,包括:程序参数深度分析模块,所述程序参数深度分析模块用于读取输入的被测源程序,利用编译器底层技术对输入的被测源程序进行词法分析和语法分析,生成抽象语法树,通过遍历抽象语法树获取全局变量信息与函数参数信息,针对被测源程序的每个编译单元,将解析到的全局变量信息与函数参数信息保存到PSD文件中;驱动函数自动生成模块,所述驱动函数自动生成模块用于读取PSD文件,对保存在PSD文件中的全局变量信息与函数参数信息进行分析和提取,生成驱动函数,所述驱动函数包括全局变量的声明、函数的调用次数、全局变量与函数参数的赋值、原函数的调用以及函数返回值的打印输出;测试数据自动生成模块,所述测试数据自动生成模块用于读取PSD文件,根据PSD文件中保存的函数参数信息,自动生成与函数参数信息一一对应的测试数据,并将生成的测试数据按照参数层级进行组织,最后将生成的多层级的测试数据存储在json文件中。2.根据权利要求1所述的一种面向复杂软件的全自动测试用例驱动生成系统,其特征在于,程序参数深度分析模块中:所述全局变量信息包括全局变量的名称以及类型,所述函数信息包括函数的名称、参数个数、参数展开类型以及返回值展开类型。3.根据权利要求1所述的一种面向复杂软件的全自动测试用例驱动生成系统,其特征在于,程序参数深度分析模块中:所述PSD文件为程序参数描述文件,不同数据类型在PSD文件中的保存方法如下:针对基本数据类型,存储变量名与类型;针对数组类型,存储数组类型以及数组的长度;针对指针类型,存储几级指针;针...

【专利技术属性】
技术研发人员:赵明
申请(专利权)人:苏州洞察云信息技术有限公司
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1