一句话:提出基于图分割的交互式变更集分解工具 SmartCommit,帮助开发者提交活动导向的原子提交。
在协同软件开发中,将代码变更作为一系列内聚提交提交被认为是最佳实践,但开发者常因手工分解繁琐且缺乏有效工具支持,而提交混合多个开发活动的复合提交。本文提出 SmartCommit,一种基于图分割的交互式纠缠变更集分解方法,既利用算法效率,也引入开发者知识。评估包括两部分:在一家国际 IT 公司部署,分析 83 名工程师 9 个月的现场使用数据;并对来自 10 个开源项目的 3000 个合成复合提交进行受控实验。结果表明,在无开发者参与时,SmartCommit 的分解中位准确率为 71–84%,并在真实协同开发中以可接受的交互成本和时间帮助开发者遵循活动导向提交的最佳实践。
In collaborative software development, it is considered to be a best practice to submit code changes as a sequence of cohesive commits, each of which records the work result of a specific development activity, such as adding a new feature, bug fixing, and refactoring. However, rather than following this best practice, developers often submit a set of loosely-related changes serving for different development activities as a composite commit, due to the tedious manual work and lack of effective tool support to decompose such a tangled changeset. Composite commits often obfuscate the change history of software artifacts and bring challenges to efficient collaboration among developers. To encourage activity-oriented commits, we propose SmartCommit, a graph-partitioning-based interactive approach to tangled changeset decomposition that leverages not only the efficiency of algorithms but also the knowledge of developers. To evaluate the effectiveness of our approach, we (1) deployed SmartCommit in an international IT company, and analyzed usage data collected from a field study with 83 engineers over 9 months; and (2) conducted a controlled experiment on 3,000 synthetic composite commits from 10 diverse open-source projects. Results show that SmartCommit achieves a median accuracy between 71–84% when decomposing composite commits without developer involvement, and significantly helps developers follow the best practice of submitting activity-oriented commits with acceptable interaction effort and time cost in real collaborative software development.
DOI 原文 ·
@inproceedings{paperbot6317,
title = {SmartCommit: a graph-based interactive assistant for activity-oriented commits},
author = {Bo Shen and Wei Zhang and Christian Kästner and Haiyan Zhao and Zhao Wei and Guangtai Liang and Zhi Jin},
booktitle = {FSE},
year = {2021},
doi = {10.1145/3468264.3468551}
}