CI 紅了,你的第一個問題應該是:這是真的壞,還是測試在騙我? 測試報紅卻不是被測程式碼的錯,就是測試領域的誤報——而它有兩種典型樣態。

兩種「假紅燈」

  • flaky:同一份程式碼、什麼都沒改,卻時過時不過。問題在測試的不穩定(競態、時序、共用狀態)。
  • spurious failure:這次失敗的原因不是被測對象——是環境、網路、CI 機器的暫態。

為什麼要分清楚

因為修的地方不同:flaky 要修測試本身的不穩定,spurious failure 要修環境或基礎設施。更重要的是,把假紅燈和真失敗混在一起,會讓人養成「紅了先重跑」的反射,久了連真 bug 都被當假紅燈忽略——這就是測試版的告警疲勞

從這裡往下讀