OpenClaw 刪掉 40 萬行自家測試碼,程式覆蓋率幾乎沒變

Elponcrab
分享
OpenClaw 刪掉 40 萬行自家測試碼,程式覆蓋率幾乎沒變

開源 AI 代理專案 OpenClaw 的創建者 Peter Steinberger 9 月 24 日表示,該專案刪掉了自己大約 40 萬行測試程式碼,而程式碼覆蓋率沒有太大變化。他的解釋是:「現在的模型很愛為每一個小改動寫測試,即使那些測試沒什麼用。」

加測試之前要先回答四個問題

Steinberger 公開了做這件事所用的 skill 檔案,放在 OpenClaw 的 GitHub 儲存庫裡。這份檔案定義了三種模式共用同一條價值標準:撰寫模式在寫入當下就對每一個新增或修改的測試把關,稽核模式則掃描既有的低價值測試,第三種是針對整個子系統測試面的全面修剪。

把關的方式是四個問題,任何一題答不出來就先別加這個測試:這個測試保護的是哪一個可觀察的行為、不變量或獨立契約;什麼樣的可信退化會讓它失敗;為什麼現有的覆蓋沒辦法抓到那個失敗;以及它是否需要一個生產環境的接縫(匯出、旗標、包裝或注入掛鉤)而那是沒有任何生產端呼叫者需要的。最後一題如果答「是」,這份文件要求把測試搬到真正的邊界去,而不是為測試開一個口。

廣告 - 內文未完請往下捲動

文件還寫了一條判準:一個在不改變行為的重構下就會壞掉的測試,斷言的是實作而不是行為,應該先在它該屬於的邊界重寫再合併。

被列為垃圾模式的十幾種寫法

這份 skill 列出一串會被稽核掃掉的模式,包括沒有斷言的覆蓋率探針、自我比較與身分複製、複製貼上的固定資料與清單、對原始碼或字串做精確比對、在真實邊界已有重複的私有述詞測試、同一契約的重複呼叫、只是為了保住測試專用匯出或全域變數而存在的測試,以及唯一呼叫者是測試的死程式碼。

還有幾條指向假陽性的檢查:用受測的產生器自己算出期望值、由模擬物件實作被斷言的行為、因為不相關的理由而通過的負面控制,以及名字承諾的東西比輸入實際涵蓋的更多。

文件也提醒稽核不是刪愈多愈好,寫的是「為信心最佳化,不是為刪除數最佳化」;並要求在判斷一個候選測試之前,要先讀完整個測試與它的生產端擁有者、進入點、呼叫者與被呼叫者。

他的操作心得:不要只叫代理去清理

Steinberger 另外分享了執行面的一個細節。他說:「如果你只是叫代理去清理,它會太早收手。給它一個有企圖心的目標。試試看『在程式碼覆蓋率變動 2% 以內,移除 20% 最沒用的測試』。」

換句話說,同一件工作,指令從「清理一下」換成帶有量化邊界的目標,代理願意走的距離就不一樣。

風險提示

加密貨幣投資具有高度風險,其價格可能波動劇烈,您可能損失全部本金。請謹慎評估風險。