不穩定的測試政策

本文件革新了在 Fuchsia 與測試片段互動的最佳做法。

背景:什麼是不穩定的測試?

「不穩定測試」是指使用完全相同的程式碼版本執行時,有時通過的測試,有時則會失敗。

不穩定測試的缺點是:

  • 因現實錯誤而漏掉我們的修訂佇列 (CQ) 基礎架構。
  • 將值視為有用的測試。
  • 提高 CQ 的失敗率,進而增加修改程式碼的延遲時間。

本文件專供「測試片段」使用,不適用於基礎架構構件。

需求條件:不穩定的測試目標

  1. 請盡快從 CQ 的重要路徑移除災難復原
  2. 由於花片將本身顯示為失敗測試,因此從 CQ 取出後,不應忽略花朵。它們代表了需要修正的實際問題。
  3. 測試隨時都可能發生,因此這些錯誤的觀察者不一定是最適合修正問題的人員。回報錯誤的流程必須快速、輕鬆,並分離診斷及修補。

政策

下列函式提供此作業的預期生命週期:

  1. CI 或 CQ 中的測試花。
  2. 識別:系統會「自動」將測試識別為浮點。
  3. 追蹤:系統會針對已識別的 Flake 元件,「自動」提交問題。
  4. 移除:系統會立即從 CQ 中移除測試。
  5. 修正內容:違規測試在離線狀態已修正並重新啟用。

辨識

目前,正在使用剪貼簿擷取工具來識別絕大多數的 Flake。

這項工具會尋找 CQ 中的測試失敗,找出在相同修補程式集重新嘗試時,相同的測試成功。

移除

建議優先採用,從修訂佇列中移除測試。您可以透過下列方式完成:

  • 如果近期的修補程式已提示片段:提交還原此作業的修補程式。
  • 停用測試

建議採用上述機制,因為這種機制會移除不穩定的測試,防止修訂佇列變得不穩定。建議採用第一個選項 (復原程式碼),但比第二個選項 (停用測試) 不簡單,因此可降低測試涵蓋率。很重要的一點是,這兩種方法都無法診斷及修正災難復原的問題,但可離線處理。

建議您先嘗試從 CQ 中移除測試,再嘗試修正測試。這會導致 CQ 對所有其他貢獻器的穩定度不穩定,進而允許在程式碼集內進行其他函式的複合作業。

修正方法

此時,我們可以取用已提交的問題、在本機重新啟用測試,並努力重現失敗。這有助於他們找出根本原因並修正問題。問題修正後,就可以關閉錯誤及重新啟用測試。如果所有還原的修補程式需要重新行駛,仍可安全重新地存放。

修正片段時,請在 CQ 中測試不穩定性,藉此驗證修正結果。