一句话:提出 PaReco,用克隆检测从补丁池识别变体间的重复修补与漏补,并支持补丁回移。
论文关注以 fork 方式复用仓库时,原始项目与变体间公共构件未保持同步,导致同一补丁在一侧修复而另一侧遗漏(missed opportunity),或两侧由不同开发者重复修复(effort duplication)。提出工具 PaReco,基于克隆检测从补丁池挖掘这两类案例。分析 364 个源-目标变体对、8,323 个补丁,得到含 1,116 个重复修补和 1,008 个漏补机会的数据集,精确率 91%、召回率 80%、准确率 88%、F1 85%。还发现目标变体漏补平均比源变体晚 52 周引入,可用于按“时间”管理变异性,自动识别后续发布中应回移到早期支持的补丁。
Re-using whole repositories as a starting point for new projects is often done by maintaining a variant fork parallel to the original. However, the common artifacts between both are not always kept up to date. As a result, patches are not optimally integrated across the two repositories, which may lead to sub-optimal maintenance between the variant and the original project. A bug existing in both repositories can be patched in one but not the other (we see this as a missed opportunity) or it can be manually patched in both probably by different developers (we see this as effort duplication). In this paper we present a tool (named PaReCo) which relies on clone detection to mine cases of missed opportunity and effort duplication from a pool of patches. We analyzed 364 (source to target) variant pairs with 8,323 patches resulting in a curated dataset containing 1,116 cases of effort duplication and 1,008 cases of missed opportunities. We achieve a precision of 91%, recall of 80%, accuracy of 88%, and F1-score of 85%. Furthermore, we investigated the time interval between patches and found out that, on average, missed patches in the target variants have been introduced in the source variants 52 weeks earlier. Consequently, PaReCo can be used to manage variability in “time” by automatically identifying interesting patches in later project releases to be backported to supported earlier releases.
@inproceedings{paperbot7143,
title = {PaReco: patched clones and missed patches among the divergent variants of a software family},
author = {Poedjadevie Kadjel Ramkisoen and John Businge and Brent van Bladel and Alexandre Decan and Serge Demeyer and Coen De Roover and Foutse Khomh},
booktitle = {FSE},
year = {2022},
doi = {10.1145/3540250.3549112}
}