Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.vscode/

# Created by https://www.toptal.com/developers/gitignore/api/intellij+all,maven
# Edit at https://www.toptal.com/developers/gitignore?templates=intellij+all,maven
Expand Down
2 changes: 1 addition & 1 deletion INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ You can also run DiffDetective on other datasets by providing the path to the da
#### Linux/Mac (bash):
`./execute.sh path/to/custom/dataset.md`

The input file must have the same format as the other dataset files (i.e., repositories are listed in a Markdown table). You can find [dataset files](docs/datasets.md) in the [docs](docs) folder.
The input file must have the same format as the other dataset files (i.e., repositories are listed in a Markdown table). You can find [dataset files](docs/datasets/all.md) in the [docs/datasets](docs/datasets) folder.

## Troubleshooting

Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ This replication package consists of four parts:
1. **DiffDetective**: For our validation, we built _DiffDetective_, a java library and command-line tool to classify edits to variability in git histories of preprocessor-based software product lines.
2. **Appendix**: The appendix of our paper is given in PDF format in the file [appendix.pdf][appendix].
3. **Haskell Formalization**: We provide an extended formalization in the Haskell programming language as described in our appendix. Its implementation can be found in the Haskell project in the [proofs](proofs) directory.
4. **Dataset Overview**: We provide an overview of the 44 inspected datasets with updated links to their repositories in the file [docs/datasets.md][dataset].
4. **Dataset Overview**: We provide an overview of the 44 inspected datasets with updated links to their repositories in the file [docs/datasets/all.md][dataset].

## 1. DiffDetective
DiffDetective is a java library and command-line tool to parse and classify edits to variability in git histories of preprocessor-based software product lines by creating [variation diffs][difftree_class] and operating on them.
Expand Down Expand Up @@ -70,7 +70,7 @@ Moreover, the results comprise the (LaTeX) tables that are part of our paper and

DiffDetective is documented with javadoc. The documentation can be accessed on this [website][documentation]. Notable classes of our library are:
- [DiffTree](https://variantsync.github.io/DiffDetective/docs/javadoc/org/variantsync/diffdetective/diff/difftree/DiffTree.html) and [DiffNode](https://variantsync.github.io/DiffDetective/docs/javadoc/org/variantsync/diffdetective/diff/difftree/DiffNode.html) implement variation diffs from our paper. A variation diff is represented by an instance of the `DiffTree` class. It stores the root node of the diff and offers various methods to parse, traverse, and analyze variation diffs. `DiffNode`s represent individual nodes within a variation diff.
- [Validation](https://variantsync.github.io/DiffDetective/docs/javadoc/org/variantsync/diffdetective/validation/Validation.html) contains the main method for our validation.
- [EditClassValidation](https://variantsync.github.io/DiffDetective/docs/javadoc/org/variantsync/diffdetective/validation/EditClassValidation.html) contains the main method for our validation.
- [ProposedEditClasses](https://variantsync.github.io/DiffDetective/docs/javadoc/org/variantsync/diffdetective/editclass/proposed/ProposedEditClasses.html) holds the catalog of the nine edit classes we proposed in our paper. It implements the interface [EditClassCatalogue](https://variantsync.github.io/DiffDetective/docs/javadoc/org/variantsync/diffdetective/editclass/EditClassCatalogue.html), which allows to define custom edit classifications.
- [BooleanAbstraction](https://variantsync.github.io/DiffDetective/docs/javadoc/org/variantsync/diffdetective/feature/BooleanAbstraction.html) contains data and methods for boolean abstraction of higher-order logic formulas. We use this for macro parsing.
- [GitDiffer](https://variantsync.github.io/DiffDetective/docs/javadoc/org/variantsync/diffdetective/diff/GitDiffer.html) may parse the history of a git repository to variation diffs.
Expand All @@ -93,13 +93,13 @@ How to build our library and how to run the example is described in the [proofs/

## 4. Dataset Overview
### 4.1 Open-Source Repositories
We provide an overview of the used 44 open-source preprocessor-based software product lines in the [docs/datasets.md][dataset] file.
We provide an overview of the used 44 open-source preprocessor-based software product lines in the [docs/datasets/all.md][dataset] file.
As described in our paper in Section 5.1, this list contains all systems that were studied by Liebig et al., extended by four new subject systems (Busybox, Marlin, LibSSH, Godot).
We provide updated links for each system's repository.

### 4.2 Forked Repositories for Replication
To guarantee the exact replication of our validation, we created forks of all 44 open-source repositories at the state we performed the validation for our paper.
The forked repositories are listed in the [replication datasets](docs/replication/datasets.md) and are located at the Github user profile [DiffDetective](https://github.com/DiffDetective?tab=repositories).
The forked repositories are listed in the [replication datasets](docs/datasets/esecfse22-replication.md.md) and are located at the Github user profile [DiffDetective](https://github.com/DiffDetective?tab=repositories).
These repositories are used when running the replication as described under `1.2` and in the [INSTALL](INSTALL.md).

## 5. Running DiffDetective on Custom Datasets
Expand All @@ -110,11 +110,11 @@ You can also run DiffDetective on other datasets by providing the path to the da
#### Linux/Mac (bash):
`./execute.sh path/to/custom/dataset.md`

The input file must have the same format as the other dataset files (i.e., repositories are listed in a Markdown table). You can find [dataset files](docs/datasets.md) in the [docs](docs) folder.
The input file must have the same format as the other dataset files (i.e., repositories are listed in a Markdown table). You can find [dataset files](docs/datasets/all.md) in the [docs/datasets](docs/datasets) folder.

[difftree_class]: https://variantsync.github.io/DiffDetective/docs/javadoc/org/variantsync/diffdetective/diff/difftree/DiffTree.html
[haskell]: https://www.haskell.org/
[dataset]: docs/datasets.md
[dataset]: docs/datasets/all.md
[appendix]: appendix.pdf

[documentation]: https://variantsync.github.io/DiffDetective/docs/javadoc/
Expand Down
6 changes: 3 additions & 3 deletions STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ The artifact for the paper _Classifying Edits to Variability in Source Code_ con
Practitioners and researches are free to ignore the appendix as well as the haskell formalization and may use DiffDetective out-of-the-box.
2. **Appendix**: The appendix of our paper is given in PDF format in the file [`appendix.pdf`][ddappendix].
3. **Haskell Formalization**: We provide an extended formalization in the Haskell programming language as described in our appendix. Its implementation can be found in the Haskell project in the [`proofs`][ddproofs] directory.
4. **Dataset Overview**: We provide an overview of the 44 inspected open-source software product lines with updated links to their repositories in the file [docs/datasets.md][dddatasets].
4. **Dataset Overview**: We provide an overview of the 44 inspected open-source software product lines with updated links to their repositories in the file [docs/datasets/all.md][dddatasets].

## Purpose
Our artifact has the following purposes:
Expand Down Expand Up @@ -44,6 +44,6 @@ Furthermore, both DiffDetective and our Haskell formalization serve as reference
[ddappendix]: https://github.com/VariantSync/DiffDetective/raw/esecfse22/appendix.pdf
[ddproofs]: https://github.com/VariantSync/DiffDetective/tree/esecfse22/proofs
[ddlicense]: https://github.com/VariantSync/DiffDetective/blob/main/LICENSE.LGPL3
[dddatasets]: docs/datasets.md
[ddforks]: docs/replication/datasets.md
[dddatasets]: docs/datasets/all.md
[ddforks]: docs/datasets/esecfse22-replication.md
[dddocumentation]: https://variantsync.github.io/DiffDetective/docs/javadoc/
10 changes: 5 additions & 5 deletions docker/execute.sh
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#! /bin/bash

if [ $1 == '' ] || [ $1 == '--help' ] || [ $1 == '-help' ]; then
if [ "$1" == '' ] || [ "$1" == '--help' ] || [ "$1" == '-help' ]; then
echo "Either fully run DiffDetective as presented in the paper (replication), do quick setup verification (verification),
or run DiffDetective on a custom dataset by providing the path to the dataset file."
echo "-- Examples --"
echo "Run replication: './execute.sh replication'"
echo "Validate the setup: './execute.sh verification'"
echo "# See ./docs/verification/datasets.md for format details"
echo "# See ./docs/datasets/esecfse22-verification.md for format details"
echo "Custom dataset: './execute.sh path/to/my_dataset.md'"
exit
fi
Expand All @@ -15,15 +15,15 @@ cd /home/sherlock || exit

if [ "$1" == 'replication' ]; then
echo "Running full replication. Depending on your system, this will require several hours or even a few days."
java -cp DiffDetective.jar org.variantsync.diffdetective.validation.Validation
java -cp DiffDetective.jar org.variantsync.diffdetective.validation.EditClassValidation docs/datasets/esecfse22-replication.md
elif [ "$1" == 'verification' ]; then
echo "Running a short verification."
java -cp DiffDetective.jar org.variantsync.diffdetective.validation.Validation docs/verification/datasets.md
java -cp DiffDetective.jar org.variantsync.diffdetective.validation.EditClassValidation docs/datasets/esecfse22-verification.md
else
echo ""
echo "Running detection on a custom dataset with the input file $1"
echo ""
java -cp DiffDetective.jar org.variantsync.diffdetective.validation.Validation $1
java -cp DiffDetective.jar org.variantsync.diffdetective.validation.EditClassValidation "$1"
fi
echo "Collecting results."
cp -r results/* ../results/
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion scripts/runValidation.sh
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
java -cp "target/diffdetective-1.0.0-jar-with-dependencies.jar" org.variantsync.diffdetective.validation.Validation
java -cp "target/diffdetective-1.0.0-jar-with-dependencies.jar" org.variantsync.diffdetective.validation.EditClassValidation
echo "runValidation.sh DONE"
Loading