不穩定測試的共同失敗分群

不穩定(flaky)測試很少是獨立的:搖晃的共用 fixture、緩慢的相依、或吵雜的環境,會讓*一群*測試在 相同的執行中一起失敗(研究發現約 75% 的 flaky 測試落在共同失敗的群集裡)。逐一以翻轉率排名測試 會錯過這個共同根因。flake_cluster 量測每對測試多常在*相同*執行中失敗——即各自失敗的執行集合 之間的 Jaccard 相似度——並把共同失敗超過門檻的測試分群,讓你能追一個根因,而非 N 個症狀。

  • cofailure_pairs() ——共同失敗超過門檻的測試對,

  • failure_clusters() ——共同失敗測試的連通群集,附凝聚度分數(群內平均成對 Jaccard)。

輸入是一份執行清單,每個元素為該次執行中失敗的測試名稱集合。純標準庫;不涉及裝置,不匯入 PySide6

無頭 API

from je_auto_control import failure_clusters, cofailure_pairs

runs = [["test_a", "test_b"],            # 這次執行兩者皆失敗
        ["test_a", "test_b"],
        ["test_c"],
        ["test_a", "test_b", "test_c"]]

failure_clusters(runs, threshold=0.6)
# [{"tests": ["test_a", "test_b"], "size": 2, "cohesion": 1.0}]

cofailure_pairs(runs, threshold=0.6)
# [{"tests": ["test_a", "test_b"], "jaccard": 1.0, "co_failures": 3}]

threshold 是連結兩測試所需的最小共同失敗 Jaccard;``min_size``(預設 2)會丟棄單例, 讓只有真正的群集浮現。群集以最大 / 最凝聚者在前回傳。

執行器指令

AC_failure_clusters``(``runs / threshold / min_size)與 AC_cofailure_pairs``(``runs / threshold)。皆以唯讀 ac_* MCP 工具及 Script Builder 指令(位於 Testing 分類下)形式提供。