国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

我用AI開(kāi)發(fā)數(shù)據(jù)庫(kù),沒(méi)想到被狠狠地教育了......

0
分享至

我在之前的文章中介紹過(guò)SQLite,這是個(gè)嵌入式數(shù)據(jù)庫(kù),也是世界上最流行的數(shù)據(jù)庫(kù)。


(詳情參見(jiàn)這篇文章:)

有一天我突發(fā)奇想:既然是嵌入式數(shù)據(jù)庫(kù),那應(yīng)該不復(fù)雜,能不能用AI寫(xiě)一個(gè)?

說(shuō)干就干,我把SQLite的架構(gòu)文檔發(fā)給了AI,讓它根據(jù)現(xiàn)有架構(gòu)來(lái)實(shí)現(xiàn)。

你別說(shuō),AI實(shí)現(xiàn)得相當(dāng)不錯(cuò),把Tokenizer,Parser,Code Generator,Bytecode Engine這些核心的概念都考慮到了,代碼寫(xiě)得也不錯(cuò),著實(shí)是讓我吃驚。


但是,當(dāng)我看到SQLite的測(cè)試的時(shí)候,我就知道,現(xiàn)在的AI,想寫(xiě)出SQLite級(jí)別的代碼,恐怕是做夢(mèng)。

因?yàn)?strong>SQLite簡(jiǎn)直不是一個(gè)軟件,而是個(gè)怪物。

截至 3.42.0 版本(2023-05-16),SQLite 庫(kù)本身大約包含15.58萬(wàn)行C代碼。

而測(cè)試代碼和測(cè)試腳本腳本加起來(lái)一共有9205萬(wàn)行,是核心代碼的 590 倍!

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

測(cè)試的目標(biāo)不但要覆蓋“功能”,還要覆蓋分支,覆蓋異常,覆蓋現(xiàn)實(shí)世界的災(zāi)難。

SQLite設(shè)立了4套“互不信任”的測(cè)試體系,避免同一思路的盲區(qū)。

0 1

“保命”測(cè)試

首先,它用TCL寫(xiě)了一套“日常保命測(cè)試”,測(cè)試腳本有1390個(gè)文件,一共23.2M,包含了51,445 個(gè)不同的測(cè)試用例,參數(shù)化執(zhí)行,會(huì)跑出數(shù)百萬(wàn)測(cè)試。

開(kāi)發(fā)者日常主要依賴一個(gè)非常快的、幾分鐘就能跑完的子集,用于每次提交前自己檢查。

0 2

“徹底”測(cè)試

SQLite有一套私有的C語(yǔ)言測(cè)試系統(tǒng)(名稱為T(mén)H3),為 SQLite 核心庫(kù)提供 100% 分支覆蓋率。

這個(gè)數(shù)字是非??植赖模蠹叶贾栏采w所有分支很麻煩,例如這行代碼:

}

想要達(dá)到100%分支覆蓋,至少需要3個(gè)測(cè)試用例:

(1) a<=b

(2) a>b 且 c==25

(3) a>b 且 c!=25

除了分支覆蓋,SQLite還是是實(shí)現(xiàn)了100% MC/DC 覆蓋率。

MC/DC(Modified Condition/Decision Coverage)是航空、核工業(yè)級(jí)別的測(cè)試標(biāo)準(zhǔn)。也就是說(shuō)SQLite 把一個(gè)嵌入式數(shù)據(jù)庫(kù),按飛控軟件的標(biāo)準(zhǔn)來(lái)測(cè)。

TH3有個(gè)非常重要的特點(diǎn),就是不靠“后門(mén)”,只是用SQLite公開(kāi)的API接口,完全模擬用戶的行為。

TH3 包含大約 76.9MB、100萬(wàn)行C 代碼,實(shí)現(xiàn)了 50,362 個(gè)不同測(cè)試用例。

在發(fā)布之前的一個(gè)長(zhǎng)時(shí)間壓力測(cè)試中,會(huì)執(zhí)行2.485億次測(cè)試。

0 3

對(duì)標(biāo)測(cè)試

這是一個(gè)裁判性測(cè)試,它將大量 SQL 語(yǔ)句同時(shí)運(yùn)行在 SQLite 和其他4個(gè)數(shù)據(jù)庫(kù)引擎(PostgreSQL、MySQL、SQL Server、Oracle 10g )上,并比較結(jié)果是否一致。


換句話說(shuō),SQLite 不只要自洽,還要和“行業(yè)共識(shí)”對(duì)齊。

這個(gè)測(cè)試共運(yùn)行 720 萬(wàn)條查詢,測(cè)試數(shù)據(jù)總量 1.12GB。

0 4

模糊測(cè)試

模糊測(cè)試通過(guò)向SQLite提供無(wú)效、意外或者隨機(jī)數(shù)據(jù)來(lái)測(cè)試它的健壯性。

例如這樣的SQL語(yǔ)言:

  CAST('999999999999999999999999' AS INTEGER) < 0;

它完全符合SQL語(yǔ)法,但是幾乎不可能是人寫(xiě)的,因?yàn)樗珳?zhǔn)命中了“超大內(nèi)存申請(qǐng)”,“整數(shù)溢出”,“負(fù)索引”等極端情況。

更殘酷的是,模糊測(cè)試還會(huì)破壞數(shù)據(jù)庫(kù)文件(.db),對(duì)它做隨機(jī)位翻轉(zhuǎn)、截?cái)?、重?fù)、拼接。

例如,這是原始的數(shù)據(jù)文件(簡(jiǎn)化):

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

模糊測(cè)試工具把它改成:

[Header][Page1][Page1][亂碼][Page3][Page3]

然后嘗試去打開(kāi)它:

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

SQLite要做到不崩潰,不越界,不死循環(huán),要么報(bào)錯(cuò),要么優(yōu)雅失敗。

最后,模糊測(cè)試還會(huì)開(kāi)關(guān)所有的宏定義,對(duì)不同的編譯器設(shè)置不同的編譯優(yōu)化級(jí)別,讓同一條SQL在不同的情況下瘋狂運(yùn)行,瘋狂地鞭打SQLite,折磨SQLite,直到它漏出所有的破綻。

由于SQLite在嵌入式領(lǐng)域非常流行,手機(jī)、路由器、車(chē)載、工業(yè)設(shè)備等在大量使用它,所以它特別注重對(duì)異常情況的處理。

內(nèi)存不足測(cè)試

在服務(wù)器和工作站上,內(nèi)存分配malloc()幾乎不會(huì)失敗,在嵌入式設(shè)備上,OOM就太常見(jiàn)了,SQLite必須得能優(yōu)雅的處理OOM錯(cuò)誤。

SQLite的測(cè)試框架(自己寫(xiě)的)可以插入自定義的可控的malloc函數(shù),設(shè)置成在調(diào)用一定次數(shù)后內(nèi)存分配失敗,這樣就可以在循環(huán)中執(zhí)行SQLite操作,確保能處理OOM錯(cuò)誤。

I/O錯(cuò)誤測(cè)試

磁盤(pán)空間不足、磁盤(pán)硬件故障、網(wǎng)絡(luò)中斷、SQL操作過(guò)程中發(fā)生的系統(tǒng)配置或權(quán)限更改,或其他硬件或操作系統(tǒng)故障......無(wú)論原因如何,SQLite 必須能夠正確響應(yīng)這些錯(cuò)誤。

測(cè)試的方法和OOM測(cè)試類似,都是模擬I/O錯(cuò)誤,然后檢查SQLite能否正確響應(yīng)

崩潰測(cè)試

應(yīng)用系統(tǒng)崩潰,操作系統(tǒng)崩潰,數(shù)據(jù)庫(kù)更新過(guò)程中斷電,SQLite都不能發(fā)生故障。

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

復(fù)合失效測(cè)試

先發(fā)生I/O錯(cuò)誤,然后出現(xiàn)OOM,再搞一個(gè)崩潰..... 保證程序還能正常運(yùn)行。

SQLite的這些測(cè)試,它的數(shù)量、完善程度和復(fù)雜程度,看起來(lái)真是讓人脊背發(fā)涼。

這得付出多年的努力,經(jīng)歷多少事故才能寫(xiě)出來(lái)??!

被這樣測(cè)試保護(hù)的軟件,代碼質(zhì)量可以說(shuō)是固若金湯了。

AI能寫(xiě)出這樣高質(zhì)量的SQLite嗎?

寫(xiě)個(gè)玩具版是可以的,但是想要復(fù)刻是萬(wàn)萬(wàn)不行的。

SQLite這種“高質(zhì)量”不是體現(xiàn)在代碼本身,而是體現(xiàn)在幾十年積累的測(cè)試體系、失敗經(jīng)驗(yàn)和工程紀(jì)律上。

AI 可以幫助我們寫(xiě)實(shí)現(xiàn)、補(bǔ)測(cè)試、找 bug,但無(wú)法憑空生成那些來(lái)自真實(shí)事故、長(zhǎng)期演化出來(lái)的異常場(chǎng)景和驗(yàn)證策略。

換句話說(shuō),AI 能參與寫(xiě) SQLite,但還不能“獨(dú)立孕育”一個(gè) SQLite。

SQLite只是一個(gè)嵌入式數(shù)據(jù)庫(kù),就已經(jīng)恐怖如斯了,那些更加復(fù)雜的數(shù)據(jù)庫(kù)會(huì)怎么樣呢?

歡迎了解詳情的朋友在評(píng)論區(qū)留言!

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

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.

相關(guān)推薦
熱點(diǎn)推薦
億萬(wàn)國(guó)人破防!90歲院士平靜宣布,中國(guó)導(dǎo)彈從此沒(méi)有任何死角

億萬(wàn)國(guó)人破防!90歲院士平靜宣布,中國(guó)導(dǎo)彈從此沒(méi)有任何死角

策略述
2026-03-03 18:16:39
發(fā)現(xiàn)一個(gè)奇怪的現(xiàn)象:兄弟姐妹中最大方的那個(gè),往往日子過(guò)得更好,孩子也更優(yōu)秀

發(fā)現(xiàn)一個(gè)奇怪的現(xiàn)象:兄弟姐妹中最大方的那個(gè),往往日子過(guò)得更好,孩子也更優(yōu)秀

十點(diǎn)讀書(shū)
2026-03-04 12:19:08
臺(tái)積電創(chuàng)辦人張忠謀:如果想扼殺中國(guó)大陸,中國(guó)大陸真的無(wú)能為力

臺(tái)積電創(chuàng)辦人張忠謀:如果想扼殺中國(guó)大陸,中國(guó)大陸真的無(wú)能為力

混沌錄
2026-02-27 21:29:05
威廉王子高調(diào)表達(dá)愛(ài)意,親自發(fā)布凱特新照,全家祝她生日快樂(lè)!

威廉王子高調(diào)表達(dá)愛(ài)意,親自發(fā)布凱特新照,全家祝她生日快樂(lè)!

趣味萌寵的日常
2026-03-04 20:25:11
丁俊暉的母親陳習(xí)娟:辛苦撫養(yǎng)兒子成才,最終還沒(méi)享福就去世了

丁俊暉的母親陳習(xí)娟:辛苦撫養(yǎng)兒子成才,最終還沒(méi)享福就去世了

老吳教育課堂
2026-03-02 12:53:19
小S復(fù)出首秀翻車(chē)!撿漏大S代言,臺(tái)詞內(nèi)涵馬筱梅惹眾怒,吃相太難看

小S復(fù)出首秀翻車(chē)!撿漏大S代言,臺(tái)詞內(nèi)涵馬筱梅惹眾怒,吃相太難看

八卦王者
2026-03-03 21:50:42
毛利率超70%,直追愛(ài)馬仕!剛剛,這家昆山公司上市了

毛利率超70%,直追愛(ài)馬仕!剛剛,這家昆山公司上市了

創(chuàng)客公社-江蘇第一創(chuàng)投媒體
2026-03-04 10:39:42
33中5!格林成太陽(yáng)累贅,排隊(duì)給火箭道歉,斯通下了一盤(pán)大棋

33中5!格林成太陽(yáng)累贅,排隊(duì)給火箭道歉,斯通下了一盤(pán)大棋

巴叔GO聊體育
2026-03-04 12:35:42
俄羅斯在烏克蘭遭遇2023年11月以來(lái)最慘單月

俄羅斯在烏克蘭遭遇2023年11月以來(lái)最慘單月

刀刀觀察
2026-03-04 00:12:07
30多歲大叔揭示撩撥年輕姑娘的秘密,網(wǎng)友驚呼:真是老狐貍!

30多歲大叔揭示撩撥年輕姑娘的秘密,網(wǎng)友驚呼:真是老狐貍!

特約前排觀眾
2026-02-18 00:15:03
【2026.3.4】爆姐的飯后爆料:生命不止,爆料不息!

【2026.3.4】爆姐的飯后爆料:生命不止,爆料不息!

娛樂(lè)真爆姐
2026-03-04 23:26:31
《生化危機(jī)9:安魂曲》DLC爆料!已進(jìn)入后期開(kāi)發(fā)

《生化危機(jī)9:安魂曲》DLC爆料!已進(jìn)入后期開(kāi)發(fā)

3DM游戲
2026-03-04 09:18:05
科威特飛行員真牛!4名陣亡美軍身份曝光,特朗普不滿英國(guó)西班牙

科威特飛行員真牛!4名陣亡美軍身份曝光,特朗普不滿英國(guó)西班牙

鷹眼Defence
2026-03-04 18:38:18
機(jī)關(guān)事業(yè)單位退休:40號(hào)文件明確待遇,工齡核算別出錯(cuò)

機(jī)關(guān)事業(yè)單位退休:40號(hào)文件明確待遇,工齡核算別出錯(cuò)

水泥土的搞笑
2026-03-05 00:51:47
伊朗伊斯蘭革命衛(wèi)隊(duì):向美軍航母發(fā)射了4枚巡航導(dǎo)彈,襲擊發(fā)生后,這艘航母逃往印度洋東南部

伊朗伊斯蘭革命衛(wèi)隊(duì):向美軍航母發(fā)射了4枚巡航導(dǎo)彈,襲擊發(fā)生后,這艘航母逃往印度洋東南部

極目新聞
2026-03-04 08:20:18
復(fù)制粘貼,青島一家三口街頭散步“齊頭并進(jìn)”,爸爸兒子女兒身高統(tǒng)一1米82;網(wǎng)友:建議每個(gè)人分我5厘米

復(fù)制粘貼,青島一家三口街頭散步“齊頭并進(jìn)”,爸爸兒子女兒身高統(tǒng)一1米82;網(wǎng)友:建議每個(gè)人分我5厘米

臺(tái)州交通廣播
2026-03-04 20:20:50
這跟不穿有啥區(qū)別??jī)?nèi)褲外露、劉雯半個(gè)腚都光著,新時(shí)尚真看不懂

這跟不穿有啥區(qū)別??jī)?nèi)褲外露、劉雯半個(gè)腚都光著,新時(shí)尚真看不懂

嫹筆牂牂
2026-03-03 07:06:44
李小璐寫(xiě)真生圖高清

李小璐寫(xiě)真生圖高清

翩翩明星
2025-11-14 09:39:36
賈平凹影響《少婦百潔》?辣眼睛

賈平凹影響《少婦百潔》?辣眼睛

不正確
2026-03-02 14:39:52
無(wú)語(yǔ)!平頂山母女遺產(chǎn)案爆出操作猛如虎,舅舅舅媽吃絕戶!

無(wú)語(yǔ)!平頂山母女遺產(chǎn)案爆出操作猛如虎,舅舅舅媽吃絕戶!

社會(huì)日日鮮
2026-03-04 06:58:18
2026-03-05 02:20:49
碼農(nóng)翻身 incentive-icons
碼農(nóng)翻身
有趣且硬核的技術(shù)文章
231文章數(shù) 631關(guān)注度
往期回顧 全部

科技要聞

多位核心離職,阿里親手廢掉最強(qiáng)AI天團(tuán)?

頭條要聞

外媒稱伊朗封鎖霍爾木茲海峽只讓中俄船通行 中方回應(yīng)

頭條要聞

外媒稱伊朗封鎖霍爾木茲海峽只讓中俄船通行 中方回應(yīng)

體育要聞

2026年中超,為什么值得你多看一眼?

娛樂(lè)要聞

謝謝謝娜 貢獻(xiàn)出26年內(nèi)娛的第一個(gè)笑話

財(cái)經(jīng)要聞

人大代表建議:將農(nóng)民養(yǎng)老金提到500元

汽車(chē)要聞

鴻蒙智行首款獵裝車(chē) 尚界Z7/Z7T首發(fā)

態(tài)度原創(chuàng)

手機(jī)
教育
本地
旅游
公開(kāi)課

手機(jī)要聞

一加15T 全面升級(jí),官方劇透來(lái)了

教育要聞

陜西寶雞:開(kāi)學(xué)第一課 安全伴成長(zhǎng)

本地新聞

食味印象|一口入魂!康樂(lè)烤肉串起千年絲路香

旅游要聞

日照莒縣:浮來(lái)山廟會(huì)引來(lái)八方游客

公開(kāi)課

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

無(wú)障礙瀏覽 進(jìn)入關(guān)懷版