The SZZ algorithm is used to connect bug-fixing commits to the earlier commits that introduced bugs. This algorithm has many applications and many variants have been devised. However, there are some types of commits that cannot be traced by the SZZ algorithm, referred to as "ghost commits". The evaluation of how these ghost commits impact the SZZ algorithm remains limited. Moreover, these algorithms have been evaluated on datasets created by software engineering researchers from information in bug trackers and version controlled histories. Since Oct 2013, the Linux kernel developers have started labelling bug-fixing patches with the commit identifiers of the corresponding bug-inducing commit(s) as a standard practice. As of v6.1-rc5, 76,046 pairs of bug-fixing patches and bug-inducing commits are available. This provides a unique opportunity to evaluate the SZZ algorithm on a large dataset that has been created and reviewed by project developers, entirely independently of the biases of software engineering researchers. In this paper, we apply six SZZ algorithms to 76,046 pairs of bug-fixing patches and bug-introducing commits from the Linux kernel. Our findings reveal that SZZ algorithms experience a more significant decline in recall on our dataset (13.8%) as compared to prior findings reported by Rosa et al., and the disparities between the individual SZZ algorithms diminish. Moreover, we find that 17.47% of bug-fixing commits are ghost commits. Finally, we propose Tracing-Commit SZZ (TC-SZZ), that traces all commits in the change history of lines modified or deleted in bug-fixing commits. Applying TC-SZZ to all failure cases, excluding ghost commits, we found that TC-SZZ could identify 17.7% of them. Our further analysis found that 34.6% of bug-inducing commits were in the function history, 27.5% in the file history (but not in the function history), and...
翻译:SZZ算法用于将修复Bug的提交与引入Bug的早期提交关联起来。该算法具有众多应用场景,并衍生出多种变体。然而,存在某些类型的提交无法被SZZ算法追踪,被称为"幽灵提交"。这些幽灵提交对SZZ算法影响的评估仍十分有限。此外,这些算法此前均基于软件工程研究人员利用缺陷追踪系统与版本控制历史信息构建的数据集进行评估。自2013年10月起,Linux内核开发者开始将Bug修复补丁与对应Bug引入提交的提交标识符进行标注作为标准实践。截至v6.1-rc5版本,已获得76,046对修复补丁与引入Bug的提交。这为在完全独立于软件工程研究人员偏见、由项目开发者创建并审查的大规模数据集上评估SZZ算法提供了独特契机。本文针对Linux内核的76,046对修复补丁与引入Bug的提交应用了六种SZZ算法。研究发现,与Rosa等人先前报告的结果相比,SZZ算法在我们数据集上的召回率下降更为显著(下降13.8%),且各SZZ算法之间的性能差异有所缩小。此外,我们发现17.47%的Bug修复提交属于幽灵提交。最后,我们提出追踪提交SZZ(TC-SZZ),该算法能追踪修复提交中修改或删除行变更历史中的所有提交。将TC-SZZ应用于除幽灵提交外的所有失败案例后,发现TC-SZZ能识别其中17.7%的案例。进一步分析表明,34.6%的Bug引入提交位于函数历史中,27.5%位于文件历史中(而非函数历史中),以及……