网易首页 > 网易号 > 正文 申请入驻

我用AI开发数据库,没想到被狠狠地教育了......

0
分享至

我在之前的文章中介绍过SQLite,这是个嵌入式数据库,也是世界上最流行的数据库。


(详情参见这篇文章:)

有一天我突发奇想:既然是嵌入式数据库,那应该不复杂,能不能用AI写一个?

说干就干,我把SQLite的架构文档发给了AI,让它根据现有架构来实现。

你别说,AI实现得相当不错,把Tokenizer,Parser,Code Generator,Bytecode Engine这些核心的概念都考虑到了,代码写得也不错,着实是让我吃惊。


但是,当我看到SQLite的测试的时候,我就知道,现在的AI,想写出SQLite级别的代码,恐怕是做梦。

因为SQLite简直不是一个软件,而是个怪物

截至 3.42.0 版本(2023-05-16),SQLite 库本身大约包含15.58万行C代码。

而测试代码和测试脚本脚本加起来一共有9205万行,是核心代码的 590 倍!

不是5倍,50倍,而是590倍

测试的目标不但要覆盖“功能”,还要覆盖分支,覆盖异常,覆盖现实世界的灾难。

SQLite设立了4套“互不信任”的测试体系,避免同一思路的盲区。

0 1

“保命”测试

首先,它用TCL写了一套“日常保命测试”,测试脚本有1390个文件,一共23.2M,包含了51,445 个不同的测试用例,参数化执行,会跑出数百万测试。

开发者日常主要依赖一个非常快的、几分钟就能跑完的子集,用于每次提交前自己检查。

0 2

“彻底”测试

SQLite有一套私有的C语言测试系统(名称为TH3),为 SQLite 核心库提供 100% 分支覆盖率。

这个数字是非常恐怖的,大家都知道覆盖所有分支很麻烦,例如这行代码:

}

想要达到100%分支覆盖,至少需要3个测试用例:

(1) a<=b

(2) a>b 且 c==25

(3) a>b 且 c!=25

除了分支覆盖,SQLite还是是实现了100% MC/DC 覆盖率。

MC/DC(Modified Condition/Decision Coverage)是航空、核工业级别的测试标准。也就是说SQLite 把一个嵌入式数据库,按飞控软件的标准来测。

TH3有个非常重要的特点,就是不靠“后门”,只是用SQLite公开的API接口,完全模拟用户的行为。

TH3 包含大约 76.9MB、100万行C 代码,实现了 50,362 个不同测试用例。

在发布之前的一个长时间压力测试中,会执行2.485亿次测试。

0 3

对标测试

这是一个裁判性测试,它将大量 SQL 语句同时运行在 SQLite 和其他4个数据库引擎(PostgreSQL、MySQL、SQL Server、Oracle 10g )上,并比较结果是否一致。


换句话说,SQLite 不只要自洽,还要和“行业共识”对齐。

这个测试共运行 720 万条查询,测试数据总量 1.12GB。

0 4

模糊测试

模糊测试通过向SQLite提供无效、意外或者随机数据来测试它的健壮性。

例如这样的SQL语言:

  CAST('999999999999999999999999' AS INTEGER) < 0;

它完全符合SQL语法,但是几乎不可能是人写的,因为它精准命中了“超大内存申请”,“整数溢出”,“负索引”等极端情况。

更残酷的是,模糊测试还会破坏数据库文件(.db),对它做随机位翻转、截断、重复、拼接。

例如,这是原始的数据文件(简化):

[Header][Page1][Page2][Page3]

模糊测试工具把它改成:

[Header][Page1][Page1][乱码][Page3][Page3]

然后尝试去打开它:

sqlite3_open("mutated.db", &db);

SQLite要做到不崩溃,不越界,不死循环,要么报错,要么优雅失败。

最后,模糊测试还会开关所有的宏定义,对不同的编译器设置不同的编译优化级别,让同一条SQL在不同的情况下疯狂运行,疯狂地鞭打SQLite,折磨SQLite,直到它漏出所有的破绽。

由于SQLite在嵌入式领域非常流行,手机、路由器、车载、工业设备等在大量使用它,所以它特别注重对异常情况的处理。

内存不足测试

在服务器和工作站上,内存分配malloc()几乎不会失败,在嵌入式设备上,OOM就太常见了,SQLite必须得能优雅的处理OOM错误。

SQLite的测试框架(自己写的)可以插入自定义的可控的malloc函数,设置成在调用一定次数后内存分配失败,这样就可以在循环中执行SQLite操作,确保能处理OOM错误。

I/O错误测试

磁盘空间不足、磁盘硬件故障、网络中断、SQL操作过程中发生的系统配置或权限更改,或其他硬件或操作系统故障......无论原因如何,SQLite 必须能够正确响应这些错误。

测试的方法和OOM测试类似,都是模拟I/O错误,然后检查SQLite能否正确响应

崩溃测试

应用系统崩溃,操作系统崩溃,数据库更新过程中断电,SQLite都不能发生故障。

这也是SQLite“原子提交”能被信任的原因。

复合失效测试

先发生I/O错误,然后出现OOM,再搞一个崩溃..... 保证程序还能正常运行。

SQLite的这些测试,它的数量、完善程度和复杂程度,看起来真是让人脊背发凉。

这得付出多年的努力,经历多少事故才能写出来啊!

被这样测试保护的软件,代码质量可以说是固若金汤了。

AI能写出这样高质量的SQLite吗?

写个玩具版是可以的,但是想要复刻是万万不行的。

SQLite这种“高质量”不是体现在代码本身,而是体现在几十年积累的测试体系、失败经验和工程纪律上。

AI 可以帮助我们写实现、补测试、找 bug,但无法凭空生成那些来自真实事故、长期演化出来的异常场景和验证策略。

换句话说,AI 能参与写 SQLite,但还不能“独立孕育”一个 SQLite。

SQLite只是一个嵌入式数据库,就已经恐怖如斯了,那些更加复杂的数据库会怎么样呢?

欢迎了解详情的朋友在评论区留言!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
都别玩了!美媒预测快船将用极端手段针对伦纳德,恶人终有恶报?

都别玩了!美媒预测快船将用极端手段针对伦纳德,恶人终有恶报?

你的篮球频道
2026-09-11 07:53:08
不敌法国队,中国女篮无缘世界杯四强

不敌法国队,中国女篮无缘世界杯四强

界面新闻
2026-09-10 22:13:09
章泽天采访何超琼,脖间“丝巾”价值近80万!网友:贫穷限制想象

章泽天采访何超琼,脖间“丝巾”价值近80万!网友:贫穷限制想象

老吴教育课堂
2026-09-08 10:40:11
天赋碾压拉什福德!卡里克再造亿元巨星!曼联瑰宝一战封神

天赋碾压拉什福德!卡里克再造亿元巨星!曼联瑰宝一战封神

澜归序
2026-09-11 08:34:10
中、澳女篮全出局 世界杯4强全部产生 半决赛对阵 附赛程

中、澳女篮全出局 世界杯4强全部产生 半决赛对阵 附赛程

小彭美识
2026-09-11 05:53:45
刘翔为什么可以硬钢体育总局?

刘翔为什么可以硬钢体育总局?

十柱
2026-09-10 14:36:47
麒麟9050 Pro首拆曝光!“韬定律”技术细节首次公开

麒麟9050 Pro首拆曝光!“韬定律”技术细节首次公开

科技富能量官方
2026-09-09 19:02:44
1935年红军成功拿下腊子口,偶然发现一处仓库,当将士们踏入仓库内部,眼前的景象让全军将士纷纷落泪

1935年红军成功拿下腊子口,偶然发现一处仓库,当将士们踏入仓库内部,眼前的景象让全军将士纷纷落泪

磊子讲史
2026-09-08 17:30:43
一张配料表要了老字号的命!饮料减产900万吨,营收反倒暴涨17.4%

一张配料表要了老字号的命!饮料减产900万吨,营收反倒暴涨17.4%

青眼财经
2026-09-11 08:00:46
欧冠首轮18场全部战罢,最新积分榜排名及第二轮对阵时间

欧冠首轮18场全部战罢,最新积分榜排名及第二轮对阵时间

宝哥精彩赛事
2026-09-11 06:07:47
雷军余承东互怼,网友:要不先查查小米内部有没有内鬼?

雷军余承东互怼,网友:要不先查查小米内部有没有内鬼?

坠入二次元的海洋
2026-09-11 11:10:25
高雄市长最新民调曝光:柯志恩支持度43.8%,微幅领先赖瑞隆

高雄市长最新民调曝光:柯志恩支持度43.8%,微幅领先赖瑞隆

海峡导报社
2026-09-11 11:02:04
郭德纲又一后果来了!中央广播电视台“云听”下架了郭德纲的所有作品!这一次,评论区都在批评郭德纲

郭德纲又一后果来了!中央广播电视台“云听”下架了郭德纲的所有作品!这一次,评论区都在批评郭德纲

谭谈社会
2026-09-10 22:44:10
不去了,9月9日,韩国外交部对外表态,韩国政府决定不参加将于12日在日本新潟县佐渡市举办的佐渡金山强征劳工受害者悼念仪式

不去了,9月9日,韩国外交部对外表态,韩国政府决定不参加将于12日在日本新潟县佐渡市举办的佐渡金山强征劳工受害者悼念仪式

回京历史梦
2026-09-10 14:08:17
中国女篮出局,苏群呼吁宫鲁鸣召回一人:系统训练后,能力没问题

中国女篮出局,苏群呼吁宫鲁鸣召回一人:系统训练后,能力没问题

南海浪花
2026-09-11 11:16:15
耐克全球仅五份终身合同:为什么刘翔能够位列其中?

耐克全球仅五份终身合同:为什么刘翔能够位列其中?

乒乒乓乓体育
2026-08-30 18:27:37
九月下旬开始三大生肖逢难必过,发财势头难挡,日子富贵有余钱!

九月下旬开始三大生肖逢难必过,发财势头难挡,日子富贵有余钱!

情感事聊
2026-09-11 10:41:54
韩旭距离创历史仅差1篮板 场均18.8分赛事第一

韩旭距离创历史仅差1篮板 场均18.8分赛事第一

体坛周报
2026-09-10 22:43:09
苹果抢了Duo的名字,多邻国顺走了苹果的流量

苹果抢了Duo的名字,多邻国顺走了苹果的流量

经济观察报
2026-09-10 19:32:11
被撤销的婚姻:携带无症状致病基因是否属于患有重大疾病?

被撤销的婚姻:携带无症状致病基因是否属于患有重大疾病?

新京报
2026-09-11 08:40:12
2026-09-11 12:31:00
码农翻身 incentive-icons
码农翻身
有趣且硬核的技术文章
309文章数 671关注度
往期回顾 全部

科技要闻

罗永浩连用7个“抄的”吐槽苹果折叠屏

头条要闻

复旦女硕士国外旅游时被蜱虫叮咬染重症 家属全网求助

头条要闻

复旦女硕士国外旅游时被蜱虫叮咬染重症 家属全网求助

体育要闻

16岁的国产小库里,还有多少功课要做

娱乐要闻

17岁拿下世界第一,还被亲妈吐槽?

财经要闻

向松祚:年轻人不必过早买房

汽车要闻

买菜车也有小乐趣 风云T7不止是台合格家用SUV

态度原创

旅游
亲子
家居
公开课
军事航空

旅游要闻

挖到泰安隐秘绿野!现实版宫崎骏世界,这里简直是一座动画感草原

亲子要闻

去幼儿园已经不哭了,说爸爸去龙口是聊天去了,这孩子真够逗的!

家居要闻

2026建博会(广州) 公装联探展交流活动

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

中东“两线战火”同时升级

无障碍浏览 进入关怀版