一句话:提出 BugMiner,从代码演化历史中自动隔离关键变更以构建精确缺陷数据集,并实现缺陷类型自动分类。
现有缺陷数据集依赖人工构建、难以规模化,且缺乏缺陷引入与修复的精确信息及类型标注。BugMiner 通过分析代码仓库演化历史,隔离导致缺陷的关键变更,自动采集缺陷及其引入和修复位置;同时提出基于学习的缺陷类型分类方法,仅需少量人工标注即可扩展类型标签。作者从 100 个开源项目自动挖掘 2,082 个缺陷,评估缺陷信息精度与挖掘效率,并在修复位置识别上优于 SOTA BugBuilder,缺陷引入位置识别取得高召回与高精度;相比传统分类基线,宏 F1 提升约 17%。
Bugs and their fixes in the code evolution histories are important assets for many software engineering tasks such as deriving new state-of-the-art automatic bug fixing techniques. Existing bug datasets are either manually built which is difficult to grow efficiently to a scale large enough for massive data analysis, or lack of precise information of how bugs are introduced and fixed which is critical for in-depth analysis such as buggy/fixing code identification. Moreover, the types of the bugs are typically missing in the existing bug datasets, limiting the possibility of developing high-precision type-specific approaches for enterprise-level purposes. In this work, we propose BugMiner, an approach to automatically collecting bugs from code repositories by isolating the critical changes of the bugs. We also propose a learning-based approach for automating bug type classification with relatively small manual labels of bug types. We evaluate our approach regarding the precision of bug information and the efficiency of the bug-mining process with 2,082 bugs automatically mined from 100 open-source projects. We demonstrate the improved effectiveness and efficiency in bug-fixing location identification, compared to the SOTA BugBuilder, and high recall and precision in bug-inducing location identification. We also compare our learning-based bug classification approach to traditional baseline method, indicating about 17 % improvement in classification effectiveness under macro-F1.
@inproceedings{SongWCCLLWP23,
title = {BugMiner: Automating Precise Bug Dataset Construction by Code Evolution History Mining},
author = {Xuezhi Song and Yijian Wu and Junming Cao and Bihuan Chen and Yun Lin and Zhengjie Lu and Dingji Wang and Xin Peng},
booktitle = {ASE},
year = {2023},
doi = {10.1109/ase56229.2023.00201}
}