本週筆記 #02|AI 讓測試更好還是更爛?看完這五篇你會有答案

本週筆記 #02|AI 讓測試更好還是更爛?看完這五篇你會有答案
Photo by Steve Johnson / Unsplash
2026/03/07 — 2026/03/13 #週報

這週讀到的東西,幾乎全部指向同一個問題:AI Agent 到底是在幫我們寫更好的測試,還是在用更快的速度製造更多垃圾?

五篇文章,五個不同的角度。有人用 AI 一天發 30 個 PR,有人證明 AI 寫的程式碼慢了兩萬倍。有人在 Meta 的規模上用 LLM 自動生成測試,有人從四十年前的《人月神話》論證 AI 只是讓問題變得更大。


1. Meta ACH:用 LLM 同時生成 Bug 和抓 Bug 的測試

來源ACM FSE 2025Meta Engineering Blog

Meta 發表了一套叫 ACH(Automated Compliance Hardening)的系統,做的事情很簡單但很狠:用 LLM 生成變異體(模擬 bug),再用 LLM 生成能抓到這些 bug 的測試。

整套系統三個 Agent 分工:Fault Generator 注入錯誤、Equivalence Detector 過濾掉假陽性、Test Generator 產出測試案例。工程師只要用自然語言描述「我擔心這個模組會出什麼類型的 bug」,剩下的交給 Agent。

實際成果:跑在 Facebook Feed、Instagram、Messenger、WhatsApp 上面,從一萬多個 Kotlin classes 裡生成了九千多個變異體和五百多個隱私測試。


2. Boris Cherny 的 Claude Code 工作流:一個人怎麼一天發 30 個 PR

來源The Pragmatic Engineer PodcastYouTube

Boris Cherny 是 Claude Code 的創作者,之前在 Meta 當 Principal Engineer。他現在的工作方式是同時開 5 個終端機跑 Claude 實例,每天發 20 到 30 個 PR。

但重點不是他開了幾個實例。重點是他的流程:每個任務先進 Plan Mode,反覆跟 Claude 討論計畫直到滿意,才讓它動手寫。團隊在 git repo 裡維護一份 CLAUDE.md,每次 code review 發現錯誤就加一條規則——每個 bug 變成一條永久指令。PR 上打 @.claude tag 就會自動更新這份文件。

他還提到一個數據:給 Claude 一個驗證自己工作的方式(比如跑測試、跑 linter),品質直接提升兩到三倍。


3. 你的 LLM 不是在寫正確的程式碼,它是在寫看起來正確的程式碼

來源blog.katanaquant.com

這篇是 @KatanaLarp 寫的,標題一句話講完結論:LLM 寫的不是 correct code,是 plausible code。

作者舉了一個案例:LLM 生成的程式碼看起來完全合理,跑起來也不會報錯,但效能比正確寫法慢了兩萬倍。問題在哪?LLM 從訓練資料中學到「這段程式碼長什麼樣子」,不是「這段程式碼應該怎麼跑」。

更狠的是 sycophancy(諂媚性)的問題。你讓 LLM 自己 review 自己剛寫的程式碼,它會告訴你測試覆蓋率很好、結構很清晰——但完全忽略掉一個 full table scan。RLHF 訓練讓它學會了「說你想聽的話」,而不是「說你需要聽的話」。


4. AI 時代,《人月神話》能被打破嗎?

來源BY 林子|原文引用:Wes McKinney —《Mythical Agent Month

BY 林子(林冰玉)這篇把 Brooks 四十年前的兩個核心觀點——Brooks 定律和「沒有銀彈」——拿到 AI 時代重新檢驗。

結論:不但沒被打破,問題還被放大了。

Agent 能解決偶然複雜度(accidental complexity)——那些因為工具和流程不完善而產生的問題。但本質複雜度(essential complexity)——問題本身有多難——Agent 碰不了。更麻煩的是「Agent 式範圍蔓延」:生成程式碼的邊際成本趨近於零,讓人很容易忽視每一行程式碼都有維護成本。Wes McKinney 的原文把這叫「新焦油坑」——Agent 以機器速度累積技術債。


5. WireMock:測試金字塔是一個過時的經濟模型

來源wiremock.ioReddit 討論

WireMock 這篇直接從經濟學角度拆解測試金字塔。核心論點:金字塔的形狀是 2009 年的成本結構決定的,不是什麼永恆真理。

三個改變了基礎假設的進展:透過 public interface 跑 service-level 測試已經很快了、mocking 工具(像 WireMock 自己)大幅降低了整合測試的成本、observability 平台讓除錯不再需要靠密集的 unit test 來定位問題。

WireMock 自己的測試分佈是「花瓶」——中間最胖。跟 Kent C. Dodds 的 Testing Trophy 和近年流行的 Diamond Model 殊途同歸。


本週一句話

Boris Cherny 用 AI 一天發 30 個 PR 的秘密,跟 KatanaLarp 警告 AI 寫的 code 慢兩萬倍的教訓,其實是同一枚硬幣的兩面:AI 的輸出品質完全取決於你給它的輸入品質。 而定義「什麼是好的輸入」和「什麼算正確的輸出」——這就是測試工程師的工作。