Evaluating and Combining Fault Localization Techniques from Different Families

CombineFL - version 0.1

CombineFL is an infrastructure for evaluating and combining fault localization techniques for developers and researches.


1 Contents of CombineFL


2 Setting up

2.1 Requirements

2.2 Setting Steps

1. Download the tool at https://combinefl.github.io/downloads/CombineFL-v0.1.tar.gz

2. Unzip the TAR file:

  $ tar czvf CombineFL-v0.1.tar.gz


3 Using CombineFL

3.1 Use existing techniques

1 Combine techniques and Generate SVMRank file

  $ cd combinefl
  $ python 1-combine.py

2 Split file for k-fold validation:

  $ ./2-split.sh

3. Train and Predict in each fold:

  $ ./3-crossvalidation.sh

4. Calculate the metrics:

  $ python 4-calc-metric.py


3.2 Add your technique(s) to the infrastructure

1 Combine techniques and Generate SVMRank file

  $ cd combinefl
  $ python 1-combine.py -f <add-in-file-path>

2 Split file for k-fold validation:

  $ ./2-split.sh

3. Train and Predict in each fold:

  $ ./3-crossvalidation.sh

4. Calculate the metrics:

  $ python 4-calc-metric.py


3.3 Format for add-in data file

Standard JSON format.

For each fault in Defects4J dataset, use the project name and number. Format: <project><fault_number> Example: 'math1', 'time15'

For each suspicious statement, use the classname and line number. Such as: Format: <classname>:<linenumber> Example: 'com.google.javascript.rhino.Node:393'

For suspicious score, use a float in range (0, 1). Format: <method_name>: <score>

An add-in file example:

{
  "math1": {
    "org.apache.commons.math3.exception.util.LocalizedFormats:95": {
      "new_method1": 0.2,
      "new_method2": 0.5
    },
    "org.apache.commoms.math3.fraction.BigFraction:90": {
      "new_method1": 0.6,
      "new_method2": 0.1
    }
  },
  "time8": {
    "org.joda.time.tz.ZoneInfoProvider:201": {
      "new_method1": 0.1,
      "new_method2": 0.3
    }
  }
}

More detailed information is available in README file.