寫程式
進階
寫程式
讓 AI 補測試:先列行為,再寫測試,最後驗證測試真的有用
請 AI 依規格列出行為清單再寫測試,禁止它為了通過而改程式,並用刻意改壞程式的方式確認測試有效。
45 分鐘
7 步
依使用的 AI 工具而定
編
AI 有解編輯部
最後更新 2026 年 11 月 5 日・CC BY 4.0
用到的工具
Claude Code
Vitest
pytest
Stryker
AI 很會把測試寫到全部通過,問題就在這裡:它可能只是把程式現有的行為抄進測試,連 bug 都一起鎖住。這篇的流程會確保測試是真的在檢查東西。
你需要準備
•
一個可以跑起來的專案
•
一個寫程式代理,看〈用 AI 寫程式代理從零做出第一個工具〉
•
版本控制,先開一個新分支
進度 0/7
完整閱讀
一步一步做
1
確認起點
先跑一次現有測試,記下結果。以 Vitest 為例:
終端機
複製
npx vitest run --coverage
Python 專案可以用:
終端機
複製
pytest --cov
覆蓋率能告訴你哪些程式完全沒測,但不能告訴你測得好不好。
完成這一步
2
訂好規則
把規則寫進專案給代理看的指示檔,例如
CLAUDE.md
:
文字
複製
寫測試的規則: 1. 不可以為了讓測試通過而修改正式程式 2. 發現疑似 bug 時停下來回報,不要改測試去配合它 3. 不可以 skip 測試,不可以刪除既有測試 4. 測試的是行為,不是內部實作 5. 不要 mock 被測試的函式本身 6. 一個測試只驗證一件事,名稱要說明預期行為
完成這一步
3
先列行為,不要先寫程式
文字
複製
請閱讀 src/cart.ts,先不要寫測試。 請列出這個模組應該具備的行為清單,包含: 一般情況、邊界值、空值、錯誤輸入、併發或時間相關的情況。 每項標示「程式目前有處理」或「看起來沒有處理」。
自己審這份清單,補上需求文件裡的規則。這是整個流程裡最有價值的一步。
完成這一步
4
寫測試
文字
複製
請依照確認過的清單寫測試。 一次只處理一個檔案,寫完執行,把結果給我看。 如果測試失敗,先判斷是測試寫錯還是程式有 bug,不要直接改。
完成這一步
5
刻意改壞程式
這是確認測試有用的關鍵。手動試幾次:
1.
把
>
改成
>=
。
2.
把折扣計算的一個數字改掉。
3.
拿掉一個錯誤檢查。
重新跑測試,
應該要失敗
。如果全部還是通過,代表這個測試形同虛設。
這件事也可以自動化,稱為變異測試。JavaScript 可以用 Stryker,Python 可以用 mutmut,工具會自動改動程式,看測試抓不抓得到。
終端機
複製
npx stryker init npx stryker run
完成這一步
6
處理發現的 bug
測試發現問題時,先留下一個失敗的測試,另外開任務修正,不要把它改成「預期就是這樣」。
完成這一步
7
放進 CI
讓測試在每次提交時自動執行,才不會隔一段時間就壞掉。合併前看過新增的測試,就像看其他程式碼一樣。
注意
代理可能會執行專案裡的指令。不要讓測試連到正式資料庫或真實付款服務,測試環境要用假資料。
完成這一步
卡關排解
你照著做成功了嗎?
成為第一個回報的人。你的回報會決定攻略排序與作者分潤。
照做成功
卡住了
下一步
•
改舊程式前先看〈用 AI 改既有專案:讀懂程式碼、拆任務、驗證不改壞〉。
•
想在每次提交時自動審查,看〈每個 Pull Request 自動做 AI 程式碼審查〉。
收錄在學習路線
AI 開發者
廣告版位
想讓正在用 AI 的人看到你的產品?了解廣告合作
問與答
卡住的地方、補充的做法都可以留在這裡
還沒有人留言。
登入後留言
更多「寫程式」攻略
進階
寫程式
用 API 做自己的 AI 應用:金鑰、費用控制、第一支程式
45 分鐘
7 步
入門
寫程式
用 AI 寫程式代理從零做出第一個工具
1 小時
7 步
進階
寫程式
用 AI 改既有專案:讀懂程式碼、拆任務、驗證不改壞
45 分鐘
6 步