Skip to content

Commit a72f317

Browse files
committed
add VEVOS.Initialize() to example; package structure explanation
1 parent 4203e30 commit a72f317

2 files changed

Lines changed: 36 additions & 6 deletions

File tree

README.md

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
# VEVOS - Variant Generation
22

33
## begin todos
4-
TODO: Find names for
5-
- **ground truth extraction**: VEVOS_Extraction, VEVOSX, VEvoSX, VEVOS.extraction
6-
- **variant generation**: VEVOS_Generation, VEVOSG, VEvoSG, VEVOS.generation
4+
- Find names for
5+
- **ground truth extraction**: VEVOS_Extraction, VEVOSX, VEvoSX, VEVOS.extraction
6+
- **variant generation**: VEVOS_Generation, VEVOSG, VEvoSG, VEVOS.generation
7+
- create a release with a jar
8+
- include and anonymise Functjonal
9+
- simplify maven dependencies to FeatureIDE, Sat4j, and Functjonal?
710
## end todos
811

9-
VEVOS is a tool suite for the simulation of the evolution of clone-and-own projects.
10-
VEVOS has two main components: The ground truth extraction, called VEVOS_Extraction and the variant generation called VEVOS_Generation.
12+
VEVOS is a tool suite for the simulation of the evolution of clone-and-own projects and consists of two main components: The ground truth extraction, called VEVOS_Extraction and the variant generation called VEVOS_Generation.
1113

1214
This repository contains VEVOS_Generation and thus the second part of the replication package for the paper _Simulating the Evolution of Clone-and-Own Projects with VEVOS_ submitted to the International Conference on Evaluation and Assessment in Software Engineering (EASE) 2022.
1315
VEVOS_Generation is a java library for generating variants with ground truth from an input software product line and dataset extracted with VEVOS_Extraction.
@@ -24,7 +26,13 @@ In the following we give a step by step example in how the library can be used t
2426
The examples source code can also be found in [GenerationExample.java](src/main/java/vevos/examples/GenerationExample.java).
2527
We also give a brief introduction of the key features of the library we use in the following example.
2628

27-
We start by specifying the necessary paths to (1) the git repository of the input software product line, (2) the directory of the extracted ground truth dataset, (3) and a directory to which we want to generate variants. (We use case sensitive paths to also allow the generation of Linux variants under Windows).
29+
At the very begin of your program, you have to initialize the library:
30+
```java
31+
VEVOS.Initialize();
32+
```
33+
This initializes the libraries logging and binding to FeatureIDE.
34+
35+
We can then start by specifying the necessary paths to (1) the git repository of the input software product line, (2) the directory of the extracted ground truth dataset, (3) and a directory to which we want to generate variants. (We use case sensitive paths to also allow the generation of Linux variants under Windows).
2836
```java
2937
final CaseSensitivePath splRepositoryPath = CaseSensitivePath.of("path", "to", "SPL", "git", "repository");
3038
final CaseSensitivePath groundTruthDatasetPath = CaseSensitivePath.of("path", "to", "datasets");
@@ -154,6 +162,25 @@ In contrast, the suffix is `.spl.csv` for ground truth presence conditions of th
154162
```
155163
This was round-trip about the major features of VEVOS_Generation. Further features and convencience methods can be found in our documentation.
156164

165+
## Project Structure
166+
167+
The project is structured into the following packages:
168+
- `vevos.examples` contains the code of our example described above
169+
- `vevos.feature` contains our representation for `Variant`s and their `Configuration`s as well as sampling of configurations and variants
170+
- `vevos.io` contains our `Resources` service and default implementations for loading `CSV` files, ground truth, feature models, and configurations
171+
- `vevos.repository` contains classes for representing git repositories and commits
172+
- `vevos.sat` contains an interface for SAT solving (currently only used for annotation simplification on demand)
173+
- `vevos.util` is the conventional utils package with helper methods for interfacing with FeatureIDE, name generation, logging, and others.
174+
- `vevos.variability` contains the classes for representing evolution histories and the ground truth dataset.
175+
The package is divided into:
176+
- `vevos.variability.pc` contains classes for representing , and 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.
177+
- `vevos.variability.pc.groundtruth` contains datatypes for the ground truth of generated variants
178+
- `vevos.variability.pc.options` contains the options for the variant generation process
179+
- `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`.
180+
- `vevos.variability.sequenceextraction` contains default implementation for `SequenceExtractor`. These are algorithms for sorting pairs of commits into continuous histories (see example above).
181+
182+
- ``
183+
157184
## Setup
158185

159186
VEVOS_Generation is a Java 16 library and Maven project.

src/main/java/vevos/examples/GenerationExample.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import de.variantsync.functjonal.Lazy;
55
import de.variantsync.functjonal.Result;
66
import de.variantsync.functjonal.list.NonEmptyList;
7+
import vevos.VEVOS;
78
import vevos.feature.Variant;
89
import vevos.feature.config.SimpleConfiguration;
910
import vevos.feature.sampling.ConstSampler;
@@ -32,6 +33,8 @@
3233

3334
public class GenerationExample {
3435
public static void main(final String[] args) throws Resources.ResourceIOException {
36+
VEVOS.Initialize();
37+
3538
final CaseSensitivePath splRepositoryPath = CaseSensitivePath.of("path", "to", "SPL", "git", "repository");
3639
final CaseSensitivePath groundTruthDatasetPath = CaseSensitivePath.of("path", "to", "datasets");
3740
final CaseSensitivePath variantsGenerationDir = CaseSensitivePath.of("directory", "to", "put", "generated", "variants");

0 commit comments

Comments
 (0)