Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • ae-submission
  • artifact-evaluation
  • artifact-evaluation-poster
  • ci
  • journal-diagrams
  • master
  • restructure-2021
7 results

Target

Select target project
  • stgroup/trainbenchmark
  • joqvist/trainbenchmark
2 results
Select Git revision
  • artifact-evaluation
  • artifact-evaluation-poster
  • ci
  • master
4 results
Show changes
Commits on Source (36)
Showing
with 310 additions and 312 deletions
...@@ -39,6 +39,10 @@ gradle-app.setting ...@@ -39,6 +39,10 @@ gradle-app.setting
# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar !gradle-wrapper.jar
!relational-rags*.zip
# output directory
ModelValidationWithRAGs/
# Cache of project # Cache of project
.gradletasknamecache .gradletasknamecache
......
...@@ -39,8 +39,7 @@ RUN ./gradlew --no-daemon preprocess \ ...@@ -39,8 +39,7 @@ RUN ./gradlew --no-daemon preprocess \
&& ./gradlew --no-daemon build shadowJar -x test \ && ./gradlew --no-daemon build shadowJar -x test \
&& ./scripts/configure.sh 1 1 900 10 \ && ./scripts/configure.sh 1 1 900 10 \
&& ./gradlew --no-daemon generate \ && ./gradlew --no-daemon generate \
&& ./scripts/configure.sh 1 1024 900 10 \ && ./scripts/configure.sh 1 1024 900 10
&& ./gradlew --no-daemon initScripts
# USER root # USER root
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <h1 id="artifacts-for-continuous-model-validation-using-reference-attribute-grammars">Artifacts for “Continuous Model Validation Using Reference Attribute Grammars”</h1>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="generator" content="pandoc" />
<title></title>
<style type="text/css">code{white-space: pre;}</style>
<style type="text/css">
table {
border-spacing: 0;
border-bottom: 2px solid black;
border-top: 2px solid black;
}
table th {
padding: 3px 10px;
background-color: white;
border-top: none;
border-left: none;
border-right: none;
border-bottom: 1px solid black;
}
table td {
padding: 3px 10px;
border-top: none;
border-left: none;
border-bottom: none;
border-right: none;
}
code {
background-color: lightgrey;
}
</style>
</head>
<body>
<h1 id="artifacts-for-continuous-model-validation-using-reference-attribute-grammars">Artifacts for &quot;Continuous Model Validation Using Reference Attribute Grammars&quot;</h1>
<p><em>Note: There is a variant of this submission including a docker image (provided as a link) and one without it (uploaded in HotCRP). We encourage using the one including the image, since building the image takes a long time.</em></p>
<h3 id="authors">Authors</h3> <h3 id="authors">Authors</h3>
<ul> <ul>
<li>Johannes Mey <a href="mailto:johannes.mey@tu-dresden.de">johannes.mey@tu-dresden.de</a></li> <li>Johannes Mey <a href="mailto:johannes.mey@tu-dresden.de" class="email">johannes.mey@tu-dresden.de</a></li>
<li>Carl Mai <a href="mailto:carl.mai@tu-dresden.de">carl.mai@tu-dresden.de</a></li> <li>Carl Mai <a href="mailto:carl.mai@tu-dresden.de" class="email">carl.mai@tu-dresden.de</a></li>
<li>René Schöne <a href="mailto:rene.schoene@tu-dresden.de">rene.schoene@tu-dresden.de</a></li> <li>René Schöne <a href="mailto:rene.schoene@tu-dresden.de" class="email">rene.schoene@tu-dresden.de</a></li>
<li>Görel Hedin <a href="mailto:gorel.hedin@cs.lth.se">gorel.hedin@cs.lth.se</a></li> <li>Görel Hedin <a href="mailto:gorel.hedin@cs.lth.se" class="email">gorel.hedin@cs.lth.se</a></li>
<li>Emma Söderberg <a href="mailto:emma.soderberg@cs.lth.se">emma.soderberg@cs.lth.se</a></li> <li>Emma Söderberg <a href="mailto:emma.soderberg@cs.lth.se" class="email">emma.soderberg@cs.lth.se</a></li>
<li>Thomas Kühn <a href="mailto:thomas.kuehn3@tu-dresden.de">thomas.kuehn3@tu-dresden.de</a></li> <li>Thomas Kühn <a href="mailto:thomas.kuehn3@tu-dresden.de" class="email">thomas.kuehn3@tu-dresden.de</a></li>
<li>Niklas Fors <a href="mailto:niklas.fors@cs.lth.se">niklas.fors@cs.lth.se</a></li> <li>Niklas Fors <a href="mailto:niklas.fors@cs.lth.se" class="email">niklas.fors@cs.lth.se</a></li>
<li>Jesper Öqvist <a href="mailto:jesper.oqvist@cs.lth.se">jesper.oqvist@cs.lth.se</a></li> <li>Jesper Öqvist <a href="mailto:jesper.oqvist@cs.lth.se" class="email">jesper.oqvist@cs.lth.se</a></li>
<li>Uwe Aßmann <a href="mailto:uwe.assmann@tu-dresden.de">uwe.assmann@tu-dresden.de</a></li> <li>Uwe Aßmann <a href="mailto:uwe.assmann@tu-dresden.de" class="email">uwe.assmann@tu-dresden.de</a></li>
</ul> </ul>
<h3 id="introduction">Introduction</h3> <h3 id="introduction">Introduction</h3>
<p>The paper discusses the utilization of reference attribute grammars (RAGs) for model validation and presents two specific contributions. First, the differences between models and trees specified by reference attribute grammars, specifically non-containment references, are discussed and a manual, yet optimised method to efficiently overcome these differences is presented. Secondly, an extension of RAG grammar specifications is proposed to model non-containment references automatically. The proposed modelling techniques are compared to state-of-the-art modelling tools utilizing a benchmarking framework for continuous model validation, the <em>Train Benchmark</em>.</p> <p>The paper discusses the utilization of reference attribute grammars (RAGs) for model validation and presents two specific contributions. First, the differences between models and trees specified by reference attribute grammars, specifically non-containment references, are discussed and a manual, yet optimised method to efficiently overcome these differences is presented. Secondly, an extension of RAG grammar specifications is proposed to model non-containment references automatically. The proposed modelling techniques are compared to state-of-the-art modelling tools utilizing a benchmarking framework for continuous model validation, the <em>Train Benchmark</em>.</p>
<h3 id="structure-of-the-supplementary-artifacts">Structure of the Supplementary Artifacts</h3> <h3 id="structure-of-the-supplementary-artifacts">Structure of the Supplementary Artifacts</h3>
<p>The artifacts are structured in three parts:</p> <p>The artifacts are structured in four parts:</p>
<ul> <ul>
<li>A standalone example of the non-containment references preprocessor</li> <li>A standalone example of the non-containment references preprocessor (relational-rags-0.2.3.zip)</li>
<li>Benchmark code to reproduce the measurements, including all relevant source codes</li> <li>Benchmark code to reproduce the measurements, including all relevant source codes
<li>Full collection of all measurement data and diagrams mentioned in the paper</li> <ul>
<li>as a zip file (ModelValidationWithRAGs.zip)</li>
<li>as a docker container (trainbenchmark-docker.tar)</li>
</ul></li>
<li>Full collection of all measurement data and diagrams mentioned in the paper (paper-results.zip)</li>
</ul> </ul>
<h3 id="general-remarks-on-the-presented-listings-and-measurements">General Remarks on the presented Listings and Measurements</h3> <h3 id="general-remarks-on-the-presented-listings-and-measurements">General Remarks on the presented Listings and Measurements</h3>
<p>For reasons of readability and simplicity, there are some minor differences in naming in the source codes and the measured resulting data. Most importantly, the names of the three presented JastAdd implementation variants are different in the code and the diagrams.</p> <p>For reasons of readability and simplicity, there are some minor differences in naming in the source codes and the measured resulting data. Most importantly, the names of the three presented JastAdd implementation variants are different in the code and the diagrams.</p>
...@@ -62,26 +30,22 @@ ...@@ -62,26 +30,22 @@
<table> <table>
<thead> <thead>
<tr class="header"> <tr class="header">
<th>Name used in Paper</th> <th style="text-align: left;">Name used in paper and result data</th>
<th>Name used in result data</th> <th style="text-align: left;">Name used in source code</th>
<th>Name used in source code</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="odd"> <tr class="odd">
<td>Name Lookup</td> <td style="text-align: left;">Name Lookup</td>
<td>Jastadd (Name Lookup)</td> <td style="text-align: left;">jastadd-namelookup</td>
<td>jastadd-namelookup</td>
</tr> </tr>
<tr class="even"> <tr class="even">
<td>Intrinsic References</td> <td style="text-align: left;">Intrinsic References</td>
<td>Jastadd (Optimized)</td> <td style="text-align: left;">jastadd-intrinsic</td>
<td>jastadd-optimized</td>
</tr> </tr>
<tr class="odd"> <tr class="odd">
<td>Grammar Extension</td> <td style="text-align: left;">Grammar Extension</td>
<td>Jastadd (Specialized)</td> <td style="text-align: left;">jastadd-relast</td>
<td>jastadd-specialized</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
...@@ -89,6 +53,11 @@ ...@@ -89,6 +53,11 @@
<p>To transform the grammar extension we provide a preprocessor for JastAdd. This preprocessor including its source code is provided in the <code>preprocessor</code> subdirectory.</p> <p>To transform the grammar extension we provide a preprocessor for JastAdd. This preprocessor including its source code is provided in the <code>preprocessor</code> subdirectory.</p>
<p>Its usage is:</p> <p>Its usage is:</p>
<ul> <ul>
<li>Build the preprocessor
<ul>
<li><code>./gradlew build jar</code></li>
<li>copy the jar <code>cp build/libs/relational-rags-0.2.3.jar relast-compiler.jar</code></li>
</ul></li>
<li>Run preprocessor on train benchmark (output written to standard output): <li>Run preprocessor on train benchmark (output written to standard output):
<ul> <ul>
<li><code>cat examples/TrainBenchmark.relast</code></li> <li><code>cat examples/TrainBenchmark.relast</code></li>
...@@ -100,17 +69,11 @@ ...@@ -100,17 +69,11 @@
<li><code>cat examples/TrainBenchmarkGen.ast</code></li> <li><code>cat examples/TrainBenchmarkGen.ast</code></li>
<li><code>cat examples/TrainBenchmarkGen.jadd</code></li> <li><code>cat examples/TrainBenchmarkGen.jadd</code></li>
</ul></li> </ul></li>
<li>Run preprocessor and write output to files (with a different list class):
<ul>
<li><code>java -jar relast-compiler.jar examples/TrainBenchmark.relast --listClass=MyListClass --file</code></li>
<li><code>cat examples/TrainBenchmarkGen.ast</code></li>
<li><code>cat examples/TrainBenchmarkGen.jadd</code></li>
</ul></li>
</ul> </ul>
<h2 id="the-train-benchmark">The Train Benchmark</h2> <h2 id="the-train-benchmark">The Train Benchmark</h2>
<h3 id="structure-of-the-train-benchmark">Structure of the Train Benchmark</h3> <h3 id="structure-of-the-train-benchmark">Structure of the Train Benchmark</h3>
<p>The benchmark is able to measure different scenarios specified by configurations with several kinds of parameters:</p> <p>The benchmark is able to measure different scenarios specified by configurations with several kinds of parameters:</p>
<ol style="list-style-type: decimal"> <ol type="1">
<li><strong>Input Data:</strong> There are two types of input data used in the benchmark, the <code>inject</code> and the <code>repair</code> data set. The former contains <em>valid</em> models, i.e., models, which do not contain any of the faults that are supposed to be found by the presented queries. The latter, <code>repair</code>, contains models already containing faults.</li> <li><strong>Input Data:</strong> There are two types of input data used in the benchmark, the <code>inject</code> and the <code>repair</code> data set. The former contains <em>valid</em> models, i.e., models, which do not contain any of the faults that are supposed to be found by the presented queries. The latter, <code>repair</code>, contains models already containing faults.</li>
<li><strong>Queries:</strong> The queries are used to find the aforementioned faults. For each fault, there are two queries: <em>repair</em>, to find the fault, and <em>inject</em>, to find places where a fault can be injected.</li> <li><strong>Queries:</strong> The queries are used to find the aforementioned faults. For each fault, there are two queries: <em>repair</em>, to find the fault, and <em>inject</em>, to find places where a fault can be injected.</li>
<li><strong>Transformations:</strong> The transformations performed by the benchmark are, again, two sets: <em>inject</em> and <em>repair</em> transformations.</li> <li><strong>Transformations:</strong> The transformations performed by the benchmark are, again, two sets: <em>inject</em> and <em>repair</em> transformations.</li>
...@@ -118,18 +81,10 @@ ...@@ -118,18 +81,10 @@
</ol> </ol>
<p>These settings are defined in a <em>benchmark scenario</em>, which can be edited before running the benchmark.</p> <p>These settings are defined in a <em>benchmark scenario</em>, which can be edited before running the benchmark.</p>
<h3 id="measurement-data">Measurement Data</h3> <h3 id="measurement-data">Measurement Data</h3>
<p>The result data is stored in the directory <a href="paper-results/" class="uri">paper-results/</a>. This directory contains two subdirectories:</p> <p>The result data is stored in the directory <a href="paper-results/">paper-results/</a>. This directory contains two subdirectories:</p>
<ul> <ul>
<li><a href="paper-results/measurements">measurements</a> contains two directories. The <a href="paper-results/measurements/inject">inject</a> subdirectory contains the measurements for the <em>inject</em> scenario, which is also included in <a href="paper-results/measurements/inject/BenchmarkScript.groovy">inject/BenchmarkScript.groovy</a>. The <a href="paper-results/measurements/repair">repair</a> subdirectory contains the same data for the <em>repair</em> scenario in <a href="paper-results/measurements/repair/BenchmarkScript.groovy">repair/BenchmarkScript.groovy</a>. Both directories contain files with time measurement data (starting with <code>times</code>) and the numbers of matches (starting with <code>matches</code>). Each file name contains information on the tool used, the query, and the size of the model.</li> <li><a href="paper-results/measurements">measurements</a> contains two directories. The <a href="paper-results/measurements/individual">individual</a> subdirectory contains the measurements for individual queries for both the <em>inject</em> and <em>repair</em> scenario. The <a href="paper-results/measurements/all-queries">all-queries</a> subdirectory contains the same data for the a run including all queries in sequence. Both directories contain files with time measurement data (starting with <code>times</code>) and the numbers of matches (starting with <code>matches</code>). Each file name contains information on the tool used, the query, and the size of the model.</li>
<li><a href="paper-results/diagrams">diagrams</a> contains the same subdirectories, both containing diagrams with the respective measurements. The diagrams are generated from the same data as in the paper, but enlarged for better readability. In particular, the six diagrams presented in the paper are <li><a href="paper-results/diagrams">diagrams</a> contains the same subdirectories, containing diagrams with the respective measurements. The diagrams are generated from the same data as in the paper, but enlarged for better readability.</li>
<ul>
<li><a href="paper-results/diagrams/repair/Read-and-Check-RouteSensor.pdf">Fig. 7a. Read and Check for RouteSensor (repair)</a></li>
<li><a href="paper-results/diagrams/repair/Read-and-Check-ConnectedSegments.pdf">Fig. 7b. Read and Check for ConnectedSegments (repair)</a></li>
<li><a href="paper-results/diagrams/inject/Transformation-and-Recheck-RouteSensor.pdf">Fig. 7c. Transformation and Recheck for RouteSensor (inject)</a></li>
<li><a href="paper-results/diagrams/inject/Transformation-and-Recheck-ConnectedSegments.pdf">Fig. 7d. Transformation and Recheck for ConnectedSegments (inject)</a></li>
<li><a href="paper-results/diagrams/repair/Transformation-and-Recheck-RouteSensor.pdf">Fig. 7e. Transformation and Recheck for RouteSensor (repair)</a></li>
<li><a href="paper-results/diagrams/repair/Transformation-and-Recheck-ConnectedSegments.pdf">Fig. 7f. Transformation and Recheck for ConnectedSegments (repair)</a></li>
</ul></li>
</ul> </ul>
<p><strong>Please Note:</strong> The measurements were conducted using a timeout for the whole run. If a run was not completed, no individual times of the steps appear in the measurements and diagrams. Thus, some tools do not have measurements for all problem sizes.</p> <p><strong>Please Note:</strong> The measurements were conducted using a timeout for the whole run. If a run was not completed, no individual times of the steps appear in the measurements and diagrams. Thus, some tools do not have measurements for all problem sizes.</p>
<h3 id="the-source-code">The Source Code</h3> <h3 id="the-source-code">The Source Code</h3>
...@@ -143,17 +98,17 @@ ...@@ -143,17 +98,17 @@
<li><a href="trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/queries">Queries</a></li> <li><a href="trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/queries">Queries</a></li>
<li><a href="trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations">Transformations</a></li> <li><a href="trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations">Transformations</a></li>
</ul></li> </ul></li>
<li><a href="trainbenchmark/trainbenchmark-tool-jastadd-optimized-base">JastAdd with Intrinsic References</a> <li><a href="trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-base">JastAdd with Intrinsic References</a>
<ul> <ul>
<li><a href="trainbenchmark/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/train.ast">Grammar</a></li> <li><a href="trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-base/src/main/jastadd/train.ast">Grammar</a></li>
<li><a href="trainbenchmark/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/queries">Queries</a></li> <li><a href="trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-base/src/main/jastadd/queries">Queries</a></li>
<li><a href="trainbenchmark/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations">Transformations</a></li> <li><a href="trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations">Transformations</a></li>
</ul></li> </ul></li>
<li><a href="trainbenchmark/trainbenchmark-tool-jastadd-specialized-base">JastAdd with Grammar Extension</a> <li><a href="trainbenchmark/trainbenchmark-tool-jastadd-relast-base">JastAdd with Grammar Extension</a>
<ul> <ul>
<li><a href="trainbenchmark/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/Train.relast">(Extended) Grammar</a></li> <li><a href="trainbenchmark/trainbenchmark-tool-jastadd-relast-base/src/main/jastadd/Train.relast">(Extended) Grammar</a></li>
<li><a href="trainbenchmark/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/queries">Queries</a></li> <li><a href="trainbenchmark/trainbenchmark-tool-jastadd-relast-base/src/main/jastadd/queries">Queries</a></li>
<li><a href="trainbenchmark/trainbenchmark-tool-jastadd-specialized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations">Transformations</a></li> <li><a href="trainbenchmark/trainbenchmark-tool-jastadd-relast-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations">Transformations</a></li>
</ul></li> </ul></li>
<li><a href="trainbenchmark/trainbenchmark-tool-jastadd-base">Common JastAdd Code</a></li> <li><a href="trainbenchmark/trainbenchmark-tool-jastadd-base">Common JastAdd Code</a></li>
</ul> </ul>
...@@ -184,7 +139,7 @@ ...@@ -184,7 +139,7 @@
</ul> </ul>
<h5 id="running-the-docker-image">Running the Docker Image</h5> <h5 id="running-the-docker-image">Running the Docker Image</h5>
<ul> <ul>
<li><code>docker run -it -v &quot;$PWD&quot;/docker-results:/trainbenchmark/results:Z -v &quot;$PWD&quot;/docker-diagrams:/trainbenchmark/diagrams:Z trainbenchmark</code></li> <li><code>docker run -it -v "$PWD"/docker-results:/trainbenchmark/results:Z -v "$PWD"/docker-diagrams:/trainbenchmark/diagrams:Z trainbenchmark</code></li>
<li>This makes the results and diagrams available outside the container in the directories <code>docker-results</code> and <code>docker-diagrams</code> respectively</li> <li>This makes the results and diagrams available outside the container in the directories <code>docker-results</code> and <code>docker-diagrams</code> respectively</li>
<li>Once running, a command prompt is opened and some information is displayed</li> <li>Once running, a command prompt is opened and some information is displayed</li>
<li>Follow the instructions below</li> <li>Follow the instructions below</li>
...@@ -196,38 +151,38 @@ ...@@ -196,38 +151,38 @@
<table> <table>
<thead> <thead>
<tr class="header"> <tr class="header">
<th>Name</th> <th style="text-align: left;">Name</th>
<th>Command</th> <th style="text-align: left;">Command</th>
<th>Minimum size</th> <th style="text-align: left;">Minimum size</th>
<th>Maximum size</th> <th style="text-align: left;">Maximum size</th>
<th>Timeout</th> <th style="text-align: left;">Timeout</th>
<th>Runs</th> <th style="text-align: left;">Runs</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="odd"> <tr class="odd">
<td>Small</td> <td style="text-align: left;">Small</td>
<td><code>./run_small</code></td> <td style="text-align: left;"><code>./run_small</code></td>
<td>1</td> <td style="text-align: left;">1</td>
<td>32</td> <td style="text-align: left;">32</td>
<td>60s</td> <td style="text-align: left;">60s</td>
<td>1</td> <td style="text-align: left;">1</td>
</tr> </tr>
<tr class="even"> <tr class="even">
<td>Medium</td> <td style="text-align: left;">Medium</td>
<td><code>./run_medium</code></td> <td style="text-align: left;"><code>./run_medium</code></td>
<td>1</td> <td style="text-align: left;">1</td>
<td>64</td> <td style="text-align: left;">64</td>
<td>10min</td> <td style="text-align: left;">10min</td>
<td>5</td> <td style="text-align: left;">5</td>
</tr> </tr>
<tr class="odd"> <tr class="odd">
<td>Full</td> <td style="text-align: left;">Full</td>
<td><code>./run_full</code></td> <td style="text-align: left;"><code>./run_full</code></td>
<td>1</td> <td style="text-align: left;">1</td>
<td>512</td> <td style="text-align: left;">512</td>
<td>15min</td> <td style="text-align: left;">15min</td>
<td>10</td> <td style="text-align: left;">10</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
...@@ -236,12 +191,10 @@ ...@@ -236,12 +191,10 @@
<ul> <ul>
<li>run <code>./gradlew preprocess</code> to generate the grammar from the extended grammar specification</li> <li>run <code>./gradlew preprocess</code> to generate the grammar from the extended grammar specification</li>
<li>run <code>./gradlew build shadowJar -x test</code></li> <li>run <code>./gradlew build shadowJar -x test</code></li>
<li>run <code>./gradlew initScripts</code></li>
<li>configure the scripts by running <code>./scripts/configure.sh 1 &lt;MAXSIZE&gt; &lt;TIMEOUT in s&gt; &lt;REPETITIONS&gt;</code> <li>configure the scripts by running <code>./scripts/configure.sh 1 &lt;MAXSIZE&gt; &lt;TIMEOUT in s&gt; &lt;REPETITIONS&gt;</code>
<ul> <ul>
<li>Where MAXSIZE is one of 2, 4, 8, 16, 32, 64, 128, 256, 512, or, 1024. The larger sizes use <strong>a lot of</strong> disk space!</li> <li>Where MAXSIZE is one of 2, 4, 8, 16, 32, 64, 128, 256, 512, or, 1024. The larger sizes use <strong>a lot of</strong> disk space!</li>
</ul></li> </ul></li>
<li>run <code>./gradlew initScripts</code></li>
<li>run <code>./gradlew generate</code></li> <li>run <code>./gradlew generate</code></li>
<li>run the benchmark <li>run the benchmark
<ul> <ul>
...@@ -255,5 +208,3 @@ ...@@ -255,5 +208,3 @@
<li>When running with docker, the data is also in <code>docker-results</code> and <code>docker-diagrams</code> on the host machine.</li> <li>When running with docker, the data is also in <code>docker-results</code> and <code>docker-diagrams</code> on the host machine.</li>
</ul></li> </ul></li>
</ul> </ul>
</body>
</html>
# Artifacts for "Continuous Model Validation Using Reference Attribute Grammars" [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3666664.svg)](https://doi.org/10.5281/zenodo.3666664)
*Note: please use the HTML version of this README.*
*Also Note: There is a variant of this submission including a docker image (provided as a link) and one without it (uploaded in HotCRP). We encourage using the one including the image, since building the image takes a long time.* # Artifacts for "Continuous Model Validation Using Reference Attribute Grammars"
### Authors ### Authors
...@@ -26,11 +24,13 @@ The proposed modelling techniques are compared to state-of-the-art modelling too ...@@ -26,11 +24,13 @@ The proposed modelling techniques are compared to state-of-the-art modelling too
### Structure of the Supplementary Artifacts ### Structure of the Supplementary Artifacts
The artifacts are structured in three parts: The artifacts are structured in four parts:
- A standalone example of the non-containment references preprocessor - A standalone example of the non-containment references preprocessor (relational-rags-0.2.3.zip)
- Benchmark code to reproduce the measurements, including all relevant source codes - Benchmark code to reproduce the measurements, including all relevant source codes
- Full collection of all measurement data and diagrams mentioned in the paper - as a zip file (ModelValidationWithRAGs.zip)
- as a docker container (trainbenchmark-docker.tar)
- Full collection of all measurement data and diagrams mentioned in the paper (paper-results.zip)
### General Remarks on the presented Listings and Measurements ### General Remarks on the presented Listings and Measurements
...@@ -39,11 +39,11 @@ Most importantly, the names of the three presented JastAdd implementation varian ...@@ -39,11 +39,11 @@ Most importantly, the names of the three presented JastAdd implementation varian
The following table shows the relation of the terminology used in the paper and in the code. The following table shows the relation of the terminology used in the paper and in the code.
| Name used in Paper | Name used in result data | Name used in source code | | Name used in paper and result data | Name used in source code |
|-----------------------|-----------------------------|----------------------------| |------------------------------------|----------------------------|
| Name Lookup | Jastadd (Name Lookup) | jastadd-namelookup | | Name Lookup | jastadd-namelookup |
| Intrinsic References | Jastadd (Optimized) | jastadd-optimized | | Intrinsic References | jastadd-intrinsic |
| Grammar Extension | Jastadd (Specialized) | jastadd-specialized | | Grammar Extension | jastadd-relast |
## The Grammar Extension Preprocessor *RelAst* ## The Grammar Extension Preprocessor *RelAst*
...@@ -52,6 +52,10 @@ This preprocessor including its source code is provided in the `preprocessor` su ...@@ -52,6 +52,10 @@ This preprocessor including its source code is provided in the `preprocessor` su
Its usage is: Its usage is:
- Build the preprocessor
- `./gradlew build jar`
- copy the jar `cp build/libs/relational-rags-0.2.3.jar relast-compiler.jar`
- Run preprocessor on train benchmark (output written to standard output): - Run preprocessor on train benchmark (output written to standard output):
- `cat examples/TrainBenchmark.relast` - `cat examples/TrainBenchmark.relast`
- `java -jar relast-compiler.jar examples/TrainBenchmark.relast` - `java -jar relast-compiler.jar examples/TrainBenchmark.relast`
...@@ -61,11 +65,6 @@ Its usage is: ...@@ -61,11 +65,6 @@ Its usage is:
- `cat examples/TrainBenchmarkGen.ast` - `cat examples/TrainBenchmarkGen.ast`
- `cat examples/TrainBenchmarkGen.jadd` - `cat examples/TrainBenchmarkGen.jadd`
- Run preprocessor and write output to files (with a different list class):
- `java -jar relast-compiler.jar examples/TrainBenchmark.relast --listClass=MyListClass --file`
- `cat examples/TrainBenchmarkGen.ast`
- `cat examples/TrainBenchmarkGen.jadd`
## The Train Benchmark ## The Train Benchmark
...@@ -90,19 +89,12 @@ The result data is stored in the directory [paper-results/](paper-results/). ...@@ -90,19 +89,12 @@ The result data is stored in the directory [paper-results/](paper-results/).
This directory contains two subdirectories: This directory contains two subdirectories:
- [measurements](paper-results/measurements) contains two directories. - [measurements](paper-results/measurements) contains two directories.
The [inject](paper-results/measurements/inject) subdirectory contains the measurements for the *inject* scenario, which is also included in [inject/BenchmarkScript.groovy](paper-results/measurements/inject/BenchmarkScript.groovy). The [individual](paper-results/measurements/individual) subdirectory contains the measurements for individual queries for both the *inject* and *repair* scenario.
The [repair](paper-results/measurements/repair) subdirectory contains the same data for the *repair* scenario in [repair/BenchmarkScript.groovy](paper-results/measurements/repair/BenchmarkScript.groovy). The [all-queries](paper-results/measurements/all-queries) subdirectory contains the same data for the a run including all queries in sequence.
Both directories contain files with time measurement data (starting with `times`) and the numbers of matches (starting with `matches`). Both directories contain files with time measurement data (starting with `times`) and the numbers of matches (starting with `matches`).
Each file name contains information on the tool used, the query, and the size of the model. Each file name contains information on the tool used, the query, and the size of the model.
- [diagrams](paper-results/diagrams) contains the same subdirectories, both containing diagrams with the respective measurements. - [diagrams](paper-results/diagrams) contains the same subdirectories, containing diagrams with the respective measurements.
The diagrams are generated from the same data as in the paper, but enlarged for better readability. The diagrams are generated from the same data as in the paper, but enlarged for better readability.
In particular, the six diagrams presented in the paper are
- [Fig. 7a. Read and Check for RouteSensor (repair)](paper-results/diagrams/repair/Read-and-Check-RouteSensor.pdf)
- [Fig. 7b. Read and Check for ConnectedSegments (repair)](paper-results/diagrams/repair/Read-and-Check-ConnectedSegments.pdf)
- [Fig. 7c. Transformation and Recheck for RouteSensor (inject)](paper-results/diagrams/inject/Transformation-and-Recheck-RouteSensor.pdf)
- [Fig. 7d. Transformation and Recheck for ConnectedSegments (inject)](paper-results/diagrams/inject/Transformation-and-Recheck-ConnectedSegments.pdf)
- [Fig. 7e. Transformation and Recheck for RouteSensor (repair)](paper-results/diagrams/repair/Transformation-and-Recheck-RouteSensor.pdf)
- [Fig. 7f. Transformation and Recheck for ConnectedSegments (repair)](paper-results/diagrams/repair/Transformation-and-Recheck-ConnectedSegments.pdf)
**Please Note:** The measurements were conducted using a timeout for the whole run. If a run was not completed, no individual times of the steps appear in the measurements and diagrams. Thus, some tools do not have measurements for all problem sizes. **Please Note:** The measurements were conducted using a timeout for the whole run. If a run was not completed, no individual times of the steps appear in the measurements and diagrams. Thus, some tools do not have measurements for all problem sizes.
...@@ -128,14 +120,14 @@ These are the important directories: ...@@ -128,14 +120,14 @@ These are the important directories:
- [Grammar](trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/train.ast) - [Grammar](trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/train.ast)
- [Queries](trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/queries) - [Queries](trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/queries)
- [Transformations](trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations) - [Transformations](trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations)
- [JastAdd with Intrinsic References](trainbenchmark/trainbenchmark-tool-jastadd-optimized-base) - [JastAdd with Intrinsic References](trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-base)
- [Grammar](trainbenchmark/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/train.ast) - [Grammar](trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-base/src/main/jastadd/train.ast)
- [Queries](trainbenchmark/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/queries) - [Queries](trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-base/src/main/jastadd/queries)
- [Transformations](trainbenchmark/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations) - [Transformations](trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations)
- [JastAdd with Grammar Extension](trainbenchmark/trainbenchmark-tool-jastadd-specialized-base) - [JastAdd with Grammar Extension](trainbenchmark/trainbenchmark-tool-jastadd-relast-base)
- [(Extended) Grammar](trainbenchmark/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/Train.relast) - [(Extended) Grammar](trainbenchmark/trainbenchmark-tool-jastadd-relast-base/src/main/jastadd/Train.relast)
- [Queries](trainbenchmark/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/queries) - [Queries](trainbenchmark/trainbenchmark-tool-jastadd-relast-base/src/main/jastadd/queries)
- [Transformations](trainbenchmark/trainbenchmark-tool-jastadd-specialized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations) - [Transformations](trainbenchmark/trainbenchmark-tool-jastadd-relast-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations)
- [Common JastAdd Code](trainbenchmark/trainbenchmark-tool-jastadd-base) - [Common JastAdd Code](trainbenchmark/trainbenchmark-tool-jastadd-base)
### Reproducing the Measurements ### Reproducing the Measurements
...@@ -181,10 +173,8 @@ However, since there are some software requirements imposed by the benchmark, pa ...@@ -181,10 +173,8 @@ However, since there are some software requirements imposed by the benchmark, pa
- For running a custom run, - For running a custom run,
- run `./gradlew preprocess` to generate the grammar from the extended grammar specification - run `./gradlew preprocess` to generate the grammar from the extended grammar specification
- run `./gradlew build shadowJar -x test` - run `./gradlew build shadowJar -x test`
- run `./gradlew initScripts`
- configure the scripts by running `./scripts/configure.sh 1 <MAXSIZE> <TIMEOUT in s> <REPETITIONS>` - configure the scripts by running `./scripts/configure.sh 1 <MAXSIZE> <TIMEOUT in s> <REPETITIONS>`
- Where MAXSIZE is one of 2, 4, 8, 16, 32, 64, 128, 256, 512, or, 1024. The larger sizes use **a lot of** disk space! - Where MAXSIZE is one of 2, 4, 8, 16, 32, 64, 128, 256, 512, or, 1024. The larger sizes use **a lot of** disk space!
- run `./gradlew initScripts`
- run `./gradlew generate` - run `./gradlew generate`
- run the benchmark - run the benchmark
- run `./gradlew individualInjectBenchmark` for the *inject* scenarios - run `./gradlew individualInjectBenchmark` for the *inject* scenarios
......
This diff is collapsed.
...@@ -8,8 +8,6 @@ cp -a \ ...@@ -8,8 +8,6 @@ cp -a \
.dockerignore \ .dockerignore \
README.{md,html,txt} AUTHORS.txt \ README.{md,html,txt} AUTHORS.txt \
Dockerfile docker/ run_docker.sh \ Dockerfile docker/ run_docker.sh \
paper-results/ \
preprocessor/ \
trainbenchmark/ \ trainbenchmark/ \
ModelValidationWithRAGs/ # the target directory ModelValidationWithRAGs/ # the target directory
...@@ -21,4 +19,4 @@ rm -rf ModelValidationWithRAGs/trainbenchmark/*/src/main/java-gen/* ...@@ -21,4 +19,4 @@ rm -rf ModelValidationWithRAGs/trainbenchmark/*/src/main/java-gen/*
rm -f ModelValidationWithRAGs/trainbenchmark/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/TrainGen.* rm -f ModelValidationWithRAGs/trainbenchmark/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/TrainGen.*
rm ModelValidationWithRAGs/preprocessor/.gitignore rm ModelValidationWithRAGs/preprocessor/.gitignore
echo "Now please run 'sudo docker save --output ModelValidationWithRAGs/trainbenchmark-docker.tar trainbenchmark && sudo chown $(whoami):$(whoami) ModelValidationWithRAGs/trainbenchmark-docker.tar'" echo "Now please run '( cd ModelValidationWithRAGs/ && docker build -t trainbenchmark . ) && docker save --output ModelValidationWithRAGs/trainbenchmark-docker.tar trainbenchmark && chown $(whoami):$(whoami) ModelValidationWithRAGs/trainbenchmark-docker.tar'"
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added