Tag für Lehrende 2024 der FHStP

07.02.2024

⚡ Coderunner: Automatisiertes Assessment iterativer Verfahren in Moodle

#IterativeVerfahren #Coderunner #Numerik #Mathematik #Moodle

 

Alexander Dominicus

Dieser Artikel beschreibt den Einsatz des Lern-Management-Systems Moodle in Kombination mit dem Plugin Coderunner beim Erlernen iterativer mathematischer Verfahren in der Hochschullehre. Es wird dargestellt, wie Coderunner Studierenden in Fächern wie Mathematik, Ingenieurwissenschaften und Informatik hilft, durch direktes und präzises Feedback praktische Fähigkeiten im Umgang mit iterativen Algorithmen zu entwickeln.

Iterative Verfahren zur sukzessiven Approximation einer gesuchten Lösung werden in den verschiedensten Bereichen der Hochschullehre eingesetzt. Dazu gehören z.B. das Lösen nichtlinearer Gleichungssysteme in den Ingenieurswissenschaften, in den Wirtschaftswissenschaften das Lösen von Optimierungsproblemen oder die Berechnung approximativer Lösungen von Differentialgleichungen in den Naturwissenschaften.

Das Erlernen iterativer Verfahren erfolgt vorrangig durch praktische Erfahrung in verschiedenen Programmierumgebungen ähnlich dem Erlernen einer Programmiersprache. Dies stellt vor Allem eine Herausforderung dar, wenn Dozierende studentische Programmierarbeiten manuell bewerten müssen, was bei einer großen Anzahl von Lernenden zu einem erheblichen Zeitaufwand führen kann.

Da wir von einer generellen Akzeptanz von automatisiertem Assessment ausgehen können (Horn, Schiffner, & Krömker, 2021), soll in diesem Beitrag der Einsatz des Moodle-Fragetyps „Coderunner“ (moodle.org, 2024, Lobb & Harlow, 2016) beim praktischen Erlenen der oben beschriebenen Verfahren erläutert werden. Hier soll der in Ullah, et al. (2018) beschriebene Effekt, dass die Ausgabe eines sofortigen Feedbacks bei der Fehlerbehebung unterstützt und zur vollständigen Lösung der Aufgabenstellung motiviert, genutzt werden. Um dies für die Leser*innen greifbarer zu machen, wird beschrieben, wie die folgende Fragestellung in einem Moodle-System automatisiert abgefragt werden kann:

Musteraufgabe: Erstellen Sie eine Python-Funktion, die auf Basis des Newton-Verfahrens eine Approximation an die Quadratwurzel der Zahl 2 für einen gegebenen Startwert a berechnet. Der Programmcode sollte so erstellt werden, dass durch iterative Anwendung die Genauigkeit der Approximation sukzessive verbessert werden kann.

Wie in der Aufgabenstellung gefordert, wird das Newton-Verfahren (Shikhman, 2019) genutzt, um folgenden Programmcode zu erstellen, welcher als Lösung für die obige Musteraufgabe genutzt werden kann:

def my_sqrt(x):

    new_approx=0.5*(x+2/x)

    return new_approx

Der Coderunner-Fragetyp

Der Einsatz dieses Fragetyps läuft im einfachsten Fall folgendermaßen ab: Anhand der gegebenen Aufgabenstellung erstellen die Studierenden eine Funktion, die für verschiedene vordefinierte Testfälle entsprechende Ausgaben erzeugen soll. Ein Beispiel wäre hier die Ausgabe aller Quadratzahlen von 1 bis zu einer gegebenen Zahl n. In den Testfällen würde die entsprechende Funktion dann für verschiedene Zahlen n aufgerufen. Erfüllt der studentische Programmcode alle Testfälle, so wird die Frage als korrekt gewertet, ein entsprechendes Feedback ausgegeben und die Frage bepunktet. Falls nicht alle Testfälle erfolgreich durchlaufen werden, muss die Funktion angepasst werden.

Die oben beschriebenen vordefinierten Testfälle sind hilfreich, wenn die Funktionsausgabe im Vorfeld für jeden Testfall vordefiniert ist. Im Fall der oben beschriebenen Musteraufgabe muss jedoch eine eigene Bewertungsvorlage erstellen werden, um die studentische Antwort zu überprüfen.

Eigene Bewertungsvorlagen entwickeln

Um die oben angegebene Musteraufgabe zu implementieren, bietet Coderunner die Möglichkeit eine bestehende Frage auf vielfältige Weise anzupassen. So ist es möglich sich vollständig von den vordefinierten Testfällen zu lösen und mittels Python ein eigenes Bewertungsschema zu erstellen. Dazu muss bei der Bearbeitung der entsprechenden Frage der Punkt Anpassung -> “Anpassen“ markiert werden. Daraufhin öffnet sich im Bereich Anpassung das Textfeld Vorlage. Dort wird nun ein Python-Skript erstellt, welches als Grundlage zur Bewertung der studentischen Antwort genutzt wird:

import math

NUM_ITER = 10

{{ STUDENT_ANSWER | e('py') }}

ok = True

startvalue=2

expected = math.sqrt(2)

lasterror = abs(startvalue-expected)

TOLERANCE=10e-10

for i in range(NUM_ITER):

    stud_answer = my_sqrt(startvalue)

    startvalue = stud_answer

    newerror = abs(stud_answer-expected)

    if lasterror < newerror:

        print("Der Algorithmus nähert sich nicht der exakten Lösung an!")

        ok = False

        break

    if abs(expected - stud_answer) <= TOLERANCE:

        print("Gewünschte Toleranz erreicht")

        print("Anzahl Iterationen: {}, Fehler: {}".format(i, newerror))

        break

    lasterror = newerror

if ok:

    print("Alle Tests bestanden!")

Zunächst werden die studentische Funktion ausgelesen und alle benötigten Werte berechnet (Fehlertoleranz, exakte Darstellung von √2 usw.). Die eigentliche Überprüfung des studentischen Programmcodes findet in der darauffolgenden Schleife statt. Dort wird die Funktion iterativ aufgerufen und geprüft, ob die Lösung sich sukzessive an die exakte Lösung √2 annähert. Im positiven Fall wird ein Feedback mitsamt dem absoluten Fehler und der Anzahl der benötigten Iterationen ausgegeben. Anschließend muss noch eine Punktzahl zur Benotung errechnet werden. Um den Algorithmus zur Auswertung kurz zu halten, wird dieser Teil hier nicht dargestellt. Zahlreiche weiterführende Beispiele zum Einsatz eigener Bewertungsvorlagen sind in DigiTeach-Instiut (2024) zu finden.

Ausblick

Da sich diese Arbeit in einem sehr speziellen Rahmen bewegt ist eine Untersuchung analog zu Horn, Schiffner und Krömker (2021) wünschenswert. Außerdem ist folgende alternative Herangehensweise zu untersuchen: In Lobb, (2024, https://coderunner.org.nz/) wird eine Modifikation des Fragetyps Coderunner beschrieben (Python3 „sandpit“), welche nicht auf einer Bewertung basiert, sondern den Studierenden erlaubt einen beliebigen Programmcode auszuführen. Damit wäre es möglich eine sehr einfach zugängliche Programmier-Umgebung vergleichbar mit einem Jupyter-Notebook (Jupyter, 2024) innerhalb von Moodle zu schaffen.

Kommentare