... | ... | @@ -2,150 +2,8 @@ Benutzerhandbuch |
|
|
============
|
|
|
Auf dieser Seite wird der Umgang mit allen Dozentron-Funktionen erläutert.
|
|
|
|
|
|
Dozent
|
|
|
--------
|
|
|
Ansicht des Dozenten.
|
|
|
|
|
|
### Gruppen erstellen
|
|
|
Nach dem einloggen befindet man sich auf der Gruppenübersicht(Kursübersicht). Hier kann ein Dozent sich über den markierten Knopf eine neue Gruppe(einen neuen Kurs) anlegen.
|
|
|
![group-overview](/uploads/20a6478ebf76c23bb6c715123b937cad/group-overview.png)
|
|
|
|
|
|
Eine Gruppe(Kurs) bekommt einen Titel und eine Beschreibung, die man mit Markdown formatieren kann. An dieser Stelle kann man auch angeben, ob die Gruppe(Kurs) für andere sichtbar sein soll.
|
|
|
![new-group](/uploads/a6a537ebcba9088b14da620c8f66c228/new-group.png)
|
|
|
|
|
|
Nachdem man eine Gruppe erstellt hat, wird man auf die Übersicht dieser Gruppe weitergeleitet. Unter dem Titel der Seite ist ein Breadcrump-Element, dieses Element zeigt in welcher Gruppe man sich gerade befindet. Außerdem kann man darüber leicht zurück auf eine obere Gruppe navigieren. Auf der Ansicht einer Gruppe kann man weitere Gruppen oder Aufgaben erstellen.
|
|
|
![group-view](/uploads/6a6c38f88bed7676920df51fb01fa4f4/group-view.png)
|
|
|
|
|
|
### Aufgaben erstellen
|
|
|
In diesem Kapitel wird erklärt, wie Aufgaben für das Java Plugin erstellt werden.
|
|
|
|
|
|
#### Aufgaben
|
|
|
Eine Java-Aufgabe besteht aus Junit4-Tests und einem Stub der zu testenden Klasse. Der Stub dient nur dazu zu überprüfen, ob der Junit-Test kompiliert werden kann und kann leer gelassen werden.
|
|
|
|
|
|
```java
|
|
|
/*
|
|
|
* Beispiel Unittest
|
|
|
*/
|
|
|
public class TestMotor {
|
|
|
@Test
|
|
|
public void testFuellanzeige() {
|
|
|
Assert.assertTrue(FooBar.rand() < 0.5);
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
public void testAnlasser() {
|
|
|
Assert.assertTrue(FooBar.rand() < 0.5);
|
|
|
}
|
|
|
|
|
|
//...
|
|
|
}
|
|
|
```
|
|
|
|
|
|
```java
|
|
|
/*
|
|
|
* Beispiel Abgabe
|
|
|
*/
|
|
|
public class FooBar {
|
|
|
public static double rand() {
|
|
|
double val = Math.random();
|
|
|
|
|
|
if(val > 0.85) throw new IllegalArgumentException("Exception Beispiel");
|
|
|
|
|
|
return val;
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
Um die Aufgabe auf Dozentron zu erstellen werden die Test class-Dateien in eine Jar-Datei gepackt und alle java-Dateien die zum compilieren benötigt werden in eine 2. Jar-Datei gepackt. Hierbei ist es wichtig, das **keine** Klasse, die getestet werden soll in der Jar datei mit den Tests vorhanden ist, da sie sonst die Implementierungen der Abgaben verdecken.
|
|
|
![new-task](/uploads/077614e2ac1d3ec92014d9be6b382a4c/new-task.png)
|
|
|
|
|
|
Wenn beim erstellen die Option "mit Moss auf Plagiate prüfen" aktiviert wurde, dann wird nach einer Abgabe automatisch Moss gestartet. Sollte beim erstellen ein Fehler aufgetreten sein, werden die Details in einem aufklappbaren Element angezeigt.
|
|
|
|
|
|
#### Eingabeaufgaben
|
|
|
Eine Eingabeaufgabe ist eine Aufgabe, bei der ein Student eine für ihn einzigartige Eingabe generiert bekommt. Mit dieser Eingabe muss er die ihm gestellte Aufgabe lösen und bekommt einen Text als Ergebnis, den er dann auf Dozentron als Lösung abgibt. Diese Tests haben den Vorteil, das der Student sie in einer beliebigen Programmiersprache lösen kann.
|
|
|
|
|
|
Für einen Eingabetest wird ein Programm zum generieren von Eingaben und eine "Musterlösung" benötigt. Der Generator ist ein ausführbares Java-Programm, dass eine Eingabe für den Studenten auf die Standardausgabe schreibt.
|
|
|
|
|
|
Beispiel für eine Einfache Aufgabe: Zähle wie viele "|" für dich generiert wurden.
|
|
|
|
|
|
```java
|
|
|
package de.thm.mni;
|
|
|
|
|
|
/**
|
|
|
*
|
|
|
*/
|
|
|
public class BeispielGenerator {
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
int length = (int) (Math.random() * 10) + 2;
|
|
|
StringBuilder out = new StringBuilder();
|
|
|
|
|
|
|
|
|
for (int i = 0; i < length; i++)
|
|
|
out.append('|');
|
|
|
|
|
|
System.out.println(out.toString());
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
Die "Musterlösung" ist ein Programm, dass die Eingabe von einem Student und seine Lösung als 2 Programmargumente bekommt:
|
|
|
|
|
|
* input=<Pfad zu einer Datei mit der Eingabe des Studenten>
|
|
|
* student-output=<Pfad zu einer Datei mit dem Ergebnis des Studenten>
|
|
|
|
|
|
Die "Musterlösung" muss auch ohne Argumente ohne Fehler beenden, dies wird von dem Plugin als Indiz gesehen, dass sie richtig implementiert wurde. Um anzugeben ob das Ergebnis eines Studenten richtig oder falsch war, wird die Standardausgabe verwendet.
|
|
|
* Wenn die Standardausgabe von der "Musterlösung" leer ist, dann wird angenommen, dass das Ergebnis korrekt ist.
|
|
|
* Wenn etwas auf die Standardausgabe geschrieben wird, wird angenommen, dass das Ergebnis falsch ist und die Ausgabe wird dem Studenten als Grund angezeigt.
|
|
|
|
|
|
```java
|
|
|
package de.thm.mni;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.nio.file.Files;
|
|
|
import java.nio.file.Paths;
|
|
|
import java.util.Arrays;
|
|
|
|
|
|
/**
|
|
|
* Beispiel für eine "Musterlösung" von einem Eingabetest in Java.
|
|
|
*/
|
|
|
public class BeispielLoesung {
|
|
|
public static void main(String[] args) throws IOException {
|
|
|
// Sicher gehen, dass wir ohne Parameter ohne Fehler beenden.
|
|
|
// Das Eingabetest Plugin benutzt diese Information als Indiz, dass wir die "Musterlösung" richtig geschrieben haben.
|
|
|
if(args.length == 0)
|
|
|
System.exit(0);
|
|
|
|
|
|
String inputFile = null;
|
|
|
String studentOutputFile = null;
|
|
|
|
|
|
for(String arg : args) {
|
|
|
if(arg.startsWith("input=")) {
|
|
|
inputFile = arg.substring("input=".length());
|
|
|
}
|
|
|
|
|
|
if(arg.startsWith("student-output=")) {
|
|
|
studentOutputFile = arg.substring("student-output=".length());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
String input = new String(Files.readAllBytes(Paths.get(inputFile)));
|
|
|
int expectedOutput = input.trim().length();
|
|
|
int gotOutput;
|
|
|
try {
|
|
|
gotOutput = Integer.parseInt(new String(Files.readAllBytes(Paths.get(studentOutputFile))).trim());
|
|
|
|
|
|
// Schreibe den Grund für einen Misserfolg auf die Standardausgabe
|
|
|
if(expectedOutput > gotOutput)
|
|
|
System.out.println("Die gesuchte Zahl ist größer!");
|
|
|
else if(expectedOutput < gotOutput)
|
|
|
System.out.println("Die gesuchte Zahl ist kleiner!");
|
|
|
} catch(NumberFormatException e) {
|
|
|
System.out.println("Abgabe muss eine Zahl sein!");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
Um die Aufgabe auf Dozentron zu erstellen, werden der Generator und die "Musterlösung" zu ausführbaren Jar-Dateien gepackt. Diese Jar-Dateien werden dann auf Dozentron als Generator und "Test" angegeben.
|
|
|
|
|
|
![new-input-output](/uploads/c4b56325f8156a71f60feda91486a488/new-input-output.png) |
|
|
\ No newline at end of file |
|
|
[Gruppen erstellen](resource/how-to-use/group)
|
|
|
[Aufgaben erstellen](resource/how-to-use/task)
|
|
|
[Eingabeaufgaben erstellen](resource/how-to-use/input-task)
|
|
|
[Ergebnisübersicht](resource/how-to-use/result-overview)
|
|
|
[Abgaben einreichen](resource/how-to-use/submission) |