一种测试用例的生成方法及系统的制作方法

文档序号:10577293阅读:234来源:国知局
一种测试用例的生成方法及系统的制作方法
【专利摘要】本发明公开了一种测试用例的生成方法,包括:利用编译器对源程序进行编译,生成插桩源程序;利用所述编译器对所述源程序进行图形化显示,获得语法树中间文件,并对所述语法树中间文件进行解析,生成所述源程序的流程图;对所述流程图进行计算,得到所述源程序的目标路径集;根据所述插桩源程序及所述目标路径集,利用遗传算法生成测试用例;该方法能够自动生成测试用例,因此使得测试用例的生成更具人性化节省人力,简单易用,图形结合,节省成本,提高效率;本发明还公开了一种测试用例的生成系统。
【专利说明】
一种测试用例的生成方法及系统
技术领域
[0001]本发明涉及数据处理技术领域,特别涉及一种测试用例的生成方法及系统。
【背景技术】
[0002]程序测试存在于程序开发过程的整个生命周期,工作量很大,在进行测试的过程中需要使用很多各种各样的资源。因为测试用例的设计、执行、分析都是十分繁琐的,需要花费很多的时间,同时效率很低,所以测试的成本费用很高。在程序开发工作中程序测试的工作占有的比例很高,通常达到40 %左右,有些要求高的甚至达到60 % ο因为程序测试的大多数操作和过程都是具有重复性和大量性的,所以可以将自动化方法应用于程序开发过程中的程序测试工作。测试的自动化不仅可以让测试人员减少许多无意义的工作量,而且还可以提高资源的利用率。
[0003]当前的自动化测试工具主要是分为功能和性能测试工具,其中性能的测试工具比较成熟,而功能方面特别是,在测试数据的自动生成方面的研究还比较欠缺。而要实现自动化主要与测试用例自动生成的程度相关,测试用例的自动生成可以有效地减少工作人员的工作量和加快测试的进程。但是在目前的一些测试工具中(如testbed,c++test),有关测试用例自动生成的效果和测试覆盖情况都不太理想,在大多数程序产品的开发中,许多所谓的自动化测试工具其实都不是完全能够达到自动化的,特别是测试用例的生成这一方面,主要还是采用手工设计的模式来完成产品的测试。现有的测试用例主要为黑盒测试,同时程序的插装主要为手动方式,效率低下,同时容易出现错误,针对这些缺点。因此,针对上述缺点,如何自动生成测试用例,是本领域技术人员需要解决的技术问题。

【发明内容】

[0004]本发明的目的是提供一种测试用例的生成方法及系统,能够自动生成测试用例,使得测试用例的生成更具人性化节省人力,简单易用,图形结合,节省成本,提高效率。
[0005]为解决上述技术问题,本发明提供一种测试用例的生成方法,包括:
[0006]利用编译器对源程序进行编译,生成插粧源程序;
[0007]利用所述编译器对所述源程序进行图形化显示,获得语法树中间文件,并对所述语法树中间文件进行解析,生成所述源程序的流程图;
[0008]对所述流程图进行计算,得到所述源程序的目标路径集;
[0009]根据所述插粧源程序及所述目标路径集,利用遗传算法生成测试用例。
[0010]其中,利用编译器对源程序进行编译,生成插粧源程序,包括:
[0011 ] 利用GCC编译器对源程序进行编译,生成RTL中间代码;
[0012]对所述RTL中间代码进行汇编,生成插粧源程序。
[0013]其中,利用所述编译器对所述源程序进行图形化显示,获得语法树中间文件,并对所述语法树中间文件进行解析,生成所述源程序的流程图,包括:
[0014]利用GCC编译器对源程序进行编译,得到语法树中间文件;
[0015]将所述语法树中间文件转换为gxl格式文件;
[0016]将所述gxl格式文件转换为xml文件;
[0017]对所述xml文件进行解析,生成所述源程序的流程图。
[0018]其中,根据所述插粧源程序及所述目标路径集,利用遗传算法生成测试用例,包括:
[0019]根据所述插粧源程序及所述目标路径集,确定每个目标路径经过的分支点,并通过遗传算法生成每个目标路径对应的测试用例。
[0020]本发明提供一种测试用例的生成系统,包括:
[0021 ]插粧源程序成模块,用于利用编译器对源程序进行编译,生成插粧源程序;
[0022]流程图生成模块,用于利用所述编译器对所述源程序进行图形化显示,获得语法树中间文件,并对所述语法树中间文件进行解析,生成所述源程序的流程图;
[0023]目标路径集生成模块,用于对所述流程图进行计算,得到所述源程序的目标路径集;
[0024]测试用例生成模块,用于根据所述插粧源程序及所述目标路径集,利用遗传算法生成测试用例。
[0025]其中,所述插粧源程序成模块包括:
[0026]RTL中间代码生成单元,用于利用GCC编译器对源程序进行编译,生成RTL中间代码;
[0027]插粧源程序生成单元,用于对所述RTL中间代码进行汇编,生成插粧源程序。
[0028]其中,所述流程图生成模块包括:
[0029]语法树生成单元,用于利用GCC编译器对源程序进行编译,得到语法树中间文件;
[0030]gxl格式文件生成单元,用于将所述语法树中间文件转换为gxl格式文件;
[0031 ] xml文件生成单元,用于将所述gxl格式文件转换为xml文件;
[0032]流程图生成单元,用于对所述xml文件进行解析,生成所述源程序的流程图。
[0033]其中,所述测试用例生成模块为根据所述插粧源程序及所述目标路径集,确定每个目标路径经过的分支点,并通过遗传算法生成每个目标路径对应的测试用例的模块。
[0034]本发明所提供的测试用例的生成方法,包括:利用编译器对源程序进行编译,生成插粧源程序;利用所述编译器对所述源程序进行图形化显示,获得语法树中间文件,并对所述语法树中间文件进行解析,生成所述源程序的流程图;对所述流程图进行计算,得到所述源程序的目标路径集;根据所述插粧源程序及所述目标路径集,利用遗传算法生成测试用例;该方法根据生成的插粧源程序即目标路径集利用遗传算法能够自动生成测试用例,因此使得测试用例的生成更具人性化节省人力,简单易用,图形结合,节省成本,提高效率;本发明还公开了一种测试用例的生成系统。
【附图说明】
[0035]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
[0036]图1为本发明实施例所提供的测试用例的生成方法的流程图;
[0037]图2为本发明实施例所提供的GCC编译器的工作流程示意图;
[0038]图3为本发明实施例所提供的源程序的流程图生成示意图;
[0039]图4为本发明实施例所提供的目标路径的测试用例的生成示意图;
[0040]图5为本发明实施例所提供的测试用例的生成系统的结构框图。
【具体实施方式】
[0041]本发明的核心是提供一种测试用例的生成方法及系统,能够自动生成测试用例,使得测试用例的生成更具人性化节省人力,简单易用,图形结合,节省成本,提高效率。
[0042]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0043]请参考图1,图1为本发明实施例所提供的测试用例的生成方法的流程图;该方法可以包括:
[0044]S100、利用编译器对源程序进行编译,生成插粧源程序;
[0045]其中,该步骤是利用编译器对源程序进行编译,以便实现自动对源程序进行插粧,实现对源程序的逻辑覆盖。这里只要是可以自动完成的编译器都可,例如GCC编译器,GNU:(GNU Compiler Collect1n,GNU编译器套装),GCC编译器是一个支持跨平台的编译器,它能在x86、x86-64、IA-64、Power PC、SPARC和Alpha等大多数的硬件平台上运行,该GCC编译器在内部进行了高度的优化,它也可以进行移植,在硬件编程中使用相当广泛。同时大多数主流的编程语言它都能支持比如(^/0++、013」601:;^6-^01'1^311、加¥3和4(^。因此,优选的,该步骤使用GCC编译器生成插粧源程序,具体过程如下:
[0046]利用GCC编译器对源程序进行编译,生成RTL中间代码;
[0047]对所述RTL中间代码进行汇编,生成插粧源程序。
[0048]其中,具体的请参考图2,通过图2可以了解到源代码的编译过程,并利用RTL的中间代码对源程序进行插装同时不影响程序运行的效率。通过编译器对源程序文件进行词法语法,语义的分析,生成语法树,将所述语法树进行扩展生成RTL中间代码;通过及其描述文件进行优化与寄存器分配,形成底层RTL中间代码,并进行汇编生成汇编代码,整合后形成最终的目标汇编文件,即包含了插粧源程序。
[0049]S110、利用所述编译器对所述源程序进行图形化显示,获得语法树中间文件,并对所述语法树中间文件进行解析,生成所述源程序的流程图;
[0050]其中,该步骤是为了实现图形结合,简单易用的功能;即获取源程序的流程图。该步骤同样可以利用GCC编译器实现,优选的:
[0051 ]利用GCC编译器对源程序进行编译,得到语法树中间文件;
[0052]将所述语法树中间文件转换为gxl格式文件;
[0053]将所述gxl格式文件转换为xml文件;
[0054]对所述xml文件进行解析,生成所述源程序的流程图。
[0055]其中,请参考图3,首先通过GCC编译器获得一个抽象语法树的中间文件即ast中间文件,然后使用开源工具gcc2gxl将该中间文件转化成gxl格式的文件,在将gxl文件转换为xml文件,通过解析xml文件,生成一个源程序对应的流程图。其中,使用开源工具gcc2gxl将该中间文件转化成gxl格式的文件是一个静态信息提取的过程。
[0056]S120、对所述流程图进行计算,得到所述源程序的目标路径集;
[0057]S130、根据所述插粧源程序及所述目标路径集,利用遗传算法生成测试用例。
[0058]其中,遗传算法(GeneticAlgorithm,GA)源自于人类使用计算机模拟生物进化行为的研究。遗传算法是Holland教授和他的学生在研究生物进化技术的过程中创造的,该算法本质上是一种自适应的概率寻优方法。这个算法是模仿生物的遗传和进化的行为来对现实中的问题寻优的方法,它和遗传基因的某些行为很相似,它将基因的交叉重组、基因的变异和适者生存的自然机制放到算法的寻优过程中;遗传算法的基本定理是模式定理(Schema Theorem)。
[0059]其中,对源程序的流程图进行分析,求出该程序的目标路径集(能够完成对程序的分支覆盖),并利用GCC编译器的前端在判定分支处插入探针(判别是否经过此分支点),通过GA算法生成满足目标路径的测试用例,从而求出满足覆盖程序的用例集。即根据所述插粧源程序及所述目标路径集,确定每个目标路径经过的分支点,并通过遗传算法生成每个目标路径对应的测试用例。
[0060]其中,基于上述实施例,在生成测试用例过程中,请参考图4,还可以判断测试用例是否生成成功,若成功,则将生成的测试用例输出;若未成功,则继续通过GA算法进行测试用例的生成,直到成功生成测试用例为止,并将生成的测试用例输出。
[0061]基于上述技术方案,本发明实施例提的测试用例的生成方法,该方法是一种运用编译器技术完成源程序结构关系的树形化显示和程序自动插粧的功能,来实现对覆盖率的测试和基本路径的查找,该方法是通过编译器如(GCC编译器)解析程序获得程序结构图,并使其在编译的前端能对程序进行探针的插入,替代原来的手工插粧,并基于该框架生成各个判定分支点,从中选取分支点的用例并将选中的节点用例组成路径形成路径集;将寻找指定路径问题转化为寻优问题,然后利用遗传算法的寻优能力,构造合适的适应度函数,生成目标路径的测试用例从而实现嵌入式程序测试流程的自动化。即该方法的测试工具是基于代码的,即白盒测试,同时源程序的插粧方式采用自动方法,提高测试用例生成的效率。
[0062]本发明实施例提供了测试用例的生成方法,源程序的插粧方式采用自动方法,提高测试用例生成的效率。
[0063]下面对本发明实施例提供的测试用例的生成系统进行介绍,下文描述的测试用例的生成系统与上文描述的测试用例的生成方法可相互对应参照。
[0064]请参考图5,图5为本发明实施例所提供的测试用例的生成系统的结构框图;该系统可以包括:
[0065]插粧源程序成模块100,用于利用编译器对源程序进行编译,生成插粧源程序;
[0066]流程图生成模块200,用于利用所述编译器对所述源程序进行图形化显示,获得语法树中间文件,并对所述语法树中间文件进行解析,生成所述源程序的流程图;
[0067]目标路径集生成模块300,用于对所述流程图进行计算,得到所述源程序的目标路径集;
[0068]测试用例生成模块400,用于根据所述插粧源程序及所述目标路径集,利用遗传算法生成测试用例。
[0069]可选的,所述插粧源程序成模块100包括:
[0070]RTL中间代码生成单元,用于利用GCC编译器对源程序进行编译,生成RTL中间代码;
[0071 ]插粧源程序生成单元,用于对所述RTL中间代码进行汇编,生成插粧源程序。
[0072]可选的,所述流程图生成模块200包括:
[0073]语法树生成单元,用于利用GCC编译器对源程序进行编译,得到语法树中间文件;
[0074]gxl格式文件生成单元,用于将所述语法树中间文件转换为gxl格式文件;
[0075]xml文件生成单元,用于将所述gxl格式文件转换为xml文件;
[0076]流程图生成单元,用于对所述xml文件进行解析,生成所述源程序的流程图。
[0077]可选的,所述测试用例生成模块400为根据所述插粧源程序及所述目标路径集,确定每个目标路径经过的分支点,并通过遗传算法生成每个目标路径对应的测试用例的模块。
[0078]基于上述实施例,该测试用例生成模块400还用于判断测试用例是否生成成功,若成功,则将生成的测试用例输出;若未成功,则继续通过GA算法进行测试用例的生成,直到成功生成测试用例为止,并将生成的测试用例输出。
[0079]说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0080]专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机程序或者二者的结合来实现,为了清楚地说明硬件和程序的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是程序方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0081]结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的程序模块,或者二者的结合来实施。程序模块可以置于随机存储器(RAM)、内存、只读存储器(R0M)、电可编程R0M、电可擦除可编程R0M、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
[0082]以上对本发明所提供的测试用例的生成方法及系统进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
【主权项】
1.一种测试用例的生成方法,其特征在于,包括: 利用编译器对源程序进行编译,生成插粧源程序; 利用所述编译器对所述源程序进行图形化显示,获得语法树中间文件,并对所述语法树中间文件进行解析,生成所述源程序的流程图; 对所述流程图进行计算,得到所述源程序的目标路径集; 根据所述插粧源程序及所述目标路径集,利用遗传算法生成测试用例。2.如权利要求1所述的测试用例的生成方法,其特征在于,利用编译器对源程序进行编译,生成插粧源程序,包括: 利用GCC编译器对源程序进行编译,生成RTL中间代码; 对所述RTL中间代码进行汇编,生成插粧源程序。3.如权利要求2所述的测试用例的生成方法,其特征在于,利用所述编译器对所述源程序进行图形化显示,获得语法树中间文件,并对所述语法树中间文件进行解析,生成所述源程序的流程图,包括: 利用GCC编译器对源程序进行编译,得到语法树中间文件; 将所述语法树中间文件转换为gxl格式文件; 将所述gxl格式文件转换为xml文件; 对所述xml文件进行解析,生成所述源程序的流程图。4.如权利要求3所述的测试用例的生成方法,其特征在于,根据所述插粧源程序及所述目标路径集,利用遗传算法生成测试用例,包括: 根据所述插粧源程序及所述目标路径集,确定每个目标路径经过的分支点,并通过遗传算法生成每个目标路径对应的测试用例。5.一种测试用例的生成系统,其特征在于,包括: 插粧源程序成模块,用于利用编译器对源程序进行编译,生成插粧源程序; 流程图生成模块,用于利用所述编译器对所述源程序进行图形化显示,获得语法树中间文件,并对所述语法树中间文件进行解析,生成所述源程序的流程图; 目标路径集生成模块,用于对所述流程图进行计算,得到所述源程序的目标路径集;测试用例生成模块,用于根据所述插粧源程序及所述目标路径集,利用遗传算法生成测试用例。6.如权利要求5所述的测试用例的生成系统,其特征在于,所述插粧源程序成模块包括: RTL中间代码生成单元,用于利用GCC编译器对源程序进行编译,生成RTL中间代码; 插粧源程序生成单元,用于对所述RTL中间代码进行汇编,生成插粧源程序。7.如权利要求6所述的测试用例的生成系统,其特征在于,所述流程图生成模块包括: 语法树生成单元,用于利用GCC编译器对源程序进行编译,得到语法树中间文件; gxl格式文件生成单元,用于将所述语法树中间文件转换为gxl格式文件; xml文件生成单元,用于将所述gxl格式文件转换为xml文件; 流程图生成单元,用于对所述xml文件进行解析,生成所述源程序的流程图。8.如权利要求7所述的测试用例的生成系统,其特征在于,所述测试用例生成模块为根据所述插粧源程序及所述目标路径集,确定每个目标路径经过的分支点,并通过遗传算法生成每个目标路径对应的测试用例的模块。
【文档编号】G06F11/36GK105938454SQ201610232183
【公开日】2016年9月14日
【申请日】2016年4月13日
【发明人】俞祥贤
【申请人】珠海迈科智能科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1