想法與洞見

探索 AI 優先開發、編碼護欄和可處置架構。

你的測試全過了,Mutation Score 卻只有 40%——Surviving Mutant 到底在跟你說什麼

Code coverage 告訴你很安全,Mutation testing 卻說你的測試大多是擺設。這篇文章告訴你 surviving mutants 如何戳破這個假象,以及你該怎麼補破洞。

你的測試全過了,coverage report 顯示 87%,但 mutation score 只有 40%,還有一半的 mutants 活得好好的。 這個 40% 不代表你的程式壞了,它代表你的測試壞了。Coverage 衡量的是「測試執行時跑過哪些行」;Mutation testing…

Rust 的 Mutation Testing 確實有效,但編譯時間會讓你痛苦

cargo-mutants 能找出那些只會假裝驗證程式碼的測試。以下是 mutation testing 在 Rust 中的運作原理、它能抓到什麼問題,以及編譯時間的成本是否值得。

你已經達到 100% 的行覆蓋率。每個分支都被執行過,每個函式都被呼叫過。然後有人把你的計價邏輯裡的 改成 ,跑了一下測試,全部通過。 這不是理論上的問題。這就是你的測試執行了程式碼,卻沒有真正驗證行為時會發生的事。Coverage 衡量的是哪些行被執行過,而不是哪些輸出被檢查過。Mutation testing…

驗證光譜:為什麼 AI 寫後端最強

AI 寫程式遵循一條驗證梯度。後端在毫秒內完成驗證。網頁端需要幾分鐘。行動端需要幾小時。回饋循環的速度與確定性直接決定了 AI 寫程式在各技術層的實際效果與可靠程度。驗證速度沿著光譜遞減,決定了 AI 編碼在哪裡能自主迭代、在哪裡必須仰賴人類的判斷。

AI 模型自己寫程式這件事本身並不有趣。有趣的是它生成程式碼之後發生的事:模型能以多快的速度知道程式碼是否正確?生成與驗證之間的回饋循環有多緊密? 這個循環決定了一切。它決定了模型能否迭代自己的輸出,決定了人類能否在不手動檢查的情況下信任輸出,也決定了 AI 寫程式究竟在哪些領域行得通。…

猴子、機關槍、aimbot:編碼團隊的 AI 治理

AI 程式碼治理不是要從初階開發者和 AI 代理人手中奪走工具,而是要安裝guardrails,讓每一發子彈都能命中目標而不造成附帶損害。

機關槍已經發下去了。 AdEspresso 共同創辦人暨 Unkover 首席 AI 長 Massimo Chieruzzi 精準地捕捉到了這一點:「AI 有時讓你覺得自己像一隻拿著機關槍的猴子。」我們同意。並從這個洞見中得出我們自己的:我們就是那隻猴子,槍已經在我們手中,問題不在於這兩者任何一方,而在於缺少瞄準。…

Mutation testing 跑四小時,團隊到底怎麼在 CI 裡用它?

大多數團隊不會在每次 commit 都跑完整的 mutation testing。這裡告訴你工程團隊如何實際把 mutation testing 整合進 CI,又不會搞爛 build pipeline。

如果你的 mutation testing suite 要跑四小時,恭喜你。你證實了大家早就猜到的事:你的測試有漏洞。 你不會在每次 push 都跑這個。沒有團隊這樣做。問題不是你能不能負擔每次 commit 四小時,而是你能不能承受程式碼測試通過了,卻根本沒有驗證任何東西。 Code coverage…

單元測試全綠,資料卻憑空消失

模擬資料庫測試只能驗證 SQL 語法,無法確認資料列是否能撐過當機、並發寫入或 schema 不符。以下是真的測試資料持久化的方法。

如果你在測試中使用模擬資料庫,你其實只是在驗證 repository 層是否呼叫了正確的方法。你並沒有測試資料能否在當機後存活、唯一約束是否真的阻止重複資料,或者transaction 失敗時是否會回滾。 這個差別很重要。模擬的 只會回傳你預設的結果。真正的…

恐懼 vs. 勢如破竹:AI 程式設計的兩種現實

AI 程式設計對能從任何混亂中恢復的精英團隊有效。其他人得到的只有恐懼、失敗的 CI,以及被放棄的實驗。差距不在於模型。

觀察兩個團隊使用同一個 AI 模型,你會看到兩種完全不同的結果。 第一個團隊向模型下達提示,要求構建一個畫面。輸出接近正確,但不完全對。樣式偏離了 Figma 檔案。狀態管理碰到了不該碰的檔案。建置在本機通過,但在 CI…

不用淹沒在 mock action 裡也能測試 Redux

把每個 Redux action 都 mock 掉,只會讓你的測試變成變更日誌驗證器。以下介紹如何改用真實的狀態轉換來測試你的 store。

如果你曾經寫過一個測試,去驗證 是否被以完全正確的 payload 形狀呼叫,那你其實寫了一個「只要有人重新命名常數就會壞掉」的測試。 這不是測試你的狀態邏輯。這是在測試你的手指有沒有打對字串。 Redux 測試教學通常從 Jest mock 開始:監聽 ,斷言 action creator 被呼叫了,斷言 type…

AI 輔助寫碼在生產環境中:為何大多數團隊半途而廢

大多數團隊嘗試 AI 輔助寫碼,交付的程式碼未能通過 QA,然後放棄。問題不在模型,而在於缺乏讓 AI 輸出值得信賴的防護機制。

大多數嘗試 AI 輔助寫碼的團隊,走的是同一條軌跡。 他們一開始充滿熱情。模型在幾分鐘內生成一項功能,他們交付出去。QA 捕捉到一個錯誤,於是他們交付一個修復。QA 又捕捉到另一個錯誤,這次是在一個本該毫無關聯的 module 裡。那個修復牽涉了十四個檔案,然後 QA 又發現了另外三個問題。…

跑 100 次測試是騙人的:如何真正決定 Property-Based Test 的執行次數

Property-based testing 預設跑 100 個範例是一種社交妥協,而非統計策略。以下是根據你的信心需求與 CI 預算來選擇執行次數的方法。

如果你用預設的 100 個範例來跑 property-based tests,那你等於同時承受了兩種壞處。你的 CI 比實際需要還慢,而且那些真正重要的 bug 你還是抓不到。 這個數字沒有什麼魔力。大多數函式庫,包括 Hypothesis 在內,預設設成 100…