CN115858366A - 一种基于文法生成的数据库自动测试方法及系统 - Google Patents

一种基于文法生成的数据库自动测试方法及系统 Download PDF

Info

Publication number
CN115858366A
CN115858366A CN202211594893.8A CN202211594893A CN115858366A CN 115858366 A CN115858366 A CN 115858366A CN 202211594893 A CN202211594893 A CN 202211594893A CN 115858366 A CN115858366 A CN 115858366A
Authority
CN
China
Prior art keywords
sql
database
grammar
information
crash
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.)
Granted
Application number
CN202211594893.8A
Other languages
English (en)
Other versions
CN115858366B (zh
Inventor
张静宸
白易元
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Shuimu Yulin Technology Co ltd
Original Assignee
Beijing Shuimu Yulin Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Shuimu Yulin Technology Co ltd filed Critical Beijing Shuimu Yulin Technology Co ltd
Priority to CN202211594893.8A priority Critical patent/CN115858366B/zh
Publication of CN115858366A publication Critical patent/CN115858366A/zh
Application granted granted Critical
Publication of CN115858366B publication Critical patent/CN115858366B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于文法生成的数据库自动测试方法及系统,总体由dfuzz执行器、突变器以及结果去重模块三部分组成,dfuzz执行器为sql执行主要功能模块,突变器包含sql解析和sql突变,结果去重模块用于对结果进行分析和去重。一方面通过特定数据库的文法文件,对数据库进行适配,由于文法文件的专属性,本方案对于数据库的适配程度更高,适配的难易程度也会大大的降低;另一方面,通过这些特定的文法文件,将一些常用的sql进行文法层面的剖析,将这些剖析过后的sql进行二次组装,可以生成复杂的,不常使用的sql,可以大大提高数据库的测试效果。

Description

一种基于文法生成的数据库自动测试方法及系统
技术领域
本发明涉及数据库测试技术领域,具体涉及一种基于文法生成的数据库自动测试方法及系统。
背景技术
现有的数据库测试方案主要还只适用于某几种主流数据库,通过用户自定义测试方案,由测试工具自动化去执行用户所规定的测试方案。如sysbench、ycsb、sqltest,其通过用户事先准备好的脚本,根据脚本中预先定义好的测试步骤,对数据库进行测试,其测试效果完全取决于脚本的复杂程度,而且这些工具都是由官方进行数据库适配,适配不同的数据库成本较高。
由于传统数据库测试工具通过测试脚本实现测试过程,测试效果不佳,只能在基本的压力测试和单元测试阶段发挥一些作用,测试人员需要花费大量的时间在调整测试脚本中;且传统数据库测试工具支持的数据库比较单一,适配特定的数据库也会过于麻烦,且无法通过适配的数据库的文法文件进行相应的sql调整,生成的sql语句必定是单一的,不全面的,某些特殊的sql也无法生成出来,导致出错率更改的sql无法被测试到。
发明内容
为此,本发明提供一种基于文法生成的数据库自动测试方法及系统,以解决以上技术问题。
为了实现上述目的,本发明提供如下技术方案:
根据本发明实施例的第一方面,提出了一种基于文法生成的数据库自动测试方法,所述方法包括:
初始化数据库并启动数据库,启动数据库时指定数据库的监听端口;
向突变器输入初始种子sql进行文法分析和突变得到突变后的sql;
连接数据库进行模糊测试,将突变得到的sql输入数据库进行执行,检测是否有数据库崩溃信号,若崩溃则收集崩溃信息,并统计获取sql执行后的模糊测试覆盖率信息,根据覆盖率与预设阈值的比较结果判断得到的sql是否可以作为下一次种子sql,其中所述崩溃信息包括导致崩溃的sql、堆栈信息以及覆盖率信息;
对结果进行分析和去重,遍历历史错误栈集合,检测获取的崩溃信息否与历史收集的堆栈信息和sql重合,如未重合则将收集的堆栈信息合并进堆栈集合中,如重合,则丢弃此次崩溃信息。
进一步地,所述方法还包括:
对数据库进行初始化,首次启动数据库,查看数据库是否可以成功运行sql,以及读取初始sql队列并尝试运行。
进一步地,向突变器输入初始种子sql进行文法分析和突变得到突变后的sql,具体包括:
对获取的初始种子sql进行文法分析;
将文法分析结果转换成突变器可识别的语法树;
根据突变算法对语法树进行突变得到突变后的sql,并对生成的sql再次进行文法分析,分析突变后的sql是否为正常sql,即是否符合数据库的文法要求。
进一步地,向突变器输入初始种子sql进行文法分析和突变得到突变后的sql,具体还包括:
根据每次成功执行的sql的执行顺序再生成经过排列组合的sql集合;整合sql,输出结果。
进一步地,所述方法还包括:
执行sql后进行数据库清理操作,让数据库再次达到测试之前的状态。
根据本发明实施例的第二方面,提出了一种基于文法生成的数据库自动测试系统,所述系统包括dfuzz执行器、突变器以及结果去重模块;
所述dfuzz执行器用于初始化数据库并启动数据库,启动数据库时指定数据库的监听端口;
向突变器输入初始种子sql进行文法分析和突变得到突变后的sql;
连接数据库进行模糊测试,将突变得到的sql输入数据库进行执行,检测是否有数据库崩溃信号,若崩溃则收集崩溃信息,并统计获取sql执行后的模糊测试覆盖率信息,根据覆盖率与预设阈值的比较结果判断得到的sql是否可以作为下一次种子sql,其中所述崩溃信息包括导致崩溃的sql、堆栈信息以及覆盖率信息;
所述结果去重模块,用于对结果进行分析和去重,遍历历史错误栈集合,检测获取的崩溃信息否与历史收集的堆栈信息和sql重合,如未重合则将收集的堆栈信息合并进堆栈集合中,如重合,则丢弃此次崩溃信息。
进一步地,所述突变器用于:
对获取的初始种子sql进行文法分析;
将文法分析结果转换成突变器可识别的语法树;
根据突变算法对语法树进行突变得到突变后的sql,并对生成的sql再次进行文法分析,分析突变后的sql是否为正常sql,即是否符合数据库的文法要求。
进一步地,所述突变器还用于:
根据每次成功执行的sql的执行顺序再生成经过排列组合的sql集合;整合sql,输出结果。
根据本发明实施例的第三方面,提出了一种计算机存储介质,所述计算机存储介质中包含一个或多个程序指令,所述一个或多个程序指令用于被一种基于文法生成的数据库自动测试系统执行如上任一项所述的方法。
本发明具有如下优点:
本发明提出的一种基于文法生成的数据库自动测试方法及系统,结合特定数据库的文法文件,以及分析,突变,验证sql等流程,相比于现有技术具有多方面提升。对于当前测试工具适配不同的数据库困难,适配成本高,无法通过个人进行定制化的适配的问题,本方案采取通过各个数据库的文法文件去进行适配,大大降低了适配成本,节省了不同数据库在适配过程中所花费的大量时间。
对于各个测试工具需要测试脚本进行测试,测试效果不可控,测试过程需要大量的测试脚本,测试过程需要大量的时间花费在测试脚本中,且测试效果不确定的问题,本方案采取通过收集的模糊测试器覆盖率信息,结合设定的目标阈值,不断的对测试效果好的sql进行文法分析,突变,验证,自动化的对数据库进行测试、结果分析,减少了花费在编写测试脚本的时间,减少了测试过程中人力不断的查看测试效果、修改测试脚本不断的反复测试的过程,大大降低了人力成本。
附图说明
为了更清楚地说明本发明的实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图引伸获得其它的实施附图。
图1为本发明实施例提供的一种基于文法生成的数据库自动测试方法的流程示意图;
图2为本发明实施例提供的一种基于文法生成的数据库自动测试系统中dfuzz执行器的处理流程图;
图3为本发明实施例提供的一种基于文法生成的数据库自动测试系统中突变器的处理流程图;
图4为本发明实施例提供的一种基于文法生成的数据库自动测试系统中结果去重模块的处理流程图。
具体实施方式
以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提出了一种基于文法生成的数据库自动测试方法,所述方法包括:
S100、初始化数据库并启动数据库,启动数据库时指定数据库的监听端口;
S200、向突变器输入初始种子sql进行文法分析和突变得到突变后的sql;
S300、连接数据库进行模糊测试,将突变得到的sql输入数据库进行执行,检测是否有数据库崩溃信号,若崩溃则收集崩溃信息,并统计获取sql执行后的模糊测试覆盖率信息,根据覆盖率与预设阈值的比较结果判断得到的sql是否可以作为下一次种子sql,其中所述崩溃信息包括导致崩溃的sql、堆栈信息以及覆盖率信息;
S400、对结果进行分析和去重,遍历历史错误栈集合,检测获取的崩溃信息否与历史收集的堆栈信息和sql重合,如未重合则将收集的堆栈信息合并进堆栈集合中,如重合,则丢弃此次崩溃信息。
本发明实施例提出的一种基于文法的数据库自动化测试方法。一方面通过特定数据库的文法文件,对数据库进行适配,由于文法文件的专属性,本方案对于数据库的适配程度更高,适配的难易程度也会大大的降低;另一方面,通过这些特定的文法文件,将一些常用的sql进行文法层面的剖析,将这些剖析过后的sql进行二次组装,可以生成复杂的,不常使用的sql,可以大大提高数据库的测试效果。
与上述实施例相对应的,本发明实施例提出的一种基于文法生成的数据库自动测试系统,主要包括dfuzz执行器、突变器以及结果去重模块。dfuzz执行器为sql执行主要功能模块,突变器包含sql解析和sql突变,结果去重模块用于对结果进行分析和去重。
dfuzz执行器:
dfuzz执行器是本方案提升sql执行效率的重要特征,dfuzz执行器可以快速执行用户定义的sql执行流程,通过sql执行后的覆盖率结果来分析sql的重要性,为下一次突变提供sql种子。
Dfuzz执行器可以根据用户指定的数据库初始化,启动,连接方式来执行模拟手工启动数据库的步骤,通过初始化数据库步骤,将每次测试的数据库初始化到测试目录下,使得两个不同的测试之间是相互不影响的。在发生数据库错误时也可通过启动数据库方式自动启动数据库。执行步骤如图2:
1dfuzz执行器开始会进行初始化步骤,包括对数据库进行初始化,首次启动数据库,查看数据库是否可以成功运行sql,以及读取初始sql队列并尝试运行。
2启动数据库时,dfuzz执行器会指定数据库的监听端口。
3dfuzz执行器开始时,会输入初始sql作为突变种子,然后从突变器中获得新的sql
4dfuzz执行器会连接数据库,并执行sql,完成后会进行数据库清理操作,让数据库再次达到测试之前的状态
5dfuzz执行器收集统计覆盖率信息,并且根据覆盖率信息判断是否可以作为下一次种子sql
6如果发生崩溃,dfuzz执行器会检测是否有崩溃信号发出,如果dfuzz收到崩溃信号则将崩溃的信息进行收集,如导致崩溃的sql,堆栈信息,覆盖率信息等。
Mutator突变器:
Mutator突变器是本方案区别于现有分布式模糊测试技术的关键特性。通过对sql进行文法层面的分析,将sql分析成一颗基础文法组成的文法树,根据这颗文法树,对sql进行相应的突变;并且还会根据文法分析基础sql的排列组合,得出更加容易产生bug的sql集合。突变器步骤如图3:
1mutaor突变器从dfuzz执行器获得初始种子
2开始对初始种子进行文法分析
3根据分析结果,将分析结果转换成mutator突变器可识别的语法树
4根据突变算法对语法树进行相应的突变,生成一些新的sql
5将生成的sql再次进行文法分析,查看是否符合数据库的文法要求
6再根据每次成功执行的sql的执行顺序(如create后执行select)再生成一些经过排列组合的sql集合
7整合sql,输出结果。
结果去重模块:
结果分析服务为本方案基础能力。模块核心功能为结果去重,核心流程步骤描述如下:
结果去重是本方案提升数据库自动化测试可用性的重要特性。结果去重可以避免多个不同的sql产生相同的错误,带来误报干扰。测试过程中,每新发现一个潜在缺陷,结果分析服务结果去重模块都将执行结果去重操作,如图4所示。
1结果去重模块会将dfuzz收集的堆栈信息集中起来。
2遍历之前的错误栈集合,检查是否与之前的堆栈信息和sql重合。
3如未重合则合并进堆栈集合中,认为此bug为一个新的bug,如重合,则丢弃此bug,认为这个不是一个新的bug。
本发明实施例提出的一种基于文法生成的数据库自动测试系统,测试框架可以结合特定数据库的文法文件,将一个sql语句进行文法层面的分析,结合分析结果,在文法层面随机的将其进行突变,所生成的sql是非单一的,复杂的,不可预测的,同时也是符合文法文件的要求的;将生成的sql输入数据库执行,收集的模糊测试器覆盖率信息,结合设定的目标阈值,计算模糊测试器收敛程度,从而得出生成的sql是否可以作为下一次突变的种子。在结合文法生成sql中,关键点在于结合数据库的文法,对sql进行文法层面的分析,通过分析结果在文法层面对sql进行突变,生成新的sql。
与上述实施例相对应的,本实施例提出了一种计算机存储介质,计算机存储介质中包含一个或多个程序指令,一个或多个程序指令用于被一种基于文法生成的数据库自动测试系统执行如上述实施例的方法。
虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。

Claims (9)

1.一种基于文法生成的数据库自动测试方法,其特征在于,所述方法包括:
初始化数据库并启动数据库,启动数据库时指定数据库的监听端口;
向突变器输入初始种子sql进行文法分析和突变得到突变后的sql;
连接数据库进行模糊测试,将突变得到的sql输入数据库进行执行,检测是否有数据库崩溃信号,若崩溃则收集崩溃信息,并统计获取sql执行后的模糊测试覆盖率信息,根据覆盖率与预设阈值的比较结果判断得到的sql是否可以作为下一次种子sql,其中所述崩溃信息包括导致崩溃的sql、堆栈信息以及覆盖率信息;
对结果进行分析和去重,遍历历史错误栈集合,检测获取的崩溃信息否与历史收集的堆栈信息和sql重合,如未重合则将收集的堆栈信息合并进堆栈集合中,如重合,则丢弃此次崩溃信息。
2.根据权利要求1所述的一种基于文法生成的数据库自动测试方法,其特征在于,所述方法还包括:
对数据库进行初始化,首次启动数据库,查看数据库是否可以成功运行sql,以及读取初始sql队列并尝试运行。
3.根据权利要求1所述的一种基于文法生成的数据库自动测试方法,其特征在于,向突变器输入初始种子sql进行文法分析和突变得到突变后的sql,具体包括:
对获取的初始种子sql进行文法分析;
将文法分析结果转换成突变器可识别的语法树;
根据突变算法对语法树进行突变得到突变后的sql,并对生成的sql再次进行文法分析,分析突变后的sql是否为正常sql,即是否符合数据库的文法要求。
4.根据权利要求3所述的一种基于文法生成的数据库自动测试方法,其特征在于,向突变器输入初始种子sql进行文法分析和突变得到突变后的sql,具体还包括:
根据每次成功执行的sql的执行顺序再生成经过排列组合的sql集合;整合sql,输出结果。
5.根据权利要求1所述的一种基于文法生成的数据库自动测试方法,其特征在于,所述方法还包括:
执行sql后进行数据库清理操作,让数据库再次达到测试之前的状态。
6.一种基于文法生成的数据库自动测试系统,其特征在于,所述系统包括dfuzz执行器、突变器以及结果去重模块;
所述dfuzz执行器用于初始化数据库并启动数据库,启动数据库时指定数据库的监听端口;
向突变器输入初始种子sql进行文法分析和突变得到突变后的sql;
连接数据库进行模糊测试,将突变得到的sql输入数据库进行执行,检测是否有数据库崩溃信号,若崩溃则收集崩溃信息,并统计获取sql执行后的模糊测试覆盖率信息,根据覆盖率与预设阈值的比较结果判断得到的sql是否可以作为下一次种子sql,其中所述崩溃信息包括导致崩溃的sql、堆栈信息以及覆盖率信息;
所述结果去重模块,用于对结果进行分析和去重,遍历历史错误栈集合,检测获取的崩溃信息否与历史收集的堆栈信息和sql重合,如未重合则将收集的堆栈信息合并进堆栈集合中,如重合,则丢弃此次崩溃信息。
7.根据权利要求6所述的一种基于文法生成的数据库自动测试系统,其特征在于,所述突变器用于:
对获取的初始种子sql进行文法分析;
将文法分析结果转换成突变器可识别的语法树;
根据突变算法对语法树进行突变得到突变后的sql,并对生成的sql再次进行文法分析,分析突变后的sql是否为正常sql,即是否符合数据库的文法要求。
8.根据权利要求7所述的一种基于文法生成的数据库自动测试系统,其特征在于,所述突变器还用于:
根据每次成功执行的sql的执行顺序再生成经过排列组合的sql集合;整合sql,输出结果。
9.一种计算机存储介质,其特征在于,所述计算机存储介质中包含一个或多个程序指令,所述一个或多个程序指令用于被一种基于文法生成的数据库自动测试系统执行如权利要求1-5任一项所述的方法。
CN202211594893.8A 2022-12-13 2022-12-13 一种基于文法生成的数据库自动测试方法及系统 Active CN115858366B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211594893.8A CN115858366B (zh) 2022-12-13 2022-12-13 一种基于文法生成的数据库自动测试方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211594893.8A CN115858366B (zh) 2022-12-13 2022-12-13 一种基于文法生成的数据库自动测试方法及系统

Publications (2)

Publication Number Publication Date
CN115858366A true CN115858366A (zh) 2023-03-28
CN115858366B CN115858366B (zh) 2024-03-29

Family

ID=85672318

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211594893.8A Active CN115858366B (zh) 2022-12-13 2022-12-13 一种基于文法生成的数据库自动测试方法及系统

Country Status (1)

Country Link
CN (1) CN115858366B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140101097A1 (en) * 2012-10-09 2014-04-10 Sap Ag Template based database analyzer
CN106598871A (zh) * 2016-12-29 2017-04-26 山东鲁能智能技术有限公司 Linux下的崩溃文件自动化分析方法及系统
CN109542765A (zh) * 2018-10-18 2019-03-29 深圳壹账通智能科技有限公司 数据库脚本验证方法、装置、计算机设备和存储介质
CN114168464A (zh) * 2021-12-02 2022-03-11 北京水木羽林科技有限公司 一种基于动态调度的分布式模糊测试方法及系统
CN115016973A (zh) * 2022-06-29 2022-09-06 广州文远知行科技有限公司 一种程序崩溃事件复现方法、装置、设备和介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140101097A1 (en) * 2012-10-09 2014-04-10 Sap Ag Template based database analyzer
CN106598871A (zh) * 2016-12-29 2017-04-26 山东鲁能智能技术有限公司 Linux下的崩溃文件自动化分析方法及系统
CN109542765A (zh) * 2018-10-18 2019-03-29 深圳壹账通智能科技有限公司 数据库脚本验证方法、装置、计算机设备和存储介质
CN114168464A (zh) * 2021-12-02 2022-03-11 北京水木羽林科技有限公司 一种基于动态调度的分布式模糊测试方法及系统
CN115016973A (zh) * 2022-06-29 2022-09-06 广州文远知行科技有限公司 一种程序崩溃事件复现方法、装置、设备和介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
侯莹;洪征;潘;吴礼发;: "基于模型的Fuzzing测试脚本自动化生成", 计算机科学, no. 03 *
陈杰: "基于模糊测试的数据库漏洞检测", 《中国优秀硕士论文辑》, pages 3 - 4 *

Also Published As

Publication number Publication date
CN115858366B (zh) 2024-03-29

Similar Documents

Publication Publication Date Title
WO2021179574A1 (zh) 根因定位方法、装置、计算机设备和存储介质
WO2021072887A1 (zh) 异常流量监测方法、装置、设备及存储介质
SG176797A1 (en) Automatic fault detection and classification in a plasma processing system and methods thereof
CN107223257B (zh) 测试方法、测试服务器及系统
CN106803799B (zh) 一种性能测试方法和装置
CN112214369A (zh) 基于模型融合的硬盘故障预测模型建立方法及其应用
WO2021047184A1 (zh) 系统故障分析处理方法、装置、存储介质及电子设备
CN111475411A (zh) 一种服务器问题检测方法、系统、终端及存储介质
CN114741369A (zh) 一种基于自注意力机制的图网络的系统日志检测方法
CN112328499A (zh) 一种测试数据生成方法、装置、设备及介质
US8649990B2 (en) Method for detecting variance in semiconductor processes
CN114111352A (zh) 一种碳化炉抽真空系统异常检测方法及系统
CN115858366A (zh) 一种基于文法生成的数据库自动测试方法及系统
CN116954624B (zh) 基于软件开发包的编译方法、软件开发系统及服务器
CN113141273A (zh) 基于预警信息的自修复方法、装置、设备及存储介质
JP2013182468A (ja) パラメータ値設定誤り検出システム、パラメータ値設定誤り検出方法およびパラメータ値設定誤り検出プログラム
CN109446079B (zh) 一种基于ast突变的浏览器模糊测试方法
CN116303042A (zh) 一种基于污点分析的软件配置故障检测方法
CN115269288A (zh) 故障确定方法、装置、设备和存储介质
CN114003466A (zh) 一种用于微服务应用程序的故障根因定位方法
CN116149899A (zh) 获取平台故障成因的方法及平台故障自动检查处置方法
CN112579429A (zh) 一种问题定位方法和装置
CN113742216B (zh) 一种检测机器学习引擎的效率的方法、装置和存储介质
CN111953544B (zh) 一种服务器的故障检测方法、装置、设备及存储介质
CN116183010B (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