中文

通过查询计划引导测试数据库引擎

软件工程 2024-01-01 v1

摘要

数据库系统广泛用于存储和查询数据。已经提出了测试预言来发现此类系统中的逻辑错误,即导致数据库系统计算错误结果的错误。为了实现全自动测试方法,此类测试预言与测试用例生成技术配对;测试用例指数据库状态和可应用测试预言的查询。本文提出查询计划引导(QPG)概念,用于引导自动化测试走向“有趣”的测试用例。SQL和其他查询语言是声明式的。因此,为了执行查询,数据库系统将源语言中的每个运算符转换为许多可执行的所谓物理运算符之一;物理运算符树称为查询计划。我们的直觉是,通过引导测试探索多样化的查询计划,我们也探索更多有趣的行为——其中一些可能是不正确的。为此,我们提出一种变异技术,逐步对数据库状态应用有希望的变异,导致DBMS为后续查询创建多样化的查询计划。我们将方法应用于三个成熟、广泛使用且经过大量测试的数据库系统——SQLite、TiDB和CockroachDB——发现了53个独特的、先前未知的错误。我们的方法比朴素随机生成方法多执行4.85-408.48倍的独特查询计划,比代码覆盖率引导方法多7.46倍。由于大多数数据库系统(包括商业系统)都向用户公开查询计划,我们认为QPG是一种普遍适用的黑盒方法,并相信核心思想也可应用于其他上下文(例如,衡量测试套件的质量)。

关键词

引用

@article{arxiv.2312.17510,
  title  = {Testing Database Engines via Query Plan Guidance},
  author = {Jinsheng Ba and Manuel Rigger},
  journal= {arXiv preprint arXiv:2312.17510},
  year   = {2024}
}

备注

ACM SIGSOFT Distinguished Paper Award in The 45th International Conference on Software Engineering (ICSE 2023)