為什麼 GenAI 不擅長測試與除錯?

對於 GenAI 是否能夠幫助除錯與測試,以及 AI agent 或是 MCP server 能夠幫助多少? 這些讓我困惑很久。因此,我詢問了 chatGPT,請他幫我解解惑,下面是他給我的答案,不知各位專家你們是否也相同的想法呢?

AI Agent 和 MCP Server 能幫多少?又補不了什麼?

近年來 GenAI(像是 ChatGPT、Cursor、CodeWhisperer)快速進化,許多開發者開始依賴它來產生程式碼,甚至嘗試讓它「幫忙測試或除錯」。同時,市場上也出現了各種 AI Agent 或 MCP(Model Context Protocol)Server,號稱可以讓 AI 自動發現 bug、提升品質。

這些工具真的那麼神嗎?AI 真的能幫你找出 bug 或設計測試嗎?

我們會從GenAI 的原理開始講起,搭配多個實際開發案例與錯誤情境,再延伸到AI Agent 和 MCP Server 能補上什麼、又不能補什麼,幫你全面建立清晰理解。


一、GenAI 的本質:它是「模仿高手」,不是「推理專家」

GenAI(大型語言模型,LLM)不是靠理解邏輯運作的,它的核心能力是:

「從大量程式碼中學到語言與程式的『出現機率』,然後根據上下文預測下一段最可能出現的文字或程式碼」

也就是說,它只是根據機率「猜」接下來會出現什麼,而不是理解需求、執行程式或邏輯推理。

你可以把它想像成一個背了十萬本技術書的實習生,他記得很多例子,寫得出漂亮的程式碼,但不一定真的懂你的意圖或業務邏輯。


二、這樣的原理,為什麼不適合「測試」與「除錯」?

1. 它只會寫「常見的」正確範例,卻不會找「你沒想到的」例外狀況

測試的本質是找出程式在邊界條件或特殊情境下的行為。但這些 edge cases 在訓練資料中本來就少,GenAI 不太會主動產生這些場景。

範例一:邊界條件被忽略

你寫了這段程式:

js複製編輯if (total >= 1000) {
  discount = 0.1;
}

你問 AI:「幫我寫測試」,它可能寫:

gherkin複製編輯Given total is 1200  
Then discount should be 10%

乍看沒錯。但真正重要的測試是:

  • 剛好 1000 時有折扣嗎?
  • 負數怎麼處理?
  • 非整數輸入會怎樣?

這些情境,AI 通常不會幫你想,因為它是模仿常見範例,不是主動懷疑者。


2. 它不會執行程式,也沒有 runtime trace 能幫它判斷錯誤

AI 是純文字模型,它沒辦法像你打斷點一樣跑程式、看變數值、分析 call stack。除錯需要的是:

  • 執行 trace
  • 推理因果關係
  • 假設驗證

GenAI 沒有這些能力,它只能「猜」哪裡可能錯。

範例二:NullPointerException
java複製編輯return user.getName().toUpperCase();

你問:「為什麼這段會報錯?」

GenAI 通常會說:「你應該檢查 null」,然後幫你補上:

java複製編輯if (user != null) {
  return user.getName().toUpperCase();
}

表面上錯誤不見了,但實際問題可能是:

  • user 是被 cache 的過期物件
  • 問題來自 service 層沒同步 session

這種系統級的 trace 錯誤,GenAI 根本無法掌握,只會表面 patch。


3. 它會「合理化錯誤」,不會主動懷疑你

這是最危險的地方:

你提供的需求或測試情境就算錯了,AI 也會「幫你產出漂亮但錯的測試」,而不會提出質疑。

範例三:需求誤解仍被「驗證」

你的需求說:「買 3 件商品就打折」
實際應該是:「買 3 種不同的商品才打折」

你請 AI 幫你寫測試,它會很乖地寫:

gherkin複製編輯Given I have 3 items in my cart  
When I check out  
Then I should get a 10% discount

問題來了:它不會幫你分辨「你理解的規則對不對」,它只管生成合語法的測試。錯的邏輯就這樣一路通過測試。


4. 它無法跨模組推理,無法分析系統性錯誤

很多 bug 是分散在不同模組的「誤解」導致的,例如:

  • 一邊送 timestamp,另一邊收 string
  • 一邊預設 retry,另一邊無 exception handler

這類跨模組或流程性問題,GenAI 完全無力分析

範例四:API 行為誤解導致交易失敗

你問:「為什麼 checkout 有時候會失敗?」

GenAI 可能說:「你可以 retry,或 log error」

但實際問題是:

  • 你用的是舊版 API,返回的資料 schema 改變
  • 錯誤只發生在高併發時 queue timeout

這些資訊,GenAI 沒有 runtime trace 根本無法知道,只能亂猜。


三、AI Agent / MCP Server 能補足什麼?

這時候就要引入現在熱門的「AI Agent」與「MCP Server」了。

它們的核心是:

  • 連接到實際程式的 執行環境
  • 收集 runtime 的 行為記錄(log、trace、依賴圖)
  • 幫助建立「背景知識」或「執行模型」
  • 用 pattern matching 找出常見異常、警訊、空洞測試區

這樣可以幫 GenAI 做得更好。


✅ 它們能補什麼?
問題AI Agent / MCP 可補強的地方
測試空白區分析 PR 修改範圍、建議補測試的模組與場景
邊界條件比對歷史 trace,提醒你忽略某些 input 組合
runtime 錯誤trace call stack,highlight 問題位置與參數值
測試建議結合行為模型與 GenAI,自動產生更真實的測試
系統依賴MCP 建立依賴圖,顯示模組間的風險連動

🛑 但不能解決什麼?
  1. 無法幫你判斷「規則本身對不對」
    • 它們不理解需求 intent,只能根據你給的資料運作
  2. 無法主動創造測試目的
    • 它們不是 QA,也不是使用者,它們只能照你輸入來回應
  3. 仍缺乏邏輯推理與語境整合能力
    • 很多 bug 需要領域知識與上下文判斷,這不是 AI 能辦到的

四、結論:AI 是模仿高手 + 執行觀察者,但「最終審判」還是要靠你

你可以這樣思考這三層角色:
層級誰在做什麼價值定位
GenAI快速寫出 code、測試草稿、格式轉換像助理,幫你加速作業
AI Agent / MCP執行 trace、比對異常、標記風險像觀察員,提醒你注意盲點
開發者 / 測試者理解需求、設計策略、決定正確性最終判斷者,擁有全局與意圖
所以最終原則是:

AI 可以幫你更快做事,但你要決定做的事是不是對的。


如果 AI 很容易抓出你程式的 bug,那代表什麼?

說白了,如果 AI Agent 很快就幫你抓出一堆 bug,往往代表:

你的程式品質本來就不夠好,很多「低懸果實」沒被顧到。

成熟的團隊,通常早就做好:

  • 邊界檢查
  • 型別驗證
  • 錯誤處理
  • 模組設計與責任分離

這時候 AI Agent 就只能提供少數「補充建議」,抓不出太多明顯錯誤。


想法收斂:

GenAI 沒你想的那麼聰明;AI Agent 沒你想的那麼神;
但你把它們搭配起來用得好,就真的可以讓開發速度更快、品質更穩、風險更早發現。

這才是未來人機協作的真正方向:
不是讓 AI 取代你,而是讓 AI 幫你「看漏的盲點」,你來做最終判斷。

發表迴響

探索更多來自 轉念學 - 敏捷三叔公的學習之旅 的內容

立即訂閱即可持續閱讀,還能取得所有封存文章。

Continue reading