一句话:通过4万余合并场景的实证比较,揭示半结构化与结构化合并的冲突报告差异及假阳性/假阴性特征。
开发者并发修改同一代码工件时常产生合并冲突。半结构化与结构化合并工具均试图利用语法结构提高自动合并能力,但二者差异尚不清楚。本文通过重现500多个项目中的4万多个合并场景,实证比较两种策略,评估结果差异、假阳性(错误报告)与假阴性(漏报)。结果显示,在含冲突场景中24%的结果不同;半结构化合并报告更多假阳性,结构化合并则漏报更多;将半结构化工具适配以解决特定类型冲突后,两种合并结果更加接近。
Merge conflicts often occur when developers concurrently change the same code artifacts. While state of practice unstructured merge tools (e.g Git merge) try to automatically resolve merge conflicts based on textual similarity, semistructured and structured merge tools try to go further by exploiting the syntactic structure and semantics of the artifacts involved. Although there is evidence that semistructured merge has significant advantages over unstructured merge, and that structured merge reports significantly fewer conflicts than unstructured merge, it is unknown how semistructured merge compares with structured merge. To help developers decide which kind of tool to use, we compare semistructured and structured merge in an empirical study by reproducing more than 40,000 merge scenarios from more than 500 projects. In particular, we assess how often the two merge strategies report different results, we identify conflicts incorrectly reported by one but not by the other (false positives), and conflicts correctly reported by one but missed by the other (false negatives). Our results show that semistructured and structured merge differ in 24% of the scenarios with conflicts. Semistructured merge reports more false positives, whereas structured merge has more false negatives. Finally, we found that adapting a semistructured merge tool to resolve a particular kind of conflict makes semistructured and structured merge even closer.
DOI 原文 ·
@inproceedings{paperbot5271,
title = {The Impact of Structure on Software Merging: Semistructured Versus Structured Merge},
author = {Guilherme Cavalcanti and Paulo Borba and Georg Seibt and Sven Apel},
booktitle = {ASE},
year = {2019},
doi = {10.1109/ase.2019.00097}
}