片狀二分法

在機器人上,會在一個獨立的步驟中報告不穩定的測試 (範例建置)。

每個測試記錄都會提供一個預先填入的命令列,用於觸發自動化片狀二分法,例如

Trigger flake bisect on command line:
bb add v8/try.triggered/v8_flako -p 'to_revision="deadbeef"' -p 'test_name="MyTest"' ...

在第一次觸發片狀二分法之前,使用者必須使用 google.com 帳戶登入

bb auth-login

然後執行提供的命令,這會傳回一個執行片狀二分法的建置網址 (範例)。

如果您運氣好的話,二分法會將您導向一個可疑對象。如果不是,您可能想進一步閱讀…

詳細說明 #

有關技術詳細資訊,請參閱實作 追蹤錯誤。片狀二分法方法與 findit 的用意相同,但使用不同的實作。

它是如何運作的? #

一個二分法工作有 3 個階段:校準、向後和向內二分法。在校準期間,會重複測試,將總計時數(或重複次數)加倍,直到在一次執行中偵測到足夠的片狀。然後,向後二分法會將 git 範圍加倍,直到找到沒有片狀的版本。最後,我們將二分法區分為良好版本和最舊的錯誤版本。請注意,二分法不會產生新的建置產品,它完全基於先前在 V8 的持續基礎架構上建立的建置。

二分法會在下列情況下失敗… #

自訂片狀二分法的屬性 #

您不需要變更的屬性 #

提示和技巧 #

二分搜尋一個掛起的測試(例如死鎖)#

如果失敗的執行逾時,而通過的執行非常快速,則調整 timeout_sec 參數很有用,這樣二分搜尋就不會因為等待掛起的執行逾時而延遲。例如,如果通常在 <1 秒內達到通過,則將逾時設定為較小的值,例如 5 秒。

對可疑對象獲得更多信心 #

在某些執行中,信心非常低。例如,如果在一次執行中看到四個瑕疵,校正就會滿足。在二分搜尋期間,每次執行一個或多個瑕疵都會被計為不良。在這種情況下,重新啟動二分搜尋工作,將 to_revision 設定為罪魁禍首,並使用比原始工作更多的重複次數或總逾時時間,並確認再次得出相同的結論,這可能會很有用。

解決逾時問題 #

如果整體逾時選項導致建置掛起,最好估計重複次數並將 total_timeout_sec 設為 0

測試行為取決於隨機種子 #

很少見的情況下,程式碼路徑只會在特定隨機種子觸發。這種情況下,使用 extra_args 修復它可能會有幫助,例如 "extra_args": ["--random-seed=123"]。否則,壓力測試執行器會使用不同的隨機種子。但請注意,特定隨機種子可能會在一個版本中重現問題,但在另一個版本中不會。