4,798 research outputs found
Automatic Inference of Code Transforms and Search Spaces for Automatic Patch Generation Systems
We present a new system, Genesis, that processes sets of human patches to automatically infer code transforms and search spaces for automatic patch generation. We present results that characterize the effectiveness of the Genesis inference algorithms and the resulting complete Genesis patch generation system working with real-world patches and errors collected from top 1000 github Java software development projects. To the best of our knowledge, Genesis is the first system to automatically infer patch generation transforms or candidate patch search spaces from successful patches
FixMiner: Mining Relevant Fix Patterns for Automated Program Repair
Patching is a common activity in software development. It is generally
performed on a source code base to address bugs or add new functionalities. In
this context, given the recurrence of bugs across projects, the associated
similar patches can be leveraged to extract generic fix actions. While the
literature includes various approaches leveraging similarity among patches to
guide program repair, these approaches often do not yield fix patterns that are
tractable and reusable as actionable input to APR systems. In this paper, we
propose a systematic and automated approach to mining relevant and actionable
fix patterns based on an iterative clustering strategy applied to atomic
changes within patches. The goal of FixMiner is thus to infer separate and
reusable fix patterns that can be leveraged in other patch generation systems.
Our technique, FixMiner, leverages Rich Edit Script which is a specialized tree
structure of the edit scripts that captures the AST-level context of the code
changes. FixMiner uses different tree representations of Rich Edit Scripts for
each round of clustering to identify similar changes. These are abstract syntax
trees, edit actions trees, and code context trees. We have evaluated FixMiner
on thousands of software patches collected from open source projects.
Preliminary results show that we are able to mine accurate patterns,
efficiently exploiting change information in Rich Edit Scripts. We further
integrated the mined patterns to an automated program repair prototype,
PARFixMiner, with which we are able to correctly fix 26 bugs of the Defects4J
benchmark. Beyond this quantitative performance, we show that the mined fix
patterns are sufficiently relevant to produce patches with a high probability
of correctness: 81% of PARFixMiner's generated plausible patches are correct.Comment: 31 pages, 11 figure
Learning the Relation between Code Features and Code Transforms with Structured Prediction
We present in this paper the first approach for structurally predicting code
transforms at the level of AST nodes using conditional random fields. Our
approach first learns offline a probabilistic model that captures how certain
code transforms are applied to certain AST nodes, and then uses the learned
model to predict transforms for new, unseen code snippets. We implement our
approach in the context of repair transform prediction for Java programs. Our
implementation contains a set of carefully designed code features, deals with
the training data imbalance issue, and comprises transform constraints that are
specific to code. We conduct a large-scale experimental evaluation based on a
dataset of 4,590,679 bug fixing commits from real-world Java projects. The
experimental results show that our approach predicts the code transforms with a
success rate varying from 37.1% to 61.1% depending on the transforms
- …