test-quality

5 posts

Auth 程式碼需要 90% mutation coverage。你的 string utils 不需要。

為何在整個 codebase 強制套用單一 mutation score 是錯的,以及如何根據實際風險設定各模組的門檻。

在整個 codebase 強制套用單一的 mutation score,是讓團隊討厭寫測試的絕招。 拿 PIT 或 Stryker 跑一個典型的 repo,你會看到同樣的模式:auth 模組只有 40%,string utilities 衝到 95%,ORM 層則卡在 60 幾趴。本能反應是設一個 70%…

你的測試全過了,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…

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

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

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

你的單元測試過了。你的正式環境程式碼還是壞的。

程式碼覆蓋率指標製造了虛假的安全感。以下是單元測試為何總是漏掉那些讓你睡不著的 bug,以及你該改測什麼。

你有 90% 的程式碼覆蓋率,凌晨兩點還是被 on-call 警報吵醒。 單元測試全過了。CI 也是綠燈。bug 還是進了正式環境。覆蓋率沒有說謊,但也沒有說出真相。它只衡量了哪些行被執行過,沒衡量哪些行為真的被驗證過。…