一种自动生成sql语句的系统及方法

文档序号:9687285阅读:1260来源:国知局
一种自动生成sql语句的系统及方法
【技术领域】
[0001 ]本发明主要涉及分布式数据库数据处理技术领域,具体是一种自动生成SQL语句的系统及方法。
【背景技术】
[0002]随着自动化软件测试技术的发展,为了提高测试工作的效率,减少人工的重复劳动,采用扩大测试覆盖率等方式来工作得到了越来越多人的认可,并且已经得到了实践的证明。
[0003]目前可以根据上下文无关文法生成符合一定规则文法的句子,最早是可以在编译器测试上的。目前句子生成的方法是包括随机法和规则法。在随机法这个基础上,为每一个产生式增加了一个用于标识该产生式被覆盖机率的权值,就成为我们了解的加权的随机算法。这个方法很好地继承了随机覆盖这一优点,同时能够按照一定的规则来设定权值,改变产生式被覆盖的概率。
[0004]SQL语句就是SQL文法中的一种句型,根据上下文无关文法这一思想可以使用在SQL语句生成上。将生成的SQL语句作为一个测试用例,可以有效检验出数据库管理系统的语法错误。
[0005]根据加权随机算法的思想,通过模拟产生式的直接推导过程,给出了根据SQL文法,生成符合该文法的SQL语句,用作测试用例的方法;研究了从表示文法的BNF文件生成SQL测试用例集合的自动化过程。这个过程包括几个阶段:将SQL文法的每一个非终结符转换成一个对应的解析函数即一个规则,所有这些规则的集合构成了规则库;遍历文法产生式自动生成SQL测试用例;使用权值数组结合随机数,加大了生成测试用例的灵活性;使用非终结符的最大通用次数来终止SQL测试用例的生成。
[0006]传统解决数据库系统测试时,需要人工编写大量SQL测试语句,测试效率低下,劳动强度大,人为原因容易造成测试用例集覆盖完全的情况发生因此,使用可以自动生成SQL测试用例集的工具对测试数据库来说,意义是非常重要的。

【发明内容】

[0007]为解决目前技术的不足,本发明结合现有技术,从实际应用出发,提供一种自动生成SQL语句的系统及方法,可以快速地大批量地自动生成SQL语句,可以有效地减少测试人员的工作量,提高效率。
[0008]为实现上述目的,本发明的技术方案如下:
[0009]—种自动生成SQL语句的系统,包括分析树模块,用于接收以BNF范式表达的SQL语句文法,以便自动生成SQL语句,其支持系统默认与人工干预相结合的方式对SQL语句进行生成,系统默认是根据BNF范式,生成所有可以产生的SQL语句种类和算子,人工干预是在配置文件中配置生成SQL的权值,配置类型为三种,分别是SQL语句类型配置、SQL算子配置和迭代次数配置;SQL集合模块,用于分析树模块解析完成的中间数据及BNF范式定义生成SQL语句,并对已生成的SQL语句进行检查,去除不符合要求的SQL语句;日志及监控模块,用于反馈监控分析树模块和SQL集合模块生成日志,防止出现异常影响正常的工作。
[0010]本发明可以接收以BNF范式表达的SQL语句文法,并根据范式产生相应的分析树,最终自动化生成SQL语句,用以进行数据库系统的语法测试,测试人员只需要提供较少的范式文件,即可生成SQL测试用例集,本发明支持系统默认与人工干预相结合的方式对SQL语句进行生成,系统默认是根据BNF文件自动生成SQL文件,此外还可以比较灵活地采取人工干预的方式来进行SQL文件,人工干预方式可增加系统的灵活性,剔除不符合配置的语句,使测试用例更具针对性,且可避免SQL语句中出现大量重复算子的问题,提高测试用例的覆皿/又ο
[0011]本发明的系统默认方式在本系统中会优先选择,系统首先对各表达式进行检查,根据范式中的各表达式自动分析并组合成可执行的SQL语句。用户可根据测试需要将要进行测试SQL以BNF范式的方式保存到文件中供系统默认时选择。
[0012]本发明的SQL语句类型配置根据参数配置自动生成,系统会通过修改的配置文件结合提前配置的BNF范式文件,生成规定的SQL语句种类比例;SQL算子配置根据参数动态设定,系统会根据配置文件中对不同算子设置的权值,生成符合要求的SQL语句;迭代次数配置可自主设定,系统根据分析树模块解析完成的中间数据不断地运行和迭代,期间通过输入运行和迭代的次数使程序终止。
[0013]一种自动生成SQL语句的方法,包括以下几点:
[0014](1)配置BNF定义文件,设置好BNF的细节以适合具体的应用;
[0015](2)配置人工干预配置信息,通过SQL语句类型配置,SQL算子配置和迭代次数配置在配置文件中配置生成SQL的权值;
[0016](3)配置生成SQL集合中所用的表属性信息,即需要生成的SQL语句表名和表属性丰旲版;
[0017](4)根据上述设置的参数以及BNF定义文件,自动生成SQL集合,在生成SQL集合时记录各种日志信息,以防止出现异常情况;
[0018](5)对已生成的SQL集合中的SQL语句进行检查,去除不符合要求的SQL语句。
[0019]配置人工干预配置信息包括配置不同SQL语句的种类、不同算子在SQL语句中所占的比例及嵌套语句的层数。
[0020]所配置的SQL语句的类型包括DDL、DML,所配置的SQL语句算子包括order by、limit和group byi吾句。
[0021]本发明的有益效果:
[0022]本系统可以使测试人员通过BNF范式表示测试用例集,系统自动根据BNF范式生成所需要的SQL语句,并且还可通过人工干预的方法对产生的SQL语句进一步进行调整,通过配置不同种类语句的权值、不同类型条件的权值,生成不同数量的DDL、DML、查询语句,及语句中不同种类的条件。本发明可以使测试人员通过编写BNF范式,并进行简单配置,自动产生大量SQL测试用例集以供测试,BNF范式的写法具有统一的规范,不会造成读者产生歧义,且范式的书写工作量要显著低于SQL测试语句书写的工作量,因此可有效降低测试人员的重复性工作,提高工作效率。
【附图说明】
[0023]附图1是自动生成SQL语句的系统总体框架图;
[0024]附图2是自动生成SQL语句的系统总体流程图;
[0025]附图3是自动生成SQL语句的DDL语句生成流程图;
[0026]附图4是自动生成SQL语句的DML语句生成流程图;
[0027]附图5是自动生成SQL语句的重要算子生成流程图。
【具体实施方式】
[0028]下面结合附图和具体实施例,对本发明作进一步说明。应理解,这些实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。
[0029]附图1示出本发明中根据预先设置好的BNF文件自动生成SQL的系统框架图,在默认情况下,是根据预先设置的BNF文件自动生成符合SQL文法的SQL语句,一般情况下,也可以采用人工干预的方式。一般情况下,也可以采用人工干预的方式,如要生成权重为70%的DDL类型的SQL语句,权重为30%的DML类型的SQL语句,都可以通过在人工干预参数中进行配置。解析并生成分析树模块进一步解析人工干预配置参数和BNF文件,根据解析完成的中间数据,系统不断地运行和迭代,期间可以输入运行和迭代的次数,干预迭代次数使程序终止;在生成完成SQL集合后会对SQL集合进行正确性检测;此外,解析并生成分析树模块与生成SQL集合模块都需要时刻反馈监控与工作信息到日志及监控模块中,以防止出现异常影响正常的工作。
[0030]人工干预的部分可以采用在配置文件中配置生成SQL的权重,系统中一共支持三种配置,分别为:SQL语句类型配置,SQL算子配置和迭代次数配置。
[0031]第一部分为SQL语句类型配置,系统可根据配置文件中对不同种类SQL语句配置的权值,对生成的SQL语句进行自动筛选,只保留符合配置的语句,剔除不符合配置的语句,可使测试用例集更具有针对性。例如如果DDL语句配置权重值为5,DML语句权重值为5,则根据权重配置比例,结合提前配置好的BNF文件,可以生成50 %的DDL语句,50 %的DML语句。
[0032]第二部分为SQL算子(如含有orderby limit、函数表达式、运算符等的权重)的配置,系统会根据配置文件中对不同算子设置的权值,生成相应的符合要求的测试语句,避免了SQL语句中出现大量重复算子的问题,可以有效提高测试用例的覆盖度。例如如果将order by limit的权值设置为5,则在产生的全部含有order by的SQL语句中,将会有50%的语句含有limit。
[0033]第三部分为子查询、连接查询等的迭代次数的配置,例如将leftjoin的权值设置为3,则会产生三张表的left join语句。还可以保留参数配置表
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1