跳到主要內容

從「隔日 Bug」到安穩入睡:如何用一套 QA 體系馴服 AI 開發

如果你也是用 AI 輔助開發的人,一定遇過這種情境:

讓 AI Agent 寫腳本開發,當下測試沒問題,AI 也回報「執行成功」,你安心地去睡覺,晚上讓小龍蝦機器人繼續跑,隔天醒來,卻發現系統亂成一團—— 可能是堆滿了未處理的檔案、重複的任務、甚至有些檔案壞了。

這就是我這個弱弱的新手村大叔最近這一週深刻體會的 「隔日 Bug」:功能當下沒問題,但經過時間推移、在三組完全不同的機器和系統環境下、或遇到併發,就開始出包。雖然設了規則讓 AI 記憶,但實務上還是常常出錯,AI 往往只驗證『第一步』,卻忽略了『生命週期』與『併發環境』。

所以我建立了一套從 Phase 1 到 Phase 6 的完整 QA 審計標準當作 Skill ,每次 AI 在自主開發的之後,都會啟動這套制度檢視,目前為止成效不錯,幫我找出了幾個之前寫的 Skill bug。


痛點:為什麼 AI 開發容易埋下「隔日 Bug」?

傳統開發中,我們有單元測試、整合測試,但 AI 協作有個特性:AI 擅長完成當下的指令,卻難以主動思考「未來會發生什麼事」

例如,當你請 AI 寫一個清理暫存檔的腳本,它會讓腳本正常執行,但它不會問:

  • 如果這個腳本明天又被觸發一次,會不會重複刪除?
  • 如果檔案正在寫入時,Syncthing 也在同步,會發生什麼事?
  • 如果換到另一台時區不同的機器,cron 還會準時執行嗎?

這些問題,正是系統穩定性的大敵。而我們的 PAIOP 環境有三台機器(MBA、iMac、Oracle),跨機同步與分散式特性,讓「隔日 Bug」層出不窮。

當然這都可以讓 AI 自己再繼續進化運作,不過經過一週的練習,我決定不再依賴 AI 的「記憶」或運氣 (XD),而是建立一套強制執行的審計框架,讓 AI 自己學會思考未來狀態。


核心解決方案:有機 4D 審計框架

我和 AI 一起設計了這套有機 4D 審計框架,作為所有功能或開發交付前的必要關卡。任何腳本或技能,都必須在隔離沙盒中通過這四個維度的驗證:

維度 名稱 核心問題
D1 邏輯與功能驗證 腳本能跑、不報錯、產出符合預期嗎?
D2 狀態流轉閉環 資料的「生老病死」是否被妥善處理?任務結束後暫存檔有清空嗎?
D3 時序與併發驗證 隔天重跑會不會重複?多程序同時存取會不會打架?
D4 跨機環境適應性 三台機器的路徑、時區、依賴軟體都支援嗎?

工具實現:QA Auditor Skill

為了讓 4D 框架「可執行、可延續」,我搞了一個 AI Skill:qa_auditor

角色切換:從「建設者」變成「破壞者」

當呼叫 qa_auditor,AI 會強制切換到「測試工程師」人格。它的唯一目標是:想辦法證明現有的程式碼在極端情況下會爛掉 XD

這種轉變很重要—— AI 不再是討好開發者,而是成為系統的「魔鬼代言人」。

隔離沙盒:絕對不碰真實環境

所有測試都在 sandbox 下進行,並建立隔離目錄。測試腳本會被複製進去,環境變數自動注入,真實路徑被擋在門外。

產出報告:QA_RECORD.md

每次測試結束,AI 會產出一份標準化報告,包含:

  • 模擬時間推移(修改檔案時間戳)
  • 混沌測試(建立 .sync-conflict 假檔案、爛 JSON 等)
  • 各維度測試結果與改修建議

進化歷程:從 Phase 1 到 Phase 6

本來我只打算做簡單的 QA 自動化,讓小龍蝦機器人和 Google Antigravity 依循自己處理,但隨著實作處理一些問題後,經過和其他的 AI agent 深入交流後 XD,一步步補上了讓系統有機處理的旅程,下面是每個階段的關鍵功能:

階段 核心主題 關鍵功能
Phase 1 4D 框架 + 基本沙盒 建立測試維度與隔離機制
Phase 2 自動化進階 無痛注入、冪等性測試、終止耐受、QA 門禁、回歸測試沉澱
Phase 3 魔鬼細節 強制命名空間隔離、歷史垃圾注入、可逆測試、系統不變量、目錄分類
Phase 4 可持續維護 分級 QA、可觀測性、時窗型不變量、回歸生命週期、除錯逃生閥
Phase 5 全域整合 環境變數擴充、語意化門禁、測試集中化、目錄快照、Smoke 分級
Phase 6 防反噬護欄 性能預算、採樣式快照、不變量版本化、測試實名制、自動修復指引

這過程中,我一直在想:我只有三台機器、幾個核心腳本,有必要搞這麼複雜做到 Phase 6 嗎?

老實說,以我個人規模而言,確實是有點 overkill。但有趣的是,當 Phase 5 和 Phase 6 補上之後,這套系統反而不再讓人覺得負擔——因為有分級,小修改只要跑 5 秒的 smoke 測試;因為有性能預算,混沌測試不會卡死;因為有自動修復指引,FAIL 的時候 AI 會告訴我怎麼改。

最終,我得到的不只是測試工具,而是一個我真心願意使用的 QA 有機工具


實際運作流程:一次典型的 QA 測試

我用它來測試之前 AI 開發的一組文件清洗 Skill,簡單說明 QA Auditor 如何運作:

  1. 完成腳本修改或開發段落,呼叫 qa_auditor --script xxxx.py --level full
  2. qa_sandbox_manager 建立隔離沙盒,注入環境變數,複製腳本與測試資料
  3. AI 執行 4D 測試
    • D1:執行腳本,確認無報錯
    • D2:檢查暫存檔是否清理、狀態是否流轉
    • D3:模擬隔日重跑、模擬 Syncthing 競態(透過背景行程模擬)
    • D4:切換時區變數、模擬路徑不存在
  4. 混沌測試:注入破爛 JSON、過期檔案,觀察腳本是否崩潰或自癒
  5. 產生 QA_RECORD.md 與 .qa_status(PASS/FAIL + 原因)
  6. 若 FAIL,AI 提供修復指引;若 PASS,允許合併或部署
  7. 回歸測試沉澱:若發現新 bug,自動產生 pytest 腳本,存入並分類

這個流程現在已經整合到我的 CI 流程中,每次提交都會自動觸發對應等級的測試。


成果與反思:我終於可以不被 Telegram Bot 報警轟炸了

因為之前寫了一個環境健康檢查,讓 Bot 在有問題的時候自動通知我,結果好幾天早上醒來手機都被 Bot 的警告訊息轟炸。

這套系統上線後,我讓它自動去檢視目前三機上所有的工作排程,得到不錯的建議,我看了之後沒其他意見,只要按下執行就好~

最明顯的改變是:「隔日 Bug」消失了,環境穩定了

更重要的是,讓我這個新手村中年大叔,對 AI 生成的程式碼有了一點點信心——因為我知道,在它被部署之前,已經被一個「破壞者」反覆折磨過 XD

但另外也有幾點反思:

  • 複雜度需要持續管理:設定了定期清理過期回歸測試的機制,避免測試最後變成垃圾山。
  • 劣根性永遠存在:即使有門禁,AI 或是我還是可能想偷偷繞過。所以我建置了 QA 分級,讓小修改能快速通過,降低繞過的誘因。
  • 這點真的很妙,在還沒有用 Tailscale 之前,AI 為了想閃過 SSH 的限制,硬是自己打造了半套的秘密通道,讓 AI 配合 Bot 可以傳輸檔案和指令,雖然很聰明,但仔細想想其實真的滿恐怖的。

結語:給可能同樣受困於「隔日 Bug」的你

如果你也被小龍蝦或是 AI Agent 搞瘋,深受「當下沒問題,隔天就爆炸」所苦,我的建議是:

  1. 先盤點你最常遇到的錯誤類型(時間相關?併發?跨機?)
  2. 從一個維度開始建立測試(例如 D3 的時間推移)
  3. 用簡單的沙盒隔離(不需要複雜框架,Python + 環境變數就夠)
  4. 讓 AI 扮演「破壞者」,而不是只當建設者
  5. 逐步加入護欄,但永遠記得:夠用就好,不要過度工程

上一篇提到 AI 管理制度,原本以為有制度就可以順順的發展,但經歷了這兩週的痛苦,因為自己的功力太弱,才知道導入 QA 機制有多麽重要 XD 。


留言

這個網誌中的熱門文章

關於閱星曈 XTEINK 這款超便攜電子紙,掌握型電子紙書小玩意

話說今年初在小紅書上看到 「星曈-超便攜電子紙」 的帳號,在講他們正在 DIY 掌握型電子紙書的歷程,覺得挺有意思的,從硬體的規劃到電子紙的選擇與電池的搭配,後來他們決定眾籌小量的真正做出一台掌握型電子紙書販售,這我就坐不住了,馬上聯繫了「星曈-超便攜電子紙」的版主,想說是否我們台灣這邊的電子紙愛好者也可以購買。在聯繫過中,才發現原來 FB 上的 電子書閱讀器討論區版主秋雁 也是第一時間聯繫對方,所以我們倆就手牽手(並沒有)的一起買了。 這整個眾籌的過程真的很像是一起參與創業的感覺,幾乎每天都看到星曈在小紅書上更新進度,他們遇到了什麼困難,怎麼直面解決等,而且首批的價格非常實惠,其實我都不知道星曈他們到底是否能堅持到底,畢竟「量產實作」這條路非常不容易。在和星曈的聊天過程中,知道他過去可是在中國曾經創辦過知名的事業,雖然後來因為大環境改變而退出市場,但同為曾經的創業者,我一直相信也期待他們成功。 終於在最近拿到了「星曈-超便攜電子紙」的 Founders Edition ,包裝的質感很不錯,超便攜電子紙本人更是優雅出眾,不過因為它的使用方式需要一點技巧,所以寫了這篇簡單的教學,希望對新手有一些幫助。 拿到手的第一件重要事:系統升級 星曈他們這次很有誠意的也提供了繁體中文介面,但需要升級後才能使用,所以我們先來了解一下如何最無痛升級。 「星曈-超便攜電子紙」內建的網絡使用「XT-EPD」,當然你之後可以自己更換其他想使用的網路基地台登入,但這需要一點技巧,對於大多數使用者來說是有理解上的難度,所以星曈建議使用最無腦的連接升級方式。 1. 拿出你的手機(以下用 iPhone 為例說明),將手機「設定」下「關於本機」裡的名稱先改為 XT-PED,升級之後再改回你原本使用的名稱即可。 2. 將手機「設定」下「個人設點」裡的密碼先改為 12345678(這是 超便攜電子紙的 XT-EPD 內定密碼),這裡有一個要提醒的事情,下面有個「最大化相容性」,要開啟。 3. 在 超便攜電子紙 這邊選擇「系統升級」,你的兩個設備就應該會自動開始 WIFI 連接,並問你是否要升級更新,就勇敢的點下去吧。 4. 在升級過程中,會看到一些補充說明,一方面你應該會看到進度百分比慢慢的上升,但假如你發現這個百分比數字停滯很久,也別擔心,將機子右下角的 reset 鍵按下去,再點擊機子右下角...

「分享」我的 Kindle 3 Graphite 初體驗 3G / Wifi 版本

總之,我買了一台 Kindle 3 XD Kindle Wireless 3G/Wifi - $189.00 Shipped via DHL International - $20.98 Import Fees Deposit: - $10.65 Total: - $220.63 2010/10/30 update : 剛 Amazon通知因為 Export fee reduced , 所以 $10.65 會完全退回 :D 很快的講一下我晚上的測試: 1. 因為我原本在 Amazon 上面的帳號是台灣的地址,所以購買的時候沒有送 Power 線,聽說有大大直接寫信和 Amazon 的客服要求應該要附線,不過我下訂單的時候比較早,就沒有做這件事,也因此我得到的只有一條 USB 線 2. 我原有的台灣帳號購買書籍,會需要額外支付 2 美金的費用 3. 自行灌入的繁簡體中文 PDF 檔案,都可以正常觀看無誤,載入速度也還不錯(檔案約 90 頁) 4. 中文檔名有些會漏字,但內文 OK , 和繁簡體好像沒有直接關係 5. txt 純文字檔的中文偶而會有漏字 6. 可以直接透過 3G 上網無誤(非常爽) 7. 繁體中文的網站觀看無誤,測試網站包括了雅虎繁體中文網站、無名小站等 8. 簡體中文的網站偶而會有漏字,但大體上無誤,測試網站包括了新浪網等 9. 某些特殊網站也可以用,例如 Google Map 台灣美食地圖、Plurk mobile 網頁 10. 可以一面聽音樂一面閱讀 11. 內建的兩套牛津字典還不錯用,不算陽春 12. Text to speech 的功能只支援英文,包括了自己輸入的 txt 檔(PDF 不支援) 下面是一些螢幕截圖: 中文 PDF 沒問題 PDF 漫畫當然也沒問題 Plurk Mobile 版本正常 新浪娛樂頻道簡體網站,內容正常,標題可能漏字 Google Map 台灣地圖正常,但有點難按 Yahoo 奇摩繁體中文網頁正常 無名小站繁體中文正常 Google 新聞網站沒問題 簡體中文內容的 PDF 檔案正常 後續更新中: 感謝林兄之前的努力,小梅子測試在 Kindle 3 中也可以自行安裝「 21世紀英漢詞典 」,贊啦! 延伸閱讀: Kindle 3 的幾個快速鍵、...

「分享」Mac / iPhone 上的廣播電台軟體 FStream - 廣播列表更新 2009/9/19

小梅子在蘋果電腦上面最喜歡用的小功能之一,就是可以透過電腦聆聽廣播電台,以前我常用 Hinet Sucks! Radio Widget ,這是個絕頂好物,可以隱藏在背景默默忠實的播放廣播音樂,但因為 Hinet 常常更改他們的線上廣播規則,所以搞的原作者疲於奔命,有時候就會聽不到音樂。 後來小梅子使用了另一個工具 FStream ,這也是一個可以讓你在 Mac OSX 上聽廣播的好東西,並且它可以讓你自由編輯廣播電台目錄,也支援 iTunes 的廣播列表(這真的很方便),還支援錄音功能喔!所以小梅子這陣子每天都在用 FStream 聽佳音廣播電台,很開心。 FStream 的介紹網路上已經很多了,它也有 iPhone 版本,所以只要你的 iPhone 可以3G上網,理論上就可以開心的聽廣播囉。 因為介紹已經很多,所以小梅子這裡要分享的是:廣播節目清單 XD FStream 不像 Hinet Sucks! Radio Widget 內建好了一狗票廣播節目清單,得自己一一輸入,這說起來也是滿麻煩的,我看了一下網路上的教學,覺得要一個個輸入實在不是人幹的事情,所以小梅子比對了一下資料結構,搞了一個「 台灣+香港 常用廣播電台節目表 」,所以你只要下載了 FStream ,再輸入(Import) 這個節目表就會有現成的一狗票節目了,也不用去改檔案夾目錄什麼的。 首先開啟 FStream 中的 Stream Manager 功能,預備輸入清單。 在 Stream Manager 的右下角,有一個「Import」按鈕,點下去預備輸入檔案 下載小梅子整理好的檔案,直接輸入囉,下載後直接放在桌面上就可以了,不用特別去選定目錄。 噹噹噹,這時候你應該會看到三個目錄,包括台灣、香港,還有一個 ... 沒成功過 XD,這個沒成功的列表是過去曾經用過,但現在沒有列在 Hinet Free 廣播清單中,或許以後可以用。 上面的清單中,小梅子其實也沒有一一測試過啦,大夥可以自己試試,若是還有不能連線的電台,你也可以自己手動搬移到「沒成功過」這個列表 :P PS : Hinet 又更新了廣播位置,小梅子今天 (4/15)也更新了這個目錄,順手又多加了一些電台,目前使用正常,歡迎大家一起聽廣播音樂 ^_^ ps : 2009/09/19 更新 這兩天發現 Fstream 又忽然不能聽了,但這次的狀...