Multi-Objective GP for Automated Repair of Java
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin/us/msu/cse/repair
external
lib
src
.DS_Store
.gitignore
README.md

README.md

ARJA

ARJA is a new genetic programming (GP) based program repair approach for Java. ARJA is mainly characterized with a novel patch representation for GP, multi-objective search, test filtering procedure, type matching and several strategies to reduce the search space. This tool provides the implementation of ARJA along with three previous notable repair approaches (i.e., GenProg, RSRepair and Kali).

Requirements

  1. Java JDK 1.7
  2. Mac OS X or Linux

How to Run

Set Up

First, clone ARJA to the local computer:

$ git clone https://github.com/yyxhdy/arja

There are four subdirectories in the root directory of the tool.

  1. ../arja/src : the source code of the tool
  2. ../arja/bin : the compiled classes of the tool
  3. ../arja/lib : the dependences of the tool (including a number of .jar files)
  4. ../arja/external : the external project

Minimum Usage

Enter into the root directory of the tool:

$ cd arja

Confirm that the current version of Java is JDK 1.7 and use the following command to run:

$ java -cp lib/*:bin us.msu.cse.repair.Main Arja -DsrcJavaDir path_to_directory_of_src_buggy \
                                                 -DbinJavaDir path_to_directory_of_binary_source_buggy \
                                                 -DbinTestDir path_to_directory_of_binary_test_buggy \
                                                 -Ddependences paths_to_dependences_buggy 

"Arja" means that the repair approach ARJA is run. Alternatively, "GenProg", "RSRepair" and "Kali" can be used. Moreover, at least four parameters related with the bugyy program are required.

  1. -DsrcJavaDir :  the path to the root directory of the source code
  2. -DbinJavaDir :  the path to the root directory of all the compiled classes of source code
  3. -DbinTestDir : the path to the root directory of all the compiled classes of test code
  4. -Ddependences : the paths to the the dependences (jar files). If more than one, separated by ":"

In the above command, "path_to_directory_of_src_buggy" etc should be replaced with the actual absolute paths (the tool currently only supports absolute paths). All the test-suite adequate patches found by the approach are saved in the directory arja/patches_$id$.txt by default. $id$ is a randomly generated string containing four characters.

Advanced Usage

The tool provides the other parameters to configure the repair approaches. The following command can be used to list all the parameters (including the description) available for each repair apporach.

$ java -cp lib/*:bin us.msu.cse.repair.Main -listParameters

The following is an example to use more than four parameters:

$ java -cp lib/*:bin us.msu.cse.repair.Main Arja -DsrcJavaDir path_to_directory_of_src_buggy \
                                                 -DbinJavaDir path_to_directory_of_binary_source_buggy \
                                                 -DbinTestDir path_to_directory_of_binary_test_buggy \
                                                 -Ddependences paths_to_dependences_buggy \
                                                 -DpopulationSize value_of_population_size \
                                                 -DgzoltarDataDir path_to_directory_of_Gzoltar_output \

In this command, the parameter -DpopulationSize sets the population size of ARJA to "value_of_population_size"; the parameter -DgzoltarDataDir specifies the path to the root directory of the Gzoltar 1.6.2 output (see http://www.gzoltar.com/command-line.html).

How to Build

The users can also compile the tool themselves. First, enter into the root directory of the tool and clean the original binaries:

$ cd arja
$ rm -r bin

Then, compile the source code of the tool, and the compiled classes are saved in the directory "bin":

$ mkdir bin
$ javac -cp lib/*: -d bin $(find src -name '*.java')

Similarily, the external project is compiled as follows:

$ cd external
$ rm -r bin
$ mkdir bin
$ javac -cp lib/*: -d bin $(find src -name '*.java')

Evaluation

Our implemented approaches in this tool, including ARJA, GenProg, RSRepair and Kali, have been evaluated on 224 bugs in Defects4J (https://github.com/rjust/defects4j).

The test-suite adequate patches generated by these repair approaches are available at http://github.com/yyxhdy/defects4j-patches

We manually evaluate the correctness of the patches generated by ARJA. The detailed analysis of the patch correctness is available at http://github.com/yyxhdy/defects4j-correctness

Contact

For questions and feedback, please contact yyxhdy@gmail.com