Megadiff
收藏arXiv2021-08-10 更新2024-06-21 收录
下载链接:
https://github.com/monperrus/megadiff
下载链接
链接失效反馈官方服务:
资源简介:
Megadiff是一个专注于Java语言的大型数据集,包含663,029个源代码变更,由马丁·蒙佩鲁斯等研究者创建。该数据集通过严格的提交信息和变更大小标准筛选,确保数据质量。数据集内容包括从1到40行代码变更的详细记录,涵盖了广泛的代码修改类型。创建过程中,研究者使用了BOA平台进行数据挖掘和筛选,确保了数据的系统性和可用性。Megadiff主要用于软件系统的演化研究、故障定位、自动化程序修复和机器学习在代码变更分析中的应用,旨在解决软件开发中的多种技术挑战。
Megadiff is a large-scale dataset focused on the Java programming language, containing 663,029 source code changes, created by researchers including Martin Monperrus et al. This dataset is filtered against strict commit message and change size criteria to ensure high data quality. It includes detailed records of code changes ranging from 1 to 40 lines, covering a wide range of code modification types. During its construction, researchers utilized the BOA platform for data mining and screening to guarantee the systematic nature and usability of the dataset. Megadiff is primarily used for software system evolution research, fault localization, automated program repair, and machine learning applications in code change analysis, aiming to address various technical challenges in software development.
提供机构:
马丁·蒙佩鲁斯马蒂亚斯·马丁内斯何烨费尔南达·马德拉尔托马斯·杜里克斯钟兴宇
创建时间:
2021-08-10
搜集汇总
数据集介绍

构建方式
在软件工程研究领域,大规模、高质量的源代码变更数据集对于理解软件演化规律至关重要。Megadiff的构建依托于BOA平台,该平台为挖掘软件仓库提供了专用语言和基础设施。研究团队选取了包含超过38万个代码仓库和2300万次提交的“2015 September/GitHub”数据集作为基础,通过精心设计的查询语句筛选出涉及Java项目的修复性提交。随后,对提交进行严格过滤,仅保留变更行数在40行以内的Java源代码文件变更,确保数据集聚焦于小规模修改。最终,通过提取包含完整上下文的原始差异文件,形成了包含663,029个Java差异的数据集,整个过程历时数周计算,体现了大规模数据处理的工程严谨性。
使用方法
Megadiff为多个软件工程研究领域提供了丰富的数据基础。在软件演化分析方面,研究者可通过对差异内容的深入挖掘,识别与分类不同的软件维护活动,如缺陷修复、功能改进或适应性调整。在自动化程序修复领域,该数据集可作为监督式机器学习模型的训练素材,帮助系统学习人类开发者的代码转换模式。此外,Megadiff还能用于评估各类代码分析工具的性能,例如测试抽象语法树差异提取算法的有效性。数据集以Git仓库形式发布,并永久存档于Zenodo,每个差异文件均以提交哈希命名,方便研究者直接追溯其在原始项目中的上下文,确保了研究过程的透明性与可复现性。
背景与挑战
背景概述
在软件工程领域,源代码变更分析对于理解软件演化规律、提升开发效率具有核心价值。Megadiff数据集由Martin Monperrus、Fernanda Madeiral等研究人员于2019年创建,旨在解决源代码差异研究领域的数据可复现性问题。该数据集聚焦Java语言,通过BOA平台从超过38万个代码仓库中系统性地收集了663,029个经过严格筛选的代码变更记录。其核心研究目标是为提交理解、故障定位、自动化程序修复等任务提供大规模、高质量的基础数据,推动基于代码变更的机器学习研究发展。作为当前规模最大的Java差异数据集,Megadiff通过公开原始数据与明确纳入标准,显著提升了相关研究的可比性与可复现性。
当前挑战
Megadiff数据集致力于解决源代码变更分析领域的核心挑战:如何构建能够支撑多样化研究任务的大规模、标准化差异数据集。在领域问题层面,该数据集需要克服传统研究中存在的三个主要障碍:一是数据私有化导致的比较研究困难;二是纳入标准不透明造成的质量差异;三是预处理格式固化限制的数据复用性。在构建过程中,研究团队面临大规模数据采集与处理的复杂性挑战,包括从海量GitHub仓库中筛选符合条件的Java提交、处理因项目失效导致的数据丢失问题,以及在存储预算限制下合理设定差异规模阈值。此外,确保原始代码的完整保留与系统化分类,同时维持数据集的可用性与可扩展性,构成了数据集构建过程中的多重技术挑战。
常用场景
经典使用场景
在软件工程研究领域,源代码变更分析是理解软件演化规律的核心手段。Megadiff数据集以其规模庞大、标注精细的Java代码差异集合,为研究者提供了分析小型代码变更行为的标准化平台。该数据集最经典的使用场景在于支持基于机器学习的程序自动修复研究,研究者可利用其中包含的数十万条真实修复提交,训练模型学习开发者修复错误的模式,进而生成可信的补丁建议。这种基于大规模真实变更数据的学习方法,显著提升了自动程序修复工具的准确性和实用性。
解决学术问题
该数据集有效解决了软件工程研究中源代码变更数据缺乏标准化与可复现性的关键问题。传统研究中,研究者往往需要自行构建特定任务的临时数据集,导致实验基准不统一、结果难以比较。Megadiff通过提供公开可获取、包含完整上下文信息且按变更规模分类的Java代码差异集合,为提交理解、缺陷定位、程序修复等研究方向建立了可靠的数据基础。其系统化的收集标准和完整的原始数据保存机制,保障了研究实验的科学严谨性,推动了相关领域的规范化发展。
实际应用
在实际软件开发场景中,Megadiff数据集为构建智能开发辅助工具提供了宝贵的数据资源。基于该数据集训练的模型可集成到集成开发环境中,实现代码审查自动化、缺陷模式识别和修复建议生成等功能。例如,工具可分析开发者当前编写的代码变更,与数据集中相似的历史修复模式进行匹配,实时提示潜在的改进方案或错误风险。这种数据驱动的智能辅助能力,能够显著提升开发效率,降低软件维护成本,促进高质量软件系统的构建。
数据集最近研究
最新研究方向
在软件工程领域,代码变更分析是理解软件演化过程与提升开发效率的关键环节。Megadiff作为当前规模最大的Java源代码变更数据集,为前沿研究提供了丰富的数据基础。近年来,该数据集被广泛应用于自动化程序修复领域,特别是基于机器学习的补丁生成技术,研究人员利用其海量的小规模变更样本训练模型,以模拟开发者的修复行为并提升修复准确性。同时,Megadiff支持软件维护活动的细粒度分类研究,例如通过分析变更模式识别缺陷修复、功能增强等不同维护类型,进而优化开发工具的设计。此外,该数据集在评估代码差异分析工具的性能方面也展现出重要价值,为超参数优化等实验提供了标准化基准。这些研究方向不仅推动了软件演化理论的深化,也为构建智能化的软件开发辅助系统奠定了数据支撑。
相关研究论文
- 1Megadiff: A Dataset of 600k Java Source Code Changes Categorized by Diff Size马丁·蒙佩鲁斯马蒂亚斯·马丁内斯何烨费尔南达·马德拉尔托马斯·杜里克斯钟兴宇 · 2021年
以上内容由遇见数据集搜集并总结生成



