CN117762773A - 一种面向模糊测试的语句序列变异方法 - Google Patents

一种面向模糊测试的语句序列变异方法 Download PDF

Info

Publication number
CN117762773A
CN117762773A CN202311534978.1A CN202311534978A CN117762773A CN 117762773 A CN117762773 A CN 117762773A CN 202311534978 A CN202311534978 A CN 202311534978A CN 117762773 A CN117762773 A CN 117762773A
Authority
CN
China
Prior art keywords
sql
text
sentence
sequence
test
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.)
Pending
Application number
CN202311534978.1A
Other languages
English (en)
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 Institute of Computer Technology and Applications
Original Assignee
Beijing Institute of Computer Technology and Applications
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 Institute of Computer Technology and Applications filed Critical Beijing Institute of Computer Technology and Applications
Priority to CN202311534978.1A priority Critical patent/CN117762773A/zh
Publication of CN117762773A publication Critical patent/CN117762773A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明涉及一种面向模糊测试的语句序列变异方法,属于模糊测试技术领域。针对有源码的面向数据库模糊测试的灰盒场景,本发明设计的语句序列变异方法是先把SQL文本解析为SQL语句序列,然后对语句序列执行变异操作,得到新的语句序列。该方法可以对测试用例进行更加彻底地变异,更好地挖掘种子潜力,并保证生成的测试用例的语法正确性。

Description

一种面向模糊测试的语句序列变异方法
技术领域
本发明属于模糊测试技术领域,具体涉及一种面向模糊测试的语句序列变异方法。
背景技术
数据库管理***(Database Management System,DBMS)是现代软件***的数据基础设施,为现代软件***提供数据持久化服务,其安全性至关重要。近年来,DBMS的可靠性和安全性受到工业界和学术界越来越多的关注,研究人员广泛使用模糊测试技术验证DBMS的功能和挖掘漏洞,取得了有效的进展,证明了模糊测试技术在DBMS漏洞挖掘是一种行之有效的技术方法。
模糊测试的核心思想是通过自动化或者半自动化的方法构造出海量的测试用例,然后输入到目标测试程序,以发现目标测试程序中的潜在漏洞。模糊测试的工作过程一般分成几个阶段的工作,如图1所示,分别是测试用例生成阶段、测试用例执行和监控阶段、异常分析阶段。测试用例生成阶段生成可用的测试用例,测试用例执行和监控阶段把测试用例输入给目标程序执行并监控目标程序的执行状态,判断是否触发异常,异常分析阶段对触发异常的测试用例进行分析,找出目标程序的异常位置和异常原因以方便后续进行修复。
在整个模糊测试过程中,测试用例生成阶段至关重要,生成的测试用例的好坏直接影响着整个模糊测试过程的效率。一方面,测试用例应尽可能满足待测程序对输入格式的要求,以便进入待测程序的深层路径。另一方面,测试用例应该足够的特别,以便对这些输入的处理很可能出乎程序设计者的考虑,从而导致待测程序运行失败。
数据库管理***通常在四个阶段处理SQL语句,分别是语法解析、语义验证,优化查询计划和执行查询。DBMS处理的SQL语句可以是手动输入的单个语句,也可以是多个语句组成的SQL文本,此时DBMS可以从指定的文本文件中读取SQL语句,并按文本顺序进行处理。DBMS首先进行语法解析和语义验证,语法或语义错误的SQL语句将被拒绝执行,语法和语义解析通过后,数据库管理***的查询优化器将执行查询优化,然后提供多个查询计划,最后数据库管理***的执行器将从查询计划中选择一个最佳的查询计划进行执行。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:针对有源码的面向数据库模糊测试的灰盒场景,对测试用例进行更加彻底地变异,更好地挖掘种子潜力,并保证生成的测试用例的语法正确性。
(二)技术方案
为了解决上述技术问题,本发明提供了一种面向模糊测试的语句序列变异方法,该语句序列变异方法针对有源码的面向数据库模糊测试的灰盒场景设计,先把SQL文本解析为SQL语句序列,然后对语句序列执行变异操作,得到新的语句序列,保证生成的测试用例的语法正确性。
优选地,把SQL文本解析为SQL语句序列的过程如下:接收一个SQL文本的字符串作为输入,解析后,输出解析出的SQL语句放入vector数组。
优选地,接收一个SQL文本的字符串作为输入之后,把SQL文本中的换行符替换为空字符,然后,以分号作为标识符,把整个SQL文本的字符串分割成只包含单个SQL语句的字符串,并把单个SQL语句的字符串放入vector数组中返回。
优选地,对语句序列执行变异操作时,以单独的SQL语句为单位执行变异操作,改变SQL文本中包含的语句类型和SQL文本的语句顺序,变异得到的SQL序列将依次被拼接成SQL文本,进行语法检验,通过语法检验的SQL文本将被解析成抽象语法树AST返回,供后续AST变异使用。
优选地,改变SQL文本中包含的语句类型和SQL文本的语句顺序的操作具体包括:随机打乱SQL文本中SQL语句的顺序、在SQL文本中***SQL语句、从SQL文本中删除SQL语句、在SQL文本中替换SQL语句,以及交换两个SQL文本中的某些行。
本发明还提供了一种用于实现所述方法的***。
本发明还提供了一种基于所述方法实现的模糊测试方法。
优选地,该方法为DBMS模糊测试方法。
优选地,该方法包括测试用例生成阶段、测试用例执行和监控阶段、异常分析阶段。
优选地,在测试用例生成阶段,使用语句序列变异方法来对测试用例进行变异,保证生成的测试用例语法的正确性。
(三)有益效果
针对有源码的面向数据库模糊测试的灰盒场景,本发明设计的语句序列变异方法是先把SQL文本解析为SQL语句序列,然后对语句序列执行shuffle(打乱)、delete(删除)等变异操作,得到新的语句序列。该方法可以对测试用例进行更加彻底地变异,更好地挖掘种子潜力,并保证生成的测试用例的语法正确性。
附图说明
图1为模糊测试工作流程图;
图2为本发明的语句序列变异前后文本的示例;
图3为本发明的语句序列变异操作示意图;
图4为本发明的语句序列解析算法;
图5为本发明的语句序列变异算法;
图6为本发明的语句序列变异示例。
具体实施方式
为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
对DBMS进行模糊测试的首要任务是生成语法语义正确的测试用例,这也是进行DBMS模糊测试任务的难点。AFL等流行的模糊器以位和字节为单位进行变异,这种方式是语法盲目的,很难生成有效的SQL查询。无法通过语法检查和语义检查的测试用例将无法到达DBMS的深层路径,对代码覆盖率的贡献有限,如何充分覆盖DBMS的深层代码是一个值得考虑的问题。
基于变异的以代码覆盖率为导向的灰盒DBMS模糊器通常需要一个分布良好的种子集,并且初始种子的质量严重影响甚至直接决定了模糊器的效果。针对DBMS这一对象,有效的变异方式是采用语法保持的变异,以增加生成的测试用例通过DBMS的语法解析的概率。
本发明使用语句序列变异测试用例,并保证生成的测试用例的语法正确性。语句序列变异以单独的SQL语句为单位执行变异操作,主要改变SQL文本中包含的语句类型和SQL文本的语句顺序。语句序列变异的示例如图2所示。第一列显示了一个初始的SQL文本,第二列显示了语句序列变异得到的示例。
语句序列变异的操作方式及变异效果:
当前的SQL变异方法主要侧重于改变单个语句的内在结构,几乎不涉及对文本整体的语句序列的改变,不产生新的语句序列。而不同的语句序列可能对程序的执行路径影响很大。例如,create-insert-insert-select和create-select-insert-insert两个SQL语句序列包含同样的语句类型但具有不同的语句顺序。假设select语句会对结果进行orderby排序,在进行排序操作前DBMS会判断select的数据是否为空,如果为空,则直接进行返回处理,如果不为空,则进入排序逻辑。在上述两个SQL序列中,由于后者在create语句之后直接执行select语句,结果为空,因此会直接进入返回逻辑,而前者在执行insert语句之后再执行select语句,结果不为空,会进入排序逻辑。虽然二者的语句类型和类型对应的内容都一样,但是由于语句序列不同,二者进入不同的处理分支,从而覆盖不同的代码路径。
语句序列变异主要改变SQL文本中包含的语句类型和SQL文本的语句顺序,以单独的SQL语句为单位进行变异操作。语句序列变异操作及变异效果如图3所示。
语句序列解析
进行语句序列变异操作时,SQL文本将首先被解析为以单个语句为单位的语句序列,方便后续进行变异操作。SQL文本的语句序列解析算法如图4所示。语句序列解析算法接收一个SQL文本的字符串作为输入,输出解析出的SQL语句放入vector数组。其完整过程如下:首先,把SQL文本中的换行符替换为空字符,然后,以分号作为标识符,把整个SQL文本的字符串分割成只包含单个SQL语句的字符串,并把单个SQL语句的字符串放入vector数组中返回,方便后续以语句为单位进行变异操作。
语序序列变异
语序序列变异算法如图5所示。算法接收一个SQL文本的字符串作为输入,输出变异后的所有通过语法解析的SQL文本对应的抽象语法树AST数组。算法完整过程如下:首先,采用图4所示的算法将SQL文本解析为单个SQL语句组成的SQL序列,然后,遍历使用图3中的变异操作进行语句序列变异。变异得到的SQL序列将依次被拼接成SQL文本,进行语法检验,通过语法检验的SQL文本将被解析成抽象语法树AST返回,供后续AST变异使用。
图6中演示了shuffle(打乱)SQL语句的顺序和从SQL文本中delete(删除)SQL语句这两种变异操作的效果。前者得到了一个包含新的语句序列的SQL文本,后者得到了一个包含更少SQL语句的SQL文本。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

Claims (10)

1.一种面向模糊测试的语句序列变异方法,其特征在于,该语句序列变异方法针对有源码的面向数据库模糊测试的灰盒场景设计,先把SQL文本解析为SQL语句序列,然后对语句序列执行变异操作,得到新的语句序列,保证生成的测试用例的语法正确性。
2.如权利要求1所述的方法,其特征在于,把SQL文本解析为SQL语句序列的过程如下:接收一个SQL文本的字符串作为输入,解析后,输出解析出的SQL语句放入vector数组。
3.如权利要求2所述的方法,其特征在于,接收一个SQL文本的字符串作为输入之后,把SQL文本中的换行符替换为空字符,然后,以分号作为标识符,把整个SQL文本的字符串分割成只包含单个SQL语句的字符串,并把单个SQL语句的字符串放入vector数组中返回。
4.如权利要求3所述的方法,其特征在于,对语句序列执行变异操作时,以单独的SQL语句为单位执行变异操作,改变SQL文本中包含的语句类型和SQL文本的语句顺序,变异得到的SQL序列将依次被拼接成SQL文本,进行语法检验,通过语法检验的SQL文本将被解析成抽象语法树AST返回。
5.如权利要求4所述的方法,其特征在于,改变SQL文本中包含的语句类型和SQL文本的语句顺序的操作具体包括:随机打乱SQL文本中SQL语句的顺序、在SQL文本中***SQL语句、从SQL文本中删除SQL语句、在SQL文本中替换SQL语句,以及交换两个SQL文本中的某些行。
6.一种用于实现如权利要求1至5中任一项所述方法的***。
7.一种基于如权利要求1至5中任一项所述方法实现的模糊测试方法。
8.如权利要求7所述的方法,其特征在于,该方法为DBMS模糊测试方法。
9.如权利要求8所述的方法,其特征在于,该方法包括测试用例生成阶段、测试用例执行和监控阶段、异常分析阶段。
10.如权利要求9所述的方法,其特征在于,在测试用例生成阶段,使用语句序列变异方法来对测试用例进行变异,保证生成的测试用例语法的正确性。
CN202311534978.1A 2023-11-17 2023-11-17 一种面向模糊测试的语句序列变异方法 Pending CN117762773A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311534978.1A CN117762773A (zh) 2023-11-17 2023-11-17 一种面向模糊测试的语句序列变异方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311534978.1A CN117762773A (zh) 2023-11-17 2023-11-17 一种面向模糊测试的语句序列变异方法

Publications (1)

Publication Number Publication Date
CN117762773A true CN117762773A (zh) 2024-03-26

Family

ID=90315245

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311534978.1A Pending CN117762773A (zh) 2023-11-17 2023-11-17 一种面向模糊测试的语句序列变异方法

Country Status (1)

Country Link
CN (1) CN117762773A (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019074966A (ja) * 2017-10-17 2019-05-16 株式会社日立システムズ Sql文抽出装置、sql文抽出方法及びプログラム
CN112988583A (zh) * 2021-03-16 2021-06-18 中国建设银行股份有限公司 数据库语法兼容性测试的方法和装置
CN114490353A (zh) * 2022-01-06 2022-05-13 清华大学 数据库管理***模糊测试方法、装置及电子设备
CN116701235A (zh) * 2023-08-04 2023-09-05 上海安般信息科技有限公司 一种基于语法正确变异和语义有效实例化的模糊测试方法
CN117033181A (zh) * 2023-07-13 2023-11-10 支付宝(杭州)信息技术有限公司 一种测试用例生成的方法、装置及设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019074966A (ja) * 2017-10-17 2019-05-16 株式会社日立システムズ Sql文抽出装置、sql文抽出方法及びプログラム
CN112988583A (zh) * 2021-03-16 2021-06-18 中国建设银行股份有限公司 数据库语法兼容性测试的方法和装置
CN114490353A (zh) * 2022-01-06 2022-05-13 清华大学 数据库管理***模糊测试方法、装置及电子设备
CN117033181A (zh) * 2023-07-13 2023-11-10 支付宝(杭州)信息技术有限公司 一种测试用例生成的方法、装置及设备
CN116701235A (zh) * 2023-08-04 2023-09-05 上海安般信息科技有限公司 一种基于语法正确变异和语义有效实例化的模糊测试方法

Similar Documents

Publication Publication Date Title
Joshi et al. Repair is nearly generation: Multilingual program repair with llms
US11221832B2 (en) Pruning engine
CN109885479B (zh) 基于路径记录截断的软件模糊测试方法及装置
CN111459799B (zh) 一种基于Github的软件缺陷检测模型建立、检测方法及***
US6029002A (en) Method and apparatus for analyzing computer code using weakest precondition
Wang et al. Cleaning structured event logs: A graph repair approach
CN103678110B (zh) 提供修改相关信息的方法和装置
CN109522225B (zh) 一种自动化测试断言方法及装置、测试平台及存储介质
CN113297580B (zh) 基于代码语义分析的电力信息***安全防护方法及装置
CN115309451A (zh) 代码克隆检测方法、装置、设备、存储介质及程序产品
CN108563561B (zh) 一种程序隐性约束提取方法及***
Xu et al. Dsmith: Compiler fuzzing through generative deep learning model with attention
Vagavolu et al. A mocktail of source code representations
CN116541286A (zh) 一种基于插桩和符号执行的高覆盖率测试数据生成方法
Rodriguez-Cardenas et al. Benchmarking causal study to interpret large language models for source code
Gonzalez et al. Almost Rerere: Learning to resolve conflicts in distributed projects
CN111045670A (zh) 一种二进制代码与源代码间复用关系的识别方法与装置
Kim et al. MCRepair: Multi-Chunk Program Repair via Patch Optimization with Buggy Block
Ribeiro et al. Framing program repair as code completion
CN117762773A (zh) 一种面向模糊测试的语句序列变异方法
CN116383070A (zh) 一种面向高mc/dc的符号执行方法
CN115310095A (zh) 一种区块链智能合约混合形式化验证方法及***
Yang et al. Pruning the ast with hunks to speed up tree differencing
CN117687902B (zh) 一种面向模糊测试的种子挖掘方法
CN117762415A (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