Das Testquiz beinhaltet Beispiele von den meisten möglichen Fragetypen. Je nach Sprache und Beispiel sind unterschiedliche Einstellungen sinnvoll. Es ist daher anzuraten, die entsprechende Frage im Beispielquiz anzuschauen, und die Einstellungen von dort zu übernehmen. Im ersten Teil dieser Anleitung wird der Fragetyp C Function ausführlich erklärt. Im zweiten Teil sind Anmerkungen zu allen Fragetypen. Die offizielle Anleitung zu CodeRunner enthält noch viel mehr Details und Informationen. Sie ist bei Moodle und auf github zu finden.

Fragetyp C-Funktion im Detail

Beispielhaft sind hier die Einstellungen für den Fragetyp c_function  angeführt. Die Bezeichnungen entsprechen jenen in Deutsch. Einstellungen, die hier nicht angeführt sind, können auf den Standardwerten belassen werden:

CodeRunner-Fragetyp

Fragetyp: c_function

Anpassung: "Vorlagen-Debugging" aktivieren

Vorabprüfung: deaktiviert (Nur sinnvoll für längere Programmieraufgaben)

Vorlageparameter: Hier werden die später in der Frage verwendeten Parameter in JSON-Format initialisiert, in unserem Beispiel:

{"dividend": {{ -5+random(20)}}, "divisor": {{-10 + random(20)}} }

Twig controls: "Hoist template parameters" und "Twig all" aktivieren (ersteres vereinfacht die Syntax für die Variablen-Initialisierung, zweiteres ermöglicht Randomisierung, da es Twig für alle Input-Felder aktiviert.)

Allgemeines

Fragetext: Der Fragetext, in unserem Beispiel:

Schreiben Sie eine Funktion quotient, die zwei ganzzahlige Parameter (dividend, divisor) entgegennimmt, 
und den (ganzzahligen) Quotienten der beiden zurückgibt. Sollte der Dividend größer sein als der Divisor,
geben Sie 0 zurück. Wenn der Divisor 0 ist, geben Sie -1 zurück.

(In diesen Fragetext können bei Bedarf über die Twig-Syntax auch auch Variabeln eingefügt werden: {{variable}}, wenn diese bei den Vorlageparametern definiert wurden.)

Antwort

Antwort: Hier wird die richtige C-Funktion definiert, in unserem Beispiel:

int quotient(int dividend, int divisor) {
    if(divisor == 0){
        return -1;
    }
    return dividend / divisor;
}
Testfälle

Testfall 1: printf("%d", quotient(4, 2));

Erwartete Ausgabe: 2

Getestet wird die Ausgabe auf stdout, deshalb muss der Funktionsaufruf in ein printf gebettet werden. Alternativ kann eine bestimmte Ausgabe in der Funktion/Prozedur der Studierenden gefordert werden.

Testeigenschaften: Kann bei einem oder mehreren Tests angehakt werden, damit werden den Studierenden die entsprechenden Testfälle  als Beispiel angezeigt.

Anmerkungen zu den verschiedenen Fragetypen

C-Funktion
  • Studierende schreiben hier eine Funktion (plus Hilfsfunktionen), kein ganzes Programm.
  • Einige standard-includes sollten im Template vorgegeben sein.
  • Main() ist im test-Templates vorgegeben und sollte die zu schreibende Funktion (je nach Testfall auf verschiedene Weisen) aufrufen.
  • Typischerweise muss für jeden Test der Funktionsaufruf in eine Ausgabe eingebettet werden.
  • Es wird der gcc-Kompiler mit folgenden Flags verwendet: -std=C99 -Wall -Werror
C-Programm
  • Studierende schreiben ein ganzes Programm (d.h. Funktionen und die Main()). Dies wird meist zu Anfang verwendet, um die Zusammenhänge in Programmen zu erläutern.
  • Tests geben üblicherweise ein stdin und erwartetes stdout an (Achtung - richtiges Feld für stdin wählen!)
C++-Funktion
  • Studierende schreiben nur eine Funktion (plus Hilfsfunktionen), kein ganzes Programm.
  • Einige standard-includes sollten im Template vorgegeben sein, ebenso z.B. die Zeile using namespace std;
  • Im Test-Template wird der Code der Studierenden vor dem Test-Code eingefügt ( üblicherweise die Main() und einige nützliche Klassen).
C++-Programm
  • Studierende schreiben ein ganzes Programm (d.h. Klassen, deren Methoden und die Main()). Dies wird meist zu Anfang verwendet, um die Zusammenhänge in Programmen zu erläutern.
  • Tests geben üblicherweise ein stdin und erwartetes stdout an (Achtung - richtiges Feld für stdin wählen!)
Java-Methode
  • Studierende schreiben eine Methode (plus Hilfsmethoden).
  • Im Test werden diese Methoden - gemeinsam mit einer static main in eine Klasse gepackt.
  • static main enthält den Testcode
  • Testcode wird typischerweise die Methode der Studierenden aufrufen, und deren Resultate ausgeben.
Java-Klasse
  • Studierende schreiben eine oder mehrere Klassen in einer Datei.
  • Der Testcode wird in eine static main-Funktion gepackt, die in einer eigenen Testklasse ist.
  • Klassen von Studierenden können private oder public sein - der String public class wird vor der Ausführung durch class ersetzt.
Java-Programm
  • Studierende schreiben ein ganzes Programm.
  • Die Main-Klasse wird ermittelt, indem nach dem String public static void main gesucht wird.
Octave-Funktion

Octave ist fast - aber nicht ganz - kompatibel mit Matlab. Weitere Beispiele zur Verwendung von Octave finden Sie auch bei den mathematischen Fragestellungen in diesem Beispielkurs.

PHP

Die Abgabe der Studierenden ist php-Code. Der öffnende PHP-Tag muss dabei geschrieben werden, der schließende darf hingegen nicht geschrieben werden. Es ist möglich, den öffnenden PHP-Tag ins Test-Template einzufügen, so dass Studierende sich nicht darum kümmern müssen.

Python2, Python3
  • eignet sich für die meisten Python-Fragen
  • Wie im Template angegeben wird meist der Code der Studierenden zuerst ausgeführt, danach wird der Testcode ausgeführt.
Python3 mit Input

Bei dieser Variante von Python-Fragen wird die input-Funktion am Anfang des Codes neu definiert, so dass Zeichen von stdin nach stdout umgeleitet werden - als ob sie während eines interaktiven Tests auf dem Keyboard getippt werden würden.

Nachteil dieses Fragetyps: die Zeilennummern im Code der Studierenden stimmen nicht mit den Zeilennummern in Fehlermeldungen überein, da der Code von Studierenden erst später im Code stehen.

SQL
  • Der verwendete SQL-Dialekt ist sqlite3
  • Die Variable columnwidths in den Vorlagenparametern legt die Breite der anzuzeigenden Spalten fest. Sie ist, je nach bedarf, zu verändern.
  • Unter Support Files/Unterstützungsdateien kann eine .db-Datei hochgeladen werden. Dies ist die Datenbank, gegen die getestet wird.
  • Über die Unterstützung anderer Dialekte wird zwar schon geredet, es scheint aber kompliziert sein, die zu implementieren.
Last modified: Wednesday, 4 August 2021, 2:16 PM