System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于覆盖率梯度回退优化的数据库模糊测试方法技术_技高网
当前位置: 首页 > 专利查询>湖南大学专利>正文

一种基于覆盖率梯度回退优化的数据库模糊测试方法技术

技术编号:44890425 阅读:9 留言:0更新日期:2025-04-08 00:28
本发明专利技术公开了一种数据库测试方法及系统。通过对数据库进行模糊测试,不断输SQL语句,观察覆盖率的变化。记录覆盖率上升的梯度,当SQL持续变异但覆盖率保持稳定时,说明该SQL的变异无法进一步深入代码逻辑。此时回退到覆盖率上升梯度最高的语句以及当时的数据库状态,重新开始变异,继续尝试探索更高的代码覆盖率。该方法能够有效提高数据库测试的效率和代码覆盖率,为数据库的稳定性和可靠性提供有力保障。

【技术实现步骤摘要】

本专利技术涉及数据库测试,具体涉及一种能够提高测试效率和代码覆盖率的数据库模糊测试方法。


技术介绍

0、技术背景

1、在当今数字化时代,数据库作为信息存储和管理的核心组件,在各个领域都有着广泛的应用,从企业的业务运营到科研机构的数据处理,从互联网服务到金融交易系统等,其重要性不言而喻。

2、sql(structured query language),即结构化查询语言,是一种用于管理关系型数据库的标准语言。它允许用户执行各种操作,如查询数据、插入新记录、更新现有数据以及删除不需要的数据等。数据库则是按照数据结构来组织、存储和管理数据的仓库。关系型数据库以表为单位存储数据,表中的行代表记录,列代表属性,通过sql语句可以方便地对这些数据进行操作和管理。不同的数据库系统(如mysql、oracle、sql server等)虽然在功能和性能上有所差异,但都遵循sql标准来实现数据的处理。

3、模糊测试是一种软件测试技术,它通过向目标系统或应用程序输入大量的随机或半随机数据,以发现潜在的漏洞和错误。其基本原理是利用自动化工具生成各种可能的输入数据,然后观察目标系统对这些输入的响应。如果目标系统出现异常行为,如崩溃、错误输出或产生不符合预期的结果,就可能表明存在安全漏洞或功能缺陷。在数据库测试中,模糊测试可以帮助发现数据库在处理各种复杂和异常数据情况下的稳定性和可靠性问题。

4、在软件测试中,覆盖率是衡量测试完整性的一个关键指标。对于数据库测试而言,覆盖率通常指的是测试用例对数据库代码逻辑的执行覆盖程度。具体来说,它包括语句覆盖率、分支覆盖率、条件覆盖率等多个方面。高代码覆盖率意味着测试用例能够触及程序的更多部分,更有可能发现潜在的漏洞和错误。

5、随着数据库应用场景的日益复杂和多样化,数据库面临着各种潜在的风险和挑战。一方面,数据库需要处理来自不同来源、不同格式的数据,其中可能包含一些不符合常规规范或预期的数据。例如,在网络应用中,用户输入的数据可能存在格式错误、恶意注入等问题,如果数据库不能正确处理这些异常数据,可能会导致数据泄露、系统崩溃等严重后果。另一方面,数据库的代码逻辑可能存在一些隐藏的漏洞,这些漏洞在正常的使用场景下可能难以被发现,但在面对特殊或异常数据时就可能暴露出来。通过模糊测试,可以模拟各种复杂和异常的情况,对数据库的代码逻辑进行全面的考验,从而提高数据库的质量和安全性。

6、对数据库进行模糊测试时提高覆盖率意味着测试用例能够更全面地执行数据库中的代码路径,从而更有可能发现潜在的问题。提高覆盖率的好处是多方面的。首先,能够更全面地检测数据库中的错误和缺陷,减少在实际应用中出现故障的风险。例如,如果某个代码分支在测试中没有被覆盖到,那么该分支中可能存在的错误就无法被发现,而在实际运行时如果遇到相应的情况,就可能导致系统出现异常。其次,高覆盖率可以增强对数据库稳定性和可靠性的信心。当覆盖率达到较高水平时,说明数据库在各种情况下的运行情况都得到了充分的测试和验证,能够更好地应对实际使用中的各种场景和需求。最后,提高覆盖率有助于优化数据库的性能。通过全面的测试,可以发现数据库在某些情况下的性能瓶颈,从而进行针对性的优化和改进,提高数据库的整体运行效率。

7、当前针对数据库系统的模糊测试存在多种方法。例如squirrel,它基于覆盖率引导来判定变异的方向,将原始的sql语句转换与抽象为中间表示,使得可以以更为结构化和规范化的形式进行变异操作,提升了变异生成sql语句的准确性,从而提高测试的有效性;griffin作为基于变异的无语法数据库模糊测试工具,将数据库系统的状态总结为元数据图,这是一种轻量级的数据结构,用于描述元数据和语句之间的依赖关系,基于这些图,重新排列语句并使用元数据引导的替换来纠正语义错误,可适配更多数据库系统;sqlright则在squirrel基础上改良,结合了基于覆盖率的引导、面向有效性的突变以及预言机来专注于逻辑错误检测。这些方法在一定程度上强化了数据库模糊测试效能,然而,它们在对sql语句持续变异一段时间后,往往会陷入困境。具体表现为随着变异的进行,不可避免的在某一分支陷入瓶颈或是已经探索整个分支但难以跳转至新的分支,从而体现出覆盖率无法进一步提升,限制了对数据库系统更全面、深入的漏洞检测与安全评估。为了探索新的代码分支,往往需要重新开始测试流程,也造成时间和资源上的浪费。

8、本专利技术提出的数据库测试方法针对传统方法的不足进行了改进。在测试过程中,同样基于模糊测试向数据库输入sql语句并关注覆盖率变化。但当sql持续变异而覆盖率保持稳定时,本方法不是简单地停止和重新开始,而是回退到覆盖率上升梯度最高的语句以及当时的数据库状态。这样做有两个重要优势:一方面,充分利用了前期的变异过程,而不是完全抛弃之前的工作重新开始,减少时间和资源的浪费。另一方面,因为覆盖率上升梯度最高的点往往意味着在此基础上进行进一步变异更有可能探索新的代码分支,发现新的问题和路径,从覆盖率变化梯度最大的地方回退继续测试,增加了探索到更深层次代码逻辑的可能性。相比传统方法的盲目重新开始,本方法更具针对性和高效性,能够更有效地提高测试效率和代码覆盖率,从而为数据库的稳定性和可靠性提供更有力的保障。


技术实现思路

1、本专利技术申请提供了利用覆盖率梯度进行回退优化的数据库模糊测试方法,用以提升对数据库进行模糊测试的代码覆盖率,为数据库的稳定性和可靠性提供更有力的保障。具体技术方案如下:

2、1.测试准备阶段

3、在准备阶段,需要对数据库系统进行插桩标编译,编译完成后,准备一些基础sql语句作为测试的种子语句,并将模糊测试引擎与数据库系统进行连接,准备开始进行测试。

4、(1)对数据库进行插桩编译;

5、插桩编译是一种在程序编译过程中插入额外代码的技术。这些桩代码可以用于多种目的,例如收集程序运行时的信息,包括但不限于函数调用的次数、变量的值变化情况、程序执行路径等。在编译阶段,编译器会按照预先定义的规则和要求,在原始程序代码的特定位置插入桩代码。这些位置可以是函数的入口点、出口点、关键的分支语句位置等,对于数据库系统而言,插桩编译可以在数据库操作相关的代码(如sql语句执行函数、数据存储和读取函数等)中插入代码,这些桩代码可以在程序运行时记录哪些代码块被执行,哪些没有被执行。对于模糊测试来说,当运行模糊测试用例时,插桩后的程序可以收集代码执行路径的信息,从而确定代码覆盖率。

6、(2)准备测试种子sql;

7、预先准备一些插入、查询、删除等相关等sql语句,用作一次模糊测试的种子sql,模糊测试系统会在此基础上进行变异。

8、种子的特性和结构会影响变异的方向和结果,从而引导测试朝着更有意义和更可能发现漏洞的方向进行。通过选择特定的种子,可以有针对性地对目标系统中与该种子相关的功能模块进行深入测试。

9、(3)建立数据库连接;

10本文档来自技高网...

【技术保护点】

1.一种基于覆盖率梯度回退优化的数据库模糊测试方法,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,所述监测覆盖率变化,记录覆盖率梯度以及对应状态信息,包括:

3.根据权利要求3所述的方法,其特征在于,所述更新覆盖率梯度的最大值,包括:

4.根据权利要求3所述的方法,其特征在于,所述对应状态信息,包括:

5.根据权利要求1所述的方法,其特征在于,所述回退条件,包括:

6.根据权利要求1所述的方法,其特征在于,所述数据库状态以及测试用例回退至指定位置,包括:

7.根据权利要求1所述的方法,其特征在于,所述重新开始模糊测试,包括:

【技术特征摘要】

1.一种基于覆盖率梯度回退优化的数据库模糊测试方法,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,所述监测覆盖率变化,记录覆盖率梯度以及对应状态信息,包括:

3.根据权利要求3所述的方法,其特征在于,所述更新覆盖率梯度的最大值,包括:

4.根据权利要求3所述...

【专利技术属性】
技术研发人员:李曾一陈浩孙建华
申请(专利权)人:湖南大学
类型:发明
国别省市:

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

1