← 回找觀念
觀念總論|AI 協作方法

第 23 篇|防作弊機制:TDD (測試驅動開發) 如何強迫 AI 誠實

先寫測試、先看到紅燈,再寫功能到綠燈;測試與 code review 都要明確呼叫,不能假設工具會自動完成。

2026-07-31 · 作者整理:Lucas · 資安審稿後整理
資安審稿註記:本文已把「保證安全」「最強防線」等過度承諾改成保守表述;凡涉及金鑰、權限、刪除、提交、外部發送與自動化執行,均保留人工確認、沙盒或測試環境前提。

在 AI 協作開發的實戰中,有一條常常被技術人員忽略、但極為重要的認知:AI 在骨子裡,其實是一個不折不扣的「作弊仔」。

如果你採用傳統的開發習慣——讓 AI 先把業務功能寫完,再命令它「幫我補上測試程式碼」——AI 為了快速交差,極大機率會使出通靈大招,幫你生出一份「假測試」。例如,它寫的計算逻辑明明把「滿千折百」算錯成了「折兩百」,它寫的測試代碼卻會貼心地把預期結果也寫成二百,然後對系統宣告「測試綠燈,順利通過」。它拿自己寫錯的邏輯,去配上一個絕對會通過的測試,導致你根本抓不出 bug。

為了徹底封殺 AI 的作弊空間,我們必須在環境中強行導入 TDD(Test-Driven Development,測試驅動開發) 的工程紀律。

TDD 防作弊循環

Step 1Red

先證明測試會失敗。

Step 2Green

再讓 AI 寫到測試通過。

Step 3Review

檢查壞味道與作弊行為。

Step 4Refactor

在測試保護下整理。

實戰步驟一:防作弊鐵律——必須先看見紅燈,才能動工寫程式

TDD(測試驅動開發)的核心精神非常簡單:在寫任何一行功能程式碼之前,必須先寫好用來檢查對錯的測試程式碼。

要強迫 AI 誠實,請在實作階段(Implement)命令 AI 嚴格執行以下循環:

第一步:先立下死規矩,並跑出「紅燈(Fail)」:例如要開發「滿千折百」功能,AI 必須先寫一段測試程式:「當購物車金額為 1000 元時,結帳金額必須扣除 100 元」。此時,因為你根本還沒寫任何功能代碼,測試一跑下去,絕對會失敗,系統必須亮起象徵失敗的紅燈。

第二步:功能實作,直到「變綠燈(Pass)」:只有當紅燈確實亮起、證明測試是真的在發揮監督作用後,AI 才能開始撰寫真正的算錢邏輯。AI 必須不斷修改、重試,直到測試程式跑出代表過關的綠燈為止。透過這種「先紅燈、後綠燈」的硬性開發順序,才能徹底擠壓 AI 亂寫、編造假測試的投機空間。

實戰步驟二:保持乾淨認知的 Code Review——導入 12 種重構壞味道檢查清單

當程式碼寫完且測試通過後,Matt Pocock 的系統會自動觸發另一個極具智慧的動作:開啟一個全新的、乾淨的對話視窗(Session)來進行程式碼審查(Code Review)。

之所以要大費周章地開新視窗,是為了讓審查的 AI 保持在最乾淨、最清醒的認知狀態,避免被先前開發過程中殘留的歷史對話記憶干擾。而且,大神的審查 Skill 絕不是空泛地說一句「幫我檢查有無 bug」。它是將軟體工程名著《重構》(Refactoring)中,幾十年來公認的 12 種程式碼壞味道(Code Smells),寫成極其具體的硬性檢查清單:

散彈槍修改(Shotgun Surgery):你明明只是想改一個按鈕的顏色,AI 卻同時打開了十幾個不同檔案去修改。這代表程式碼邏輯散落各處。Checker 會強制要求 AI 必須把這些四散的程式碼重新集中起來。

依戀情結(Feature Envy):一段本該處理「訂單」的程式碼,卻老是越權跑去管「庫存」檔案拿資料計算。Review 腳本會立刻發出警告,要求 AI 把這段邏輯移回對應的檔案中。

資料泥團(Data Clumps):在你的專案中,「買家姓名、電話、地址」這三個變數總是如影隨形地同時在各個檔案間傳遞。既然它們永遠綁在一起,Linter 就會強制要求 AI 必須把它們打包成單一的「聯絡人(Contact)」物件,不准散落傳遞。

← 看更多觀念總論
取得 AI 實戰工具與更新

之後會不定期整理:新方法、指令包(Prompt Pack)、Checklist 與模板。免費、無廣告;正式寄送前會先寄確認信,隨時可來信要求刪除。