Umfassendes Bewertungssystem mit automatischer Korrektur (Grader-Service)
Mit dem integrierten Grader-Service der TU Wien ist es möglich den "Übungsbetrieb" (Aufgaben erstellen, verteilen, bearbeiten, abgeben, korrigieren, Feedback ausgeben) über bwJupyter abzuwickeln. Dozierende können über die Erweiterung Jupyter Notebooks mit Aufgaben und Punkten annotieren. Zu jeder Aufgabe können Tests geschrieben werden: Nur wenn der Test durchläuft, gibt es die volle Punktzahl. Die Tests können öffentlich und versteckt sein. Öffentliche Tests werden den Studierenden angezeigt. Das kann nützlich sein, um die grobe Funktionalität zu testen. Versteckte Tests werden den Studierenden nicht angezeigt. Sie können genutzt werden, um Randfälle der implementierten Lösung zu testen.
Nachdem das "Assignment" veröffentlicht wurde, können Studierende, die den Link zum Profil haben, die Aufgaben herunterladen. Die Lösung und die versteckten Tests sind nicht sichtbar. Nach der Bearbeitung muss das Notebook abgegeben werden.
Mit der Abgabe wird das Notebook automatisch bewertet: Die Tests werden ausgeführt und geben Punkte. Nach der automatischen Korrektur besteht die Möglichkeit die Abgabe nachträglich manuell zu korrigieren (z.B. für Freitext-Felder und Bonus-Punkte). Wenn die Korrektur abgeschlossen wurde, kann Feedback generiert werden. Das Feedback zeigt das Jupyter Notebook mit den Punkten, ggf. Kommentaren und den ausgeführten Tests. Studierende können sich das Feedback automatisch anschauen und herunterladen. Nach der Übung kann man sich eine CSV-Datei mit den erzielten Punkten herunterladen.
Grader-Service aktivieren
Um den Grader-Service in einem Profil nutzen zu können, muss zunächst die Option "Enable Grading Service for Jupyter Notebooks" in den Profil-Einstellungen aktiviert werden. Damit der Grader-Service auch in der JupyterLab-Umgebung verfügbar ist, muss das Python-Paket grader-labextension vorhanden sein. Dazu gibt es folgende Möglichkeiten:
- Unteroption "Automatically install the necessary packages during profile start." aktivieren: Wenn die Option gesetzt ist, wird automatisch vor dem Start der JupyterLab-Umgebung das Python-Paket installiert. Der Vorteil ist, dass der Grader-Service damit in jeder JupyterLab-Umgegung (Standard-Profile, eigene Images) genutzt werden kann. Man muss sich nicht um Updates und Bug-Fixes kümmern, da diese von bwJupyter durchgeführt werden. Der Nachteil ist, dass der Start der JupyterLab-Umgebung ein paar Sekunden länger dauert, da das Paket erst installiert werden muss.
- Eigenes Docker Image bauen: Falls bereits ein eigenes Docker Image verwendet wird (siehe Eigene Docker Images bauen und bereitstellen), kann das Paket bereits ins Docker Image installiert werden. Mit dem Befehl "RUN pip install grader-labextension==0.8.2" wird das Paket installiert. Achten Sie darauf, dass Sie die Version verwenden, die bei den Profil-Einstellungen gelistet ist. Beachten Sie hierbei aber, dass die Version ggf. aktualisiert werden muss, wenn eine neue Version des Grader-Services von uns verwendet wird.
Nach den Änderungen hat das Profil in der Profil-Übersicht ("Profile Selection") unter "Shared Profiles" das Badge "Grading enabled".
Verwendung
Die Person, die das Profil erstellt hat, sowie alle "Profil-Collaborator", können Aufgaben erstellen, Abgaben einsehen, usw. Alle anderen Nutzende werden als "Studierende" betrachtet - auch dann, wenn sie in bwJupyter die Rolle "Lecturer" haben. Für die konkrete Nutzung verweisen wir auf die offizielle Dokumentation für Dozierende und Studierende.
Für einen leichteren Einstieg stellen wir Dozierenden ein Beispiel-Notebook mit Aufgaben und Tests zur Verfügung.
Pakete verbieten
In manchen Fällen möchten Dozierende den Zugriff auf bestimmte Pakete und Methoden verbieten. Da sich diese Funktionalität nicht einfach abdecken lässt, unterstützt der Grader-Service dies nicht. In diesem GitHub Issue werden einige Alternativen aufgezeigt.
Kompatibilität mit anderen Kernels
Falls Sie einen Kernel verwenden, der nicht offiziell vom Grader-Service unterstützt wird, können Sie Ihr Docker Image so anpassen, damit der Grader-Service den Kernel berücksichtigt. Freundlicherweise hat uns dazu Leonard Hegemann (Uni Hohenheim) folgenden Auszug aus einem eigenen Docker Image für Stata zur Verfügung gestellt. Bei weiteren Fragen zum Stata-Image können Sie sich an den Lehrstuhl Ökonomie und Empirische Wirtschaftsforschung der Uni Hohenheim (Ansprechpartner: Dr. Johannes Bleher) wenden.
USER root
RUN /opt/conda/bin/python - <<'PY'
from pathlib import Path
import grader_service.convert.preprocessors.clearsolutions as cs
path = Path(cs.__file__)
text = path.read_text()
if '"stata": "* YOUR CODE HERE"' not in text:
marker = ' "R": "# YOUR CODE HERE\\nfail() # No Answer - remove if you provide an answer",\n'
insert = (
marker
+ ' "stata": "* YOUR CODE HERE",\n'
)
if marker not in text:
raise RuntimeError(f"Could not find insertion point in {path}")
text = text.replace(marker, insert)
path.write_text(text)
print(f"Patched {path}")
PY
# Verify patch during image build
RUN /opt/conda/bin/python - <<'PY'
from grader_service.convert.preprocessors.clearsolutions import ClearSolutions
p = ClearSolutions()
assert p.code_stub["stata"] == "* YOUR CODE HERE"
print("Stata ClearSolutions stub OK")
PY
USER jovyan
Feedback, Fragen und Probleme
Melden Sie sich gerne bei uns (support∂bwjupyter.de), wenn Fragen oder Probleme auftreten. Gerne leiten wir auch neue Feature-Anfragen weiter. Bitte beachten Sie aber, dass das Projekt open-source ist und wir den Dienst aus Kapazitätsgründen nicht selbst entwickeln bzw. weiterentwickeln können.