flaky:時綠時紅的測試
flaky:時綠時紅的測試
這個詞出現在「測試紅燈不一定是真的壞」這個問題裡。
flaky test(不穩定測試)指同一份程式碼、同一個測試,什麼都沒改,卻有時過有時不過。
它是測試領域的 false positive——測試報紅、但被測的程式碼其實沒問題——而 flaky 特指其中「間歇、非確定性」的那種。
常見成因
- 競態(race condition)、依賴執行順序。
- 時間依賴:sleep、timeout、時鐘、時區。
- 共用狀態沒清乾淨:測試之間互相污染。
- 外部依賴:網路、第三方服務的暫態抖動。
為何危險
flaky 會侵蝕對測試套件的信任:紅了第一反應是點重跑而不是查 bug,久了連真的失敗也被當 flaky 忽略——這是測試版的 alert fatigue。
與 spurious failure 的區別
flaky 強調「間歇重現」(重跑可能就過);spurious failure 強調「這次失敗的原因不是被測對象」,不一定間歇。兩者都是測試的 false positive,角度不同。
相關概念
- 上位概念:false positive。
- 近鄰:spurious failure、後果 alert fatigue。