Skip to content
All writing Part 04 of 09 · 一次 Golang 版本升級的連鎖反應
Engineering · 1 min read

被污染的測試基準會反轉你的診斷

當你信任的測試基準有缺陷時,它回傳的每個結果都是支持錯誤結論的證據。嚴謹用在壞 oracle 上只會更有信心地確認錯誤。

一個 GIF 影格數測試紅了,三層驗證都指向「libvips 8.18 回歸了」(regression:之前正常、更新後壞掉),直到我換了一張不同影格的測試圖——同一版 libvips,瞬間全綠。問題從來不在程式碼,而在餵進去的那張圖。

當你信任用來判定結果的測試本身有缺陷時,它回傳的每一個結果都是支持錯誤結論的證據。更仔細地重跑,只會用更高的信心確認錯誤。

fixture(測試輸入)verdict你接下來的結論
相同影格(synthetic)「libvips 8.18 回歸了」→ 釘版 3.20、graft、EOL base
不同影格(生產形態)「8.18 沒問題」→ 出貨 3.22、修 fixture

兩次跑的是同一版 libvips 8.18.4——只有輸入變了。

Oracle 從未故障;它回答了一個沒人想問的問題。這就是為什麼更多的嚴謹反而讓事情更糟:嚴謹會放大 oracle 正在測量的東西,而這裡它測量的是 fixture。

  • 徵兆: 一個紅測試驅動了一個巨大的結構性結論(「上游 lib 壞了」),但測試的輸入是 synthetic 的,從未接近過生產。
  • 嚴謹用在壞 oracle 上會發散。 三列版本表格看起來很徹底,但如果所有列共用一個有缺陷的輸入,它們都以同樣的方式說謊。
  • 攻擊輸入,不要重跑。 餵一個生產形態的輸入,看 verdict 是否翻轉。
  • 矛盾信號通常存在但被埋沒。 這裡是一行 log 證明影格被寫入了(見 GIF 編碼器合併相同影格是合法行為)。去找那個「如果你的診斷是對的就不該存在」的事實。

oracle 回答的問題,和你以為你問的問題,不一定是同一個。


Related: 回到連鎖反應總覽,或參見逐層下降隔離回歸問題GIF 編碼器合併相同影格是合法行為測試結果只是關於輸入的事實

Tags #devops #debugging #docker
// connect

Be brave | Be wise | Be grateful

21 BreakinCode

// elsewhere
LinkedInMedium (lang: en)Youtube
wh:~$William Hung· © 2026 Taipei · GMT+8 · Available for collaboration