Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
26f2abf
feat: init featureSplit operator
TheBormann Jul 6, 2022
f0089b8
feat: added node duplication
TheBormann Jul 6, 2022
8f9bf85
Created and tested shallowClone of a tree node
TheBormann Jul 7, 2022
88b6a8c
feat: implemented deepCloning
TheBormann Jul 9, 2022
0adc84d
feat: created deepCloning for diffTrees
TheBormann Jul 10, 2022
5be940b
feat: correct subtrees can now be created
TheBormann Jul 10, 2022
5e320e1
fix: improved code quality
TheBormann Jul 10, 2022
db36ee0
feat: Implemented cluster generation
TheBormann Jul 30, 2022
9e80934
feat: implemented DiffTree comparison
TheBormann Aug 2, 2022
17a11e8
feat: implemented DiffTree composition
TheBormann Aug 4, 2022
28e7ccc
feat: Added basic testing for each component in feature split
TheBormann Aug 6, 2022
d5c2160
feat: added feature query generator
TheBormann Aug 29, 2022
c929398
fix: fixed several bugs
TheBormann Sep 1, 2022
a21e79b
feat: added foundation for featureSplitValidation
TheBormann Sep 2, 2022
73e079a
fix: fixed bugs stackOverflow and wrong function call bug
TheBormann Sep 4, 2022
eb72f84
feat: added test
TheBormann Sep 4, 2022
63aced1
fix: fixed atomic diff composition bugs
TheBormann Sep 4, 2022
86fee50
feat: improved implementation of custom featureSplit validation
TheBormann Sep 4, 2022
797ab0a
feat: added custom metadatakeys and custom HistoryAnalysis
TheBormann Sep 4, 2022
b3a4177
feat: added feature query generator test
TheBormann Sep 5, 2022
32278b5
fix: simplyfied composition of DiffTrees
TheBormann Sep 5, 2022
7f5e89b
fix: improved evaluation metrics
TheBormann Sep 5, 2022
2bc42da
Merge pull request #1 from VariantSync/main
TheBormann Sep 8, 2022
4c6cf8b
fix: fixed composition bug by changing the algorithm.
TheBormann Sep 15, 2022
b557ef8
fix: improved design of the evaluation
TheBormann Sep 15, 2022
5245f86
Merge pull request #2 from VariantSync/issue47
TheBormann Sep 16, 2022
2edc25c
Merge remote-tracking branch 'upstream/main' into FeatureSplit
TheBormann Sep 16, 2022
1249b2b
fixed: added error messages and updated dataset.md
TheBormann Sep 16, 2022
ec336ee
Merge branch 'main' into FeatureSplit
TheBormann Sep 16, 2022
beef991
fix: edited dataset
TheBormann Sep 16, 2022
102c3fc
fix: implemented the extraction of number of FA commits per feature
TheBormann Sep 18, 2022
281e07a
feat: improved eval
TheBormann Sep 18, 2022
229310b
feat: implemented a feature extraction step
TheBormann Sep 20, 2022
b416b85
feat: answered research question 1.1
TheBormann Sep 22, 2022
e9f6add
fix: added diff size tracker
TheBormann Sep 22, 2022
d91fdf8
feat: added patch time tracker
TheBormann Sep 23, 2022
4ab5804
Merge branch 'issue47' into FeatureSplit
TheBormann Sep 23, 2022
65bd692
fix: fixed bug in compose treeDiff function
TheBormann Sep 23, 2022
29e5eda
fix: detecting a bug in the Pattern extractor
TheBormann Sep 24, 2022
49b1919
fix: CPPDiffLineFormulaExtractor now checks for missing Brackets
TheBormann Sep 24, 2022
54d0f0c
Merge branch 'FeatureSplit' of github.com:TheBormann/DiffDetective in…
TheBormann Sep 24, 2022
1cb5032
fix: cleaned up code
TheBormann Sep 26, 2022
e06c86c
fix: changed dataset to data used in FeatureSplit thesis
TheBormann Sep 27, 2022
001ffc8
fix: removed legacy code
TheBormann Sep 27, 2022
50721ba
fix: implemented feedback
TheBormann Oct 5, 2022
5fed5c9
fix: changed feature query from string to propositional formula
TheBormann Oct 5, 2022
a3c6da1
fix: reduced complexity of the compose function
TheBormann Oct 7, 2022
e44515a
fix: store all features, instead of just the number of features
TheBormann Oct 8, 2022
2a8a7b9
Merge pull request #4 from VariantSync/main
TheBormann Oct 18, 2022
0124ad8
fix: fixed composition bug
TheBormann Oct 22, 2022
2dd8caf
Merge branch 'thesis_lb' into FeatureSplit
TheBormann Oct 26, 2022
413826d
Merge pull request #57 from TheBormann/FeatureSplit
pmbittner Oct 27, 2022
b5b0b00
Remove unused code which has missing imports
ibbem Jan 20, 2023
74b143d
Remove duplicated code causing compilation failures
ibbem Jan 20, 2023
03d6e81
Make a failing test pass
ibbem Feb 6, 2023
3e7ccfb
Remove and ignore VS Code specific files
ibbem Jan 20, 2023
1093c51
Move all datasets into the `docs/datasets` directory
ibbem Jan 20, 2023
090f70e
Escape all shell variable substitutions
ibbem Jan 19, 2023
62b6335
Remove already fixed TODOs
ibbem Jan 20, 2023
525c811
Remove unused imports
ibbem Jan 20, 2023
5d0a9b4
Fix whitespace issues
ibbem Jan 20, 2023
04e729f
Document a precondition in `CPPDiffLineFormulaExtractor`
ibbem Jan 20, 2023
e76f64b
Refactor `DiffEdge` to a record
ibbem Jan 20, 2023
7e0f2e5
Refactor the duplication code for `DiffNode`s
ibbem Jan 20, 2023
4d75e12
Move the duplication code to `DiffTree` and `DiffNode`
ibbem Jan 20, 2023
fb73bdf
Refactor AtomicDiffComparison
ibbem Jan 20, 2023
a1e8a1b
Simplify an ArrayList creation
ibbem Jan 20, 2023
4420d67
Factor duplicate code out of `*Analysis` and `*Result`
ibbem Jan 20, 2023
7aaaa58
Improve log messages in `Analysis.forEachRepository`
ibbem Feb 9, 2023
c5613e3
Merge `FeatureSplitAnalysisTask` and `CommitHistoryAnalysisTask`
ibbem Feb 9, 2023
4947e74
Rename `Validation` to `EditClassValidation`
ibbem Jan 22, 2023
d54f49d
Factor duplicate code out of the `validation` package
ibbem Jan 23, 2023
d2860ee
Remove duplicated test
ibbem Jan 23, 2023
6c170a0
Refactor `FeatureSplit`
ibbem Jan 23, 2023
45c5fd5
Merge branch 'develop' into thesis_lb
ibbem Feb 7, 2023
8667de4
Use more of the potential of the `Time` abstraction
ibbem Feb 7, 2023
847c8c9
Get rid of `FACommitExtractionAnalysisTaskFactory`
ibbem Feb 7, 2023
87f6694
Move all validations into the `validation` package
ibbem Feb 7, 2023
36d7cda
Use nice notation for `*Result` constructors
ibbem Feb 9, 2023
75be71c
Use hooks for modifying analysis behaviour
ibbem Feb 9, 2023
c4d76a7
Unify class names related to analysis and validation
ibbem Feb 8, 2023
bbd142b
Merge `*Validation` with `*ValidationAnalysis`
ibbem Feb 8, 2023
1b91456
Refactor `AnalysisResult` to be composable
ibbem Feb 9, 2023
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/esecfse-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/esecfse-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/esecfse-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/esecfse-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/esecfse-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
7 changes: 7 additions & 0 deletions docs/datasets/FeatureSplit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Project name | Domain | Source code available (**y**es/**n**o)? | Is it a git repository (**y**es/**n**o)? | Repository URL | Clone URL | Estimated number of commits
---|-------------------------|-----------------------------------------|-----------------------------------|--------------------------------------------------------------|------------------------------------------------------------------|---
berkeley-db-libdb | database system | y | y | https://github.com/berkeleydb/libdb | https://github.com/DiffDetective/libdb.git | 7
sylpheed | e-mail client | y | y | https://github.com/jan0sch/sylpheed | https://github.com/DiffDetective/sylpheed.git | 2,682
libssh | network | y | y | https://gitlab.com/libssh/libssh-mirror | https://github.com/DiffDetective/libssh.git | 5,349
apache-httpd | web server | y | y | https://github.com/apache/httpd | https://github.com/DiffDetective/httpd.git | 32,927
linux | operating system | y | y | https://github.com/torvalds/linux | https://github.com/DiffDetective/linux.git | 1,072,142
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