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
29 changes: 29 additions & 0 deletions docs/usage_fuzzer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Fuzzers
## Verwendung
Der Fuzzer kann mit den folgenden Befehlen gesteuert werden:
Dieser Befehl löscht den Ordner aus ggf. vorherigen Durchläufen und erstellt einen Neuen.
```bash
rm -rf build/compilerOutput/Fuzzing && mkdir build/compilerOutput/Fuzzing
```
Dieser Befehl kompiliert den Fuzzer inkl. Generator neu, was nach jeder Änderung getan werden muss.
```bash
mvn test-compile
```
Der Befehl startet den Fuzzer. Die Kommandozeilenparameter können angepasst werden. compile ist Optional und entscheidet ob die generierten Projekte kompiliert werden.
```bash
mvn jqf:fuzz -Dclass=CBuilder.CompilerFuzzTest -Dmethod=testWithGenerator -Dcompile -Dtime=5m -e
```
Der Befehlt reproduziert einen Fehler. Im input-target-Parameter muss die ID angepasst werden.
```bash
mvn jqf:repro -Dclass=CBuilder.CompilerFuzzTest -Dmethod=testwithGenerator -Dinput-target=target/fuzz-results/CBuilder/CompilerFuzzTest/testwithGenerator/failures/id_X
```

## Erweiterung

Falls der Fuzzer erweitert werden soll, kann das je nach Erweiterung an drei Stellen passieren.

Soll ein neuer Generator verwendet werden, muss dieser in CompilerFuzzTest.java angegeben werden, damit er von JQF erkannt wird.

Sollen dem bestehenden Generator neue Funktionen die nicht Rekursion verwenden hinzugefügt werden, muss das im CBuildGenerator.java passieren. In der dortigen generateStatement-Funktion existiert ein if-Statement. Im if-Statement werden die Funktion, in der selben Art wie die bisherigen hinzugefügt.

Sollen dem bestehenden Generator neue Funktionen mit Rekursion hinzugefügt werden. Dabei müssen diese im else-Statement, der generateStatement-Funktion, hinzugefügt werden. Dies sollte in der selben Art stattfinden wie bei den Funktionen ohne Rekursion. Bei der Implementierung der Rekursions-Funktionen muss berücksichtigt werden, dass der expressiondepth-Parameter inkrementiert wird.
81 changes: 81 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.fuzzing</groupId>
<artifactId>Fuzzing</artifactId>
<version>1.0.0</version>
<properties>
<maven.compiler.source>15</maven.compiler.source>
<maven.compiler.target>15</maven.compiler.target>
</properties>
<dependencies>
<!-- JUnit BOM (Bill of Materials) für JUnit 5 -->
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.11.0</version>
<scope>import</scope>
<type>pom</type>
</dependency>

<!-- JUnit Jupiter API für Tests -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.11.0</version>
<scope>test</scope>
</dependency>

<!-- JUnit Platform Launcher für das Ausführen von Tests -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.11.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>edu.berkeley.cs.jqf</groupId>
<artifactId>jqf-maven-plugin</artifactId>
<version>2.0</version>
</dependency>
</dependencies>

<build>
<resources>
<resource>
<directory>c-runtime</directory>
<targetPath>c-runtime</targetPath>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>edu.berkeley.cs.jqf</groupId>
<artifactId>jqf-maven-plugin</artifactId>
<version>1.8</version>
</plugin>
<!-- Maven Compiler Plugin zum Festlegen der Java-Version -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>

<!-- Beispiel: Maven Surefire Plugin für das Ausführen von Tests -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
</plugins>
</build>

</project>
Loading
Loading