Skip to content

Commit 349dd35

Browse files
Updated with changes from submission
1 parent cd2068f commit 349dd35

104 files changed

Lines changed: 445 additions & 450 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ In the following we give a step by step example in how the library can be used t
1717
- generate variants for each step in the evolution history,
1818
- obtain the ground truth of generated variants.
1919

20-
The example's source code can also be found in [GenerationExample.java](src/main/java/vevos/examples/GenerationExample.java).
21-
A similar and executable version of this example can be found in [VEVOSBenchmark.java](src/main/java/vevos/examples/VEVOSBenchmark.java), which gathers some rudimentary data on runtime performance for Linux and Busybox variant simulation.
20+
The example's source code can also be found in [GenerationExample.java](src/main/java/simulation/examples/GenerationExample.java).
21+
A similar and executable version of this example can be found in [VEVOSBenchmark.java](src/main/java/simulation/examples/VEVOSBenchmark.java), which gathers some rudimentary data on runtime performance for Linux and Busybox variant simulation.
2222

2323
At the very begin of your program, you have to initialize the library:
2424
```java
@@ -82,13 +82,13 @@ Thus, the sampler can be invoked during each step of the variant simulation.
8282
Apart from the possibility of introducing custom samplers, VEVOS/Simulation comes with two built-in ways for sampling:
8383
Random configuration sampling using the FeatureIDE library, and constant sampling.
8484

85-
[Random sampling](src/main/java/vevos/feature/sampling/FeatureIDESampler.java) returns a random set of valid configurations from a given feature model:
85+
[Random sampling](src/main/java/simulation/feature/sampling/FeatureIDESampler.java) returns a random set of valid configurations from a given feature model:
8686
```java
8787
/// Either use random sampling, ...
8888
final int numberOfVariantsToGenerate = 42;
8989
Sampler variantsSampler = FeatureIDESampler.CreateRandomSampler(numberOfVariantsToGenerate);
9090
```
91-
[Constant sampling](src/main/java/vevos/feature/sampling/ConstSampler.java) uses a pre-defined set of variants and ignores the feature model (it can easily be extended though to for example crash if a configuration violates a feature model at any commit):
91+
[Constant sampling](src/main/java/simulation/feature/sampling/ConstSampler.java) uses a pre-defined set of variants and ignores the feature model (it can easily be extended though to for example crash if a configuration violates a feature model at any commit):
9292
```java
9393
/// ... or use a predefined set of variants.
9494
final Sample variantsToGenerate = new Sample(List.of(
@@ -205,19 +205,19 @@ This was round-trip about the major features of VEVOS/Simulation.
205205
## Project Structure
206206

207207
The project is structured into the following packages:
208-
- [`vevos.examples`](src/main/java/vevos/examples) contains the code of our example described above
209-
- [`vevos.feature`](src/main/java/vevos/feature) contains our representation for `Variant`s and their `Configuration`s as well as sampling of configurations and variants
210-
- [`vevos.io`](src/main/java/vevos/io) contains our `Resources` service and default implementations for loading `CSV` files, ground truth, feature models, and configurations
211-
- [`vevos.repository`](src/main/java/vevos/repository) contains classes for representing git repositories and commits
212-
- [`vevos.sat`](src/main/java/vevos/sat) contains an interface for SAT solving (currently only used for annotation simplification, which is deactivated by default)
213-
- [`vevos.util`](src/main/java/vevos/util) is the conventional utils package with helper methods for interfacing with FeatureIDE, name generation, logging, and others.
214-
- [`vevos.variability`](src/main/java/vevos/variability) contains the classes for representing evolution histories and the ground truth dataset.
208+
- [`vevos.examples`](src/main/java/simulation/examples) contains the code of our example described above
209+
- [`vevos.feature`](src/main/java/simulation/feature) contains our representation for `Variant`s and their `Configuration`s as well as sampling of configurations and variants
210+
- [`vevos.io`](src/main/java/simulation/io) contains our `Resources` service and default implementations for loading `CSV` files, ground truth, feature models, and configurations
211+
- [`vevos.repository`](src/main/java/simulation/repository) contains classes for representing git repositories and commits
212+
- [`vevos.sat`](src/main/java/simulation/sat) contains an interface for SAT solving (currently only used for annotation simplification, which is deactivated by default)
213+
- [`vevos.util`](src/main/java/simulation/util) is the conventional utils package with helper methods for interfacing with FeatureIDE, name generation, logging, and others.
214+
- [`vevos.variability`](src/main/java/simulation/variability) contains the classes for representing evolution histories and the ground truth dataset.
215215
The package is divided into:
216-
- [`vevos.variability.pc`](src/main/java/vevos/variability/pc) contains classes for representing annotations (i.e., presence conditions and feature mappings). We store annotations in `Artefact`s that follow a tree structure similar to the annotations in preprocessor based software product lines.
217-
- [`vevos.variability.pc.groundtruth`](src/main/java/vevos/variability/pc/groundtruth) contains datatypes for the ground truth of generated variants.
218-
- [`vevos.variability.pc.options`](src/main/java/vevos/variability/pc/options) contains the options for the variant generation process.
219-
- [`vevos.variability.pc.visitor`](src/main/java/vevos/variability/pc/visitor) contains an implementation of the visitor pattern for traversing and inspecting `ArtefactTree`s. Some visitors for querying a files or a line's presence condition, as well as a pretty printer can be found in [`vevos.variability.pc.visitor.common`](src/main/java/vevos/variability/pc/visitor/common).
220-
- [`vevos.variability.sequenceextraction`](src/main/java/vevos/variability/sequenceextraction) contains default implementations for `SequenceExtractor`. These are algorithms for sorting pairs of commits into continuous histories (see example above).
216+
- [`vevos.variability.pc`](src/main/java/simulation/variability/pc) contains classes for representing annotations (i.e., presence conditions and feature mappings). We store annotations in `Artefact`s that follow a tree structure similar to the annotations in preprocessor based software product lines.
217+
- [`vevos.variability.pc.groundtruth`](src/main/java/simulation/variability/pc/groundtruth) contains datatypes for the ground truth of generated variants.
218+
- [`vevos.variability.pc.options`](src/main/java/simulation/variability/pc/options) contains the options for the variant generation process.
219+
- [`vevos.variability.pc.visitor`](src/main/java/simulation/variability/pc/visitor) contains an implementation of the visitor pattern for traversing and inspecting `ArtefactTree`s. Some visitors for querying a files or a line's presence condition, as well as a pretty printer can be found in [`vevos.variability.pc.visitor.common`](src/main/java/simulation/variability/pc/visitor/common).
220+
- [`vevos.variability.sequenceextraction`](src/main/java/simulation/variability/sequenceextraction) contains default implementations for `SequenceExtractor`. These are algorithms for sorting pairs of commits into continuous histories (see example above).
221221

222222
## Setup
223223

pom.xml

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@
2020
<junit.jupiter.version>5.6.0</junit.jupiter.version>
2121
</properties>
2222

23+
<repositories>
24+
<repository>
25+
<id>repo</id>
26+
<url>file://${project.basedir}/repo</url>
27+
</repository>
28+
</repositories>
29+
2330
<build>
2431
<plugins>
2532
<plugin>
@@ -59,42 +66,32 @@
5966
<!-- Local dependencies-->
6067
<dependency>
6168
<groupId>vevos</groupId>
62-
<artifactId>Functjonal</artifactId>
63-
<version>1.0-SNAPSHOT</version>
64-
<scope>system</scope>
65-
<systemPath>${project.basedir}/src/main/resources/lib/Functjonal-1.0-SNAPSHOT.jar</systemPath>
69+
<artifactId>functjonal</artifactId>
70+
<version>1.0.0</version>
6671
</dependency>
6772

6873
<dependency>
6974
<groupId>de.ovgu</groupId>
7075
<artifactId>featureide.lib.fm</artifactId>
7176
<version>3.8.1</version>
72-
<scope>system</scope>
73-
<systemPath>${project.basedir}/src/main/resources/lib/de.ovgu.featureide.lib.fm-v3.8.1.jar</systemPath>
7477
</dependency>
7578

7679
<dependency>
7780
<groupId>org.sat4j</groupId>
7881
<artifactId>core</artifactId>
7982
<version>2.3.5</version>
80-
<scope>system</scope>
81-
<systemPath>${project.basedir}/src/main/resources/lib/org.sat4j.core.jar</systemPath>
8283
</dependency>
8384

8485
<dependency>
8586
<groupId>net.ssehub</groupId>
8687
<artifactId>kernel_haven</artifactId>
8788
<version>1.0.0</version>
88-
<scope>system</scope>
89-
<systemPath>${project.basedir}/src/main/resources/lib/kernel_haven-1.0.0.jar</systemPath>
9089
</dependency>
9190

9291
<dependency>
9392
<groupId>net.ssehub.kernelhaven</groupId>
9493
<artifactId>kconfigreader</artifactId>
9594
<version>1.0.0</version>
96-
<scope>system</scope>
97-
<systemPath>${project.basedir}/src/main/resources/lib/kconfigreader-1.0.0.jar</systemPath>
9895
</dependency>
9996
<!-- -->
10097

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
1-
package vevos;
1+
package simulation;
22

3-
import vevos.feature.sampling.ConstSampler;
4-
import vevos.feature.sampling.FeatureIDESampler;
3+
import simulation.util.Logger;
4+
import simulation.feature.sampling.ConstSampler;
5+
import simulation.feature.sampling.FeatureIDESampler;
56
import vevos.functjonal.Functjonal;
67
import vevos.functjonal.Lazy;
78
import vevos.functjonal.Unit;
89
import vevos.functjonal.category.MonadTransformer;
910
import vevos.functjonal.list.NonEmptyList;
10-
import vevos.io.Resources;
11-
import vevos.io.data.VariabilityDatasetLoader;
12-
import vevos.repository.AbstractSPLRepository;
13-
import vevos.util.Logger;
14-
import vevos.variability.EvolutionStep;
15-
import vevos.variability.SPLCommit;
16-
import vevos.variability.VariabilityDataset;
17-
import vevos.variability.VariabilityHistory;
18-
import vevos.variability.sequenceextraction.LongestNonOverlappingSequences;
19-
import vevos.variants.VariantsRepository;
20-
import vevos.variants.VariantsRevision;
21-
import vevos.variants.sampling.SampleOnceAtBeginStrategy;
22-
import vevos.variants.sampling.SamplingStrategy;
11+
import simulation.io.Resources;
12+
import simulation.io.data.VariabilityDatasetLoader;
13+
import simulation.repository.AbstractSPLRepository;
14+
import simulation.variability.EvolutionStep;
15+
import simulation.variability.SPLCommit;
16+
import simulation.variability.VariabilityDataset;
17+
import simulation.variability.VariabilityHistory;
18+
import simulation.variability.sequenceextraction.LongestNonOverlappingSequences;
19+
import simulation.variants.VariantsRepository;
20+
import simulation.variants.VariantsRevision;
21+
import simulation.variants.sampling.SampleOnceAtBeginStrategy;
22+
import simulation.variants.sampling.SamplingStrategy;
2323

2424
import java.io.File;
2525
import java.io.FileInputStream;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package vevos;
1+
package simulation;
22

33
import de.ovgu.featureide.fm.core.base.impl.*;
44
import de.ovgu.featureide.fm.core.configuration.*;
55
import de.ovgu.featureide.fm.core.io.sxfm.SXFMFormat;
66
import de.ovgu.featureide.fm.core.io.xml.XmlFeatureModelFormat;
7-
import vevos.util.Logger;
7+
import simulation.util.Logger;
88

99
public final class VEVOS {
1010
private static boolean initialized = false;

src/main/java/vevos/examples/GenerationExample.java renamed to src/main/java/simulation/examples/GenerationExample.java

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
1-
package vevos.examples;
1+
package simulation.examples;
22

33
import de.ovgu.featureide.fm.core.base.IFeatureModel;
44
import org.eclipse.jgit.api.errors.GitAPIException;
5-
import vevos.VEVOS;
6-
import vevos.feature.Variant;
7-
import vevos.feature.config.SimpleConfiguration;
8-
import vevos.feature.sampling.ConstSampler;
9-
import vevos.feature.sampling.FeatureIDESampler;
10-
import vevos.feature.sampling.Sample;
11-
import vevos.feature.sampling.Sampler;
5+
import simulation.VEVOS;
6+
import simulation.feature.Variant;
7+
import simulation.feature.config.SimpleConfiguration;
8+
import simulation.feature.sampling.ConstSampler;
9+
import simulation.feature.sampling.FeatureIDESampler;
10+
import simulation.feature.sampling.Sample;
11+
import simulation.feature.sampling.Sampler;
12+
import simulation.io.Resources;
13+
import simulation.repository.BusyboxRepository;
14+
import simulation.repository.SPLRepository;
15+
import simulation.util.Logger;
16+
import simulation.util.io.CaseSensitivePath;
17+
import simulation.variability.EvolutionStep;
18+
import simulation.variability.SPLCommit;
19+
import simulation.variability.VariabilityDataset;
20+
import simulation.variability.VariabilityHistory;
21+
import simulation.variability.pc.Artefact;
22+
import simulation.variability.pc.SourceCodeFile;
23+
import simulation.variability.pc.options.ArtefactFilter;
24+
import simulation.variability.pc.options.VariantGenerationOptions;
1225
import vevos.functjonal.Lazy;
1326
import vevos.functjonal.Result;
1427
import vevos.functjonal.list.NonEmptyList;
15-
import vevos.io.Resources;
16-
import vevos.repository.BusyboxRepository;
17-
import vevos.repository.SPLRepository;
18-
import vevos.util.Logger;
19-
import vevos.util.io.CaseSensitivePath;
20-
import vevos.variability.EvolutionStep;
21-
import vevos.variability.SPLCommit;
22-
import vevos.variability.VariabilityDataset;
23-
import vevos.variability.VariabilityHistory;
24-
import vevos.variability.pc.Artefact;
25-
import vevos.variability.pc.SourceCodeFile;
26-
import vevos.variability.pc.groundtruth.AnnotationGroundTruth;
27-
import vevos.variability.pc.groundtruth.GroundTruth;
28-
import vevos.variability.pc.options.ArtefactFilter;
29-
import vevos.variability.pc.options.VariantGenerationOptions;
30-
import vevos.variability.sequenceextraction.LongestNonOverlappingSequences;
28+
import simulation.variability.pc.groundtruth.AnnotationGroundTruth;
29+
import simulation.variability.pc.groundtruth.GroundTruth;
30+
import simulation.variability.sequenceextraction.LongestNonOverlappingSequences;
3131

3232
import java.io.IOException;
3333
import java.util.List;

src/main/java/vevos/examples/VEVOSBenchmark.java renamed to src/main/java/simulation/examples/VEVOSBenchmark.java

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
1-
package vevos.examples;
1+
package simulation.examples;
22

33
import de.ovgu.featureide.fm.core.base.IFeatureModel;
4-
import vevos.VEVOS;
5-
import vevos.feature.Variant;
6-
import vevos.feature.sampling.FeatureIDESampler;
7-
import vevos.feature.sampling.Sample;
8-
import vevos.feature.sampling.Sampler;
4+
import simulation.VEVOS;
5+
import simulation.feature.Variant;
6+
import simulation.feature.sampling.FeatureIDESampler;
7+
import simulation.feature.sampling.Sample;
8+
import simulation.feature.sampling.Sampler;
9+
import simulation.io.Resources;
10+
import simulation.io.TextIO;
11+
import simulation.repository.BusyboxRepository;
12+
import simulation.repository.SPLRepository;
13+
import simulation.util.Clock;
14+
import simulation.util.Logger;
15+
import simulation.util.io.CaseSensitivePath;
16+
import simulation.variability.EvolutionStep;
17+
import simulation.variability.SPLCommit;
18+
import simulation.variability.VariabilityDataset;
19+
import simulation.variability.pc.Artefact;
20+
import simulation.variability.pc.SourceCodeFile;
21+
import simulation.variability.pc.options.ArtefactFilter;
22+
import simulation.variability.pc.options.VariantGenerationOptions;
923
import vevos.functjonal.Cast;
1024
import vevos.functjonal.Lazy;
1125
import vevos.functjonal.Result;
12-
import vevos.io.Resources;
13-
import vevos.io.TextIO;
14-
import vevos.repository.BusyboxRepository;
15-
import vevos.repository.SPLRepository;
16-
import vevos.util.Clock;
17-
import vevos.util.Logger;
18-
import vevos.util.io.CaseSensitivePath;
19-
import vevos.variability.EvolutionStep;
20-
import vevos.variability.SPLCommit;
21-
import vevos.variability.VariabilityDataset;
22-
import vevos.variability.pc.Artefact;
23-
import vevos.variability.pc.SourceCodeFile;
24-
import vevos.variability.pc.groundtruth.GroundTruth;
25-
import vevos.variability.pc.options.ArtefactFilter;
26-
import vevos.variability.pc.options.VariantGenerationOptions;
26+
import simulation.variability.pc.groundtruth.GroundTruth;
2727

2828
import java.util.List;
2929
import java.util.Optional;

src/main/java/vevos/feature/Variant.java renamed to src/main/java/simulation/feature/Variant.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package vevos.feature;
1+
package simulation.feature;
22

33
import org.prop4j.Node;
4-
import vevos.feature.config.IConfiguration;
4+
import simulation.feature.config.IConfiguration;
55

66
import java.util.Arrays;
77

src/main/java/vevos/feature/config/FeatureIDEConfiguration.java renamed to src/main/java/simulation/feature/config/FeatureIDEConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package vevos.feature.config;
1+
package simulation.feature.config;
22

33
import de.ovgu.featureide.fm.core.analysis.cnf.IVariables;
44
import de.ovgu.featureide.fm.core.analysis.cnf.LiteralSet;
@@ -9,8 +9,8 @@
99
import de.ovgu.featureide.fm.core.configuration.ConfigurationPropagator;
1010
import de.ovgu.featureide.fm.core.configuration.Selection;
1111
import org.prop4j.Node;
12+
import simulation.util.fide.bugfix.FixTrueFalse;
1213
import vevos.functjonal.Lazy;
13-
import vevos.util.fide.bugfix.FixTrueFalse;
1414

1515
import java.util.HashMap;
1616
import java.util.List;

src/main/java/vevos/feature/config/IConfiguration.java renamed to src/main/java/simulation/feature/config/IConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package vevos.feature.config;
1+
package simulation.feature.config;
22

33
import org.prop4j.Node;
44

src/main/java/vevos/feature/config/SayYesToAllConfiguration.java renamed to src/main/java/simulation/feature/config/SayYesToAllConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package vevos.feature.config;
1+
package simulation.feature.config;
22

33
import org.prop4j.Node;
44

0 commit comments

Comments
 (0)