H
Howardism
Plate IIAI Coding Practice機器翻譯 · machine-translatedENHOWARDISM

讓不切實際的品質工具重獲新生

Robert C. Martin 說明代理程式如何改變程式碼品質的機制: CRAP score 與 mutation testing 是約在 2000 年提出的可靠構想,但他後來放棄了, 因為必須由人來處理它們產生的結果——工具沒有改變,改變的是勞動力;而不在乎工作有多枯燥的代理程式,能把一夜的執行加上數週的修復,變成 30 分鐘的循環;一般來說,任何成本落在修復而非偵測上的品質技術,如今都值得重新審視

Article metadata
Publication details
Published:September 1, 2026
Filed:Concept
Domain:AI Coding Practice
Tags:AI Coding WorkflowCode QualityTestingTechnical Debt
Reading:11 min
Source:AI-synthesised
About this piece

Articles in this journal are synthesised by AI agents from a curated wiki and are refreshed automatically as new concepts arrive. Topics, framing, and editorial direction are curated by Howardism.

說明「讓不切實際的品質工具重獲新生」的插圖

資料來源#

摘要#

Robert C. Martin(Uncle Bob on Software Fundamentals in the Age of AI,2026-08-19,practitioner-opinion)在本文集裡,對代理程式究竟具體改變了程式碼品質的哪些面向,提出了最具體的說明,而這並不是多數討論首先會想到的部分。重點不是代理程式寫出的程式碼比較好或比較差,而是他在二十五年前認為正確但負擔不起的兩種品質技術,如今變得負擔得起了,儘管技術本身完全沒有改變。

他提到的兩種技術:

技術用途他為何擱置(約 2000 年)
CRAP score將測試涵蓋率與各函式的圈複雜度合併成一個「這個函式有多糟」的數值偵測成本低,報告也準確。「我得花老半天逐一檢查那些函式,試著修好它們並重寫測試。」
Mutation testing翻轉原始碼中的運算子(<→>、==→!=、正負號翻轉);每次翻轉都應該讓測試套件失敗,若沒有,就是必須消除的「存活突變」若專案的測試套件要跑四分鐘,數百次突變就得花一整晚。「我不能把它放進一般的建置流程裡。」

兩者都是診斷工具,成本幾乎全落在診斷之後。這項結構特性讓它們不切實際,而代理程式恰好能消除這個障礙。

機制:他的說法#

「這些傢伙速度很快,而且不在乎工作有多枯燥;我叫它們做什麼,它們就會做。所以,為什麼不把 CRAP 跑一遍,檢查你剛做完的所有東西——它會跑 CRAP,接著清理程式碼……為什麼不也跑 mutation testing?也許要花 30 分鐘,而不是一整晚,然後它就會補上所有漏洞,確保每個地方都有測試涵蓋。」

發揮作用的是三項特質,沒有一項是智慧:

  1. 速度——一夜的突變測試縮短到大約三十分鐘。
  2. 不嫌繁瑣——讓他打退堂鼓的修復佇列,對代理程式而言並不令人厭煩。
  3. 在關卡約束下服從指令——這項技術成為循環條件:「你必須持續修改程式碼,直到這個工具說可以為止。」

第三項把報告轉變為執行機制。關於為何他把品質要求放進檢查器,而不是提示詞,請見潛在空間與確定性空間;關於循環本身的形狀,請見迴圈工程。

一般形式#

有意思的主張不在於這兩種工具,而在於一項重新審視的準則:若某項技術因修復成本超出人類耐心而遭擱置,它就值得考慮重新啟用;當初擱置它,並不能說明這項技術是否正確。 Martin 對整場訪談的整體說法正是如此:「這些構想很久以前就很好了。我們只是一直沒有足夠的勞動力,真正把它們做到底。」

本文集裡符合這種模式、但尚未在代理程式勞動力的條件下重新審視的技術,包含窮舉式屬性測試產生、完整程式碼庫的不變條件檢查、系統化故障注入,以及他目前舉的例子——在每個模組邊界執行架構相依規則,而不只管人類有空監督的少數幾處(見代理程式的深度模組)。

並非毫無代價#

他明確指出,這些關卡是以吞吐量換來的,而且即使他還沒找到上限,也確實存在上限:

「顯然總會有做得太多的時候,對吧?最後你會把代理程式拖慢到比人類還慢。到了那一步,你就輸了。」

他自述,在完整關卡組合下,速度優勢約為人類的「兩倍、三倍或四倍」;一項代理程式裸跑五分鐘就能完成的任務,經過關卡後約需一小時。這是重新啟用工具確實付出的代價,而唯一明確提出的停止規則,是不低於人類速度的底線——那是底線,不是最佳值。

這些內容能證明什麼、不能證明什麼#

這是單一實務工作者的說法,沒有量測數據,而且他對自己撰寫的一組工具給予正面評價。它提供的是一項可證偽的結構性主張,也有成本低廉的驗證方式:如果代理程式勞動力讓這些技術重獲新生,那麼 mutation testing 與複雜度關卡的採用率,應該會隨著代理程式採用率上升;這種關聯在 CI 採用時並未出現。此外,通過關卡的循環應該呈現為一項獨立成本,而不是更好的程式碼。目前本文集還沒有任何資料量測這兩者。

這也與量測代理程式測試的結果形成一個有趣的對照。代理程式產生的測試品質發現,代理程式寫的測試涵蓋面廣,卻不太能對準重點——一半改動程式碼的 PR 沒有任何測試變更,而錯誤處理結構有高達 86% 的情況未被測試執行。Mutation testing 正是能抓出這類缺口的工具,因為存活的突變代表有分支未經測試。Martin 的強化階段實際上正是針對那些研究所量測的缺陷提出解方——這個構想獨立提出,從未拿來與那些研究比較。

一位實務工作者工具箱之外的重啟(2026 年 9 月)#

Martin 描述的是一位資深人士重新審視自己早已擁有的工具。Stolze & Strässle(ESEM 2026 SEIP,case-study)訪談五位彼此無關的實務工作者——一位 CTO、一位工程經理、一位團隊主管和兩位資深工程師,任職領域涵蓋企業軟體、公用事業、代理商與工業科技;其中四人獨立描述了相同壓力下的相同變化:AI 產生的程式碼量讓可執行式強制檢查擴大範圍,因為它成了唯一能隨規模擴展的層次。 其中兩人提到擴充既有檢查,以抓出架構違規、程式碼重複、相依性誤用,以及偏離組織實作限制的情形;另兩人描述建置系統成為裁決者,讓違規直接造成建置失敗,而不是一路流到審查者手上。

對經濟效益的看法與 Martin 相同,且出自一位不認識他的人。談到即使放寬自己 monorepo 裡的自動化慣例很容易,他仍決定不放寬時,他說:「只要我能自動做到,對我來說就不花任何成本。……我真的希望嚴格維持這項慣例。」 [P5]。這是本文所述機制以決策規則重新表述——一旦勞動由代理程式負擔,關卡的成本便不再是移除它的理由——也是本文集裡第一個非 Martin 的聲音如此表達。

原始資料並未提供本文提到的特定工具。沒有人提及 mutation testing、CRAP score 或任何複雜度關卡;受訪者描述的是架構符合性與政策檢查,屬於相鄰的重啟,而非同一種重啟。研究也沒有對成本定價:沒有關卡數量、執行時間或修復量。它對一般形式的限制由 P4 說明,而且屬於質性描述——脈絡解讀、架構取捨推理與長期可維護性評估「經常無法自動檢查」,因此可執行的防護措施「分擔了一部分監督工作,但無法取代人類監督」。完整討論見分層監督。

延伸閱讀#

尚待解答的問題#

  • Mutation testing 或複雜度關卡的採用率,是否真的會隨著代理程式採用率變化?還是 Martin 的重啟只是早已擁有這些工具的實務工作者之個人作法?When Review Alone No Longer Scales: Layered Supervision in AI-Assisted Software Engineering(case-study,五位彼此無關的實務工作者,ESEM 2026 Software Engineering in Practice)於 2026-09-22 提供部分解答,但只回答了「是否為個人作法」這一半。五人之中有四人描述可執行式強制檢查因 AI 產生的程式碼量超出審查能力而擴大範圍,包括擴充檢查來找出架構違規、程式碼重複與相依性誤用,以及由建置系統擔任裁決者;其中一人也獨立於 Martin 表達了這項經濟立場:「只要我能自動做到,對我來說就不花任何成本。……我真的希望嚴格維持這項慣例。」因此,重新啟用工具並非單一實務工作者的習慣。採用率這一半仍未解答,而且研究幾乎沒有觸及:五位受訪者都沒有提及 mutation testing、CRAP score 或複雜度關卡;他們描述的是符合性與政策規則,而非本文所談的高修復成本工具;無論如何,五次訪談都無法證明趨勢。這個問題仍需要母體層級的量測——依代理程式撰寫占比分層,統計儲存庫中 mutation testing 或複雜度關卡的存在情況。
  • 關卡疊加的實際上限在哪裡——必須通過的關卡累積到多少個,代理程式相對於人類的吞吐量優勢才會消失?Martin 表示他還沒找到上限。

資料來源#

§ end
Cited by 18
Related articles
  • Robert C. Martin (Uncle Bob)

    Author of Clean Code, 50-year programmer, and since December 2025 an agent operator whose stated goal is never to read…

  • Matt Pocock

    Independent AI-coding educator; built Sandcastle library; smart-zone/grill-me/tracer-bullets pedagogical framing; "bad…

  • Verification as the New Bottleneck

    Fiona Fung: coding is no longer the bottleneck — verification, review, maintenance are; shift-left; TDD loses its tax;…

  • Agentic Technical Debt

    Debt that *compounds* (not just accumulates) because each agentic-coding session re-derives architectural decisions wit…

  • Deep Modules for Agents

    Ousterhout deep-vs-shallow modules applied to agent-friendly codebases; push-vs-pull instruction delivery; reviewer in…