一句话:通过统计模型区分 CI recheck 成功与否,节省开发者与计算时间。
持续集成(CI)常因 flaky 失败而误报,开发者需判断是否发出 recheck 重测补丁集;盲目重测浪费大量时间与算力。本文对 OpenStack 的 314,947 个 recheck 请求开展实证研究,拟合统计模型以区分会成功的 recheck(使失败 CI 转为成功)和会再次失败的 recheck。模型在 AUROC 上达 0.736,比基线高 23.6 个百分点;作业、机器人和用户的历史行为比补丁集静态特征更具解释力。若自动发起预测成功的 recheck,可节省约 247 年开发者时间;若在预测失败时跳过 recheck,可避免 86.49% 的浪费性重测,节省约 262 年计算时间。
Continuous Integration (CI) is a process for automatically checking patch sets for errors. CI periodically fails due to non-deterministic (a.k.a., "flaky") behaviour. Since a patch set may not be the cause of a flaky failure, developers can issue a "recheck" command to request retesting a patch set. Developers waste time considering whether or not to issue a recheck after a CI failure. Prior work also shows that rechecks are issued liberally, wasting up to 187.4 compute years when CI continues to fail. To save developer time and avoid wasteful rechecks, we fit and analyze statistical models that discriminate between successful and failing rechecks, i.e., those rechecks that will change a failing CI run into a successful one and those that will fail again. Through an empirical study of 314,947 recheck requests from OpenStack, we find that our model can differentiate successful and failed rechecks well, outperforming baseline approaches by 23.6 percentage points in terms of AUROC (0.736).Analysis of our model suggests that, in terms of explanatory power, past behaviour of jobs, bots, and users dominate static characteristics of patch sets. Applying our model to automatically request rechecks for those predicted to succeed would have saved roughly 247 years of elapsed developer time for OpenStack. Applying our model to skip recheck requests when they are predicted to fail would avoid 86.49% of wasted rechecks, saving roughly 262 years of compute time.
DOI 原文 ·
@inproceedings{paperbot9239,
title = {Rechecking Recheck Requests in Continuous Integration: An Empirical Study of OpenStack},
author = {Yelizaveta Brus and Rungroj Maipradit and Earl T. Barr and Shane McIntosh},
booktitle = {ASE},
year = {2025},
doi = {10.1109/ase63991.2025.00121}
}