TwKit
正在载入
TwKit

数据库有一类错误不会报错:查询正常结束,却少返回了一行。差分模糊测试用“同一输入,两份结果”来找这类问题,不必先为每条随机 SQL 手写标准答案。 做法是生… · @BaiBtw · TwKit

@BaiBtw

数据库有一类错误不会报错:查询正常结束,却少返回了一行。差分模糊测试用“同一输入,两份结果”来找这类问题,不必先为每条随机 SQL 手写标准答案。 做法是生成查询,交给本应行为一致的实现,再比较结果。可以把同一条 SQL 分别放到 PostgreSQL、SQLite、DuckDB 中执行;也可以对比同一引擎的新旧版本;还可以在同一引擎里开启和关闭某项优化。优化可以改变执行方式和速度,不应改变查询的含义。 这三种比较要分清边界。跨引擎时,查询必须处在双方共有、语义一致的范围内。新旧版本结果不同,可能是回归,也可能是预期的行为变更。发现差异之后,还要把触发问题的查询和数据缩小成便于复现的用例,再判断是实现缺陷还是语义差别。 两边不一致是调查线索,不能直接认定某个引擎有 bug。它尤其适合检查查询优化,以及验证一个新数据库是否兼容既有实现。

曝光 9 · 评论 0 · 点赞 0 · 书签 0

查看原帖