Accelerating Accurate Assignment Authoring Using Solution-Generated Autograders
Dieses Paper führt „solution-generated autograding“ ein, eine Methode, die bereitgestellte Lösungen nutzt, um automatisch präzise und skalierbare Autograder ohne manuelle Enumeration von Testfällen zu erstellen, demonstriert durch das Questioner-System, welches über vier Jahre hinweg erfolgreich einen großen CS1-Kurs mit fast 800 Programmieraufgaben unterstützt hat.
Originalarbeit lizenziert unter CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dies ist eine KI-generierte Erklärung des untenstehenden Papers. Sie wurde nicht von den Autoren verfasst oder gebilligt. Für technische Genauigkeit konsultieren Sie das Originalpaper. Vollständigen Haftungsausschluss lesen
Stellen Sie sich vor, Sie sind ein Lehrer, der versucht, einer Klasse von Tausenden die perfekte Schokoladenkuchen zu backen beizubringen. In den alten Tagen hätten Sie jeden einzelnen Kuchen Ihrer Schüler selbst probieren müssen, um sie zu benoten. Aber bei Tausenden von Schülern ist das unmöglich. Also bauen Sie einen Roboter-Koch, um die Kuchen für Sie zu probieren. Dieser Roboter ist ein „Autograder“ (automatischer Korrekturleser). Normalerweise müssten Sie dem Roboter, um beizubringen, was ein „guter“ Kuchen ist, eine massive, mühsame Liste von Regeln schreiben: „Wenn der Kuchen zu trocken ist, lass ihn durchfallen. Wenn er zu süß ist, lass ihn durchfallen. Wenn die Glasur blau ist, lass ihn durchfallen.“ Sie müssten jede mögliche Vermutung über Fehler, die ein Schüler machen könnte, anstellen und eine Regel dafür schreiben. Wenn Sie nur einen einzigen Fehler übersehen, könnte der Roboter einen schlechten Kuchen durchgehen lassen oder schlimmer noch, einen perfekten Kuchen ablehnen, weil Sie vergessen haben, ihm zu sagen, dass blaue Glasur für einen „Blaubeer“-Kuchen tatsächlich okay ist. Dieser Prozess des Schreibens von Regeln ist langsam, langweilig und führt oft zu einem Roboter, der nicht besonders intelligent ist.
In dieser Arbeit geht es um einen neuen Weg, diesen Roboter-Koch zu bauen. Anstatt eine lange Liste von Regeln zu schreiben, zeigt der Lehrer dem Roboter einfach den perfekten Kuchen, den er selbst gebacken hat. Der Roboter nutzt diesen perfekten Kuchen dann, um selbst herauszufinden, was ein „guter“ Kuchen ist. Er macht dies, indem er versucht, den Kuchen auf eine Million verschiedene, leicht „falsche“ Arten zu backen, um zu sehen, ob er den Unterschied zwischen einem echten Fehler und einem perfekten Kuchen erkennen kann. Diese Methode wird „lösungsgeneriertes Autograding“ genannt. Sie verwandelt die langweilige Aufgabe des Regel-Schreibens in ein unterhaltsames Spiel des „Unterschiede-Suchens“, was es viel schneller macht, riesige Bibliotheken von Übungsaufgaben für Schüler zu erstellen, die das Programmieren lernen.
Das Problem: Die „Regel-Schreib“-Falle
Wenn Schüler das Programmieren lernen, müssen sie hunderte verschiedene Rätsel lösen. Um dies zu ermöglichen, benötigen Lehrer eine Möglichkeit, den Code der Schüler sofort zu überprüfen. Hier kommen Autograder ins Spiel. Traditionell ist das Erstellen eines Autograders wie der Bau eines Sicherheitswächters, der nur weiß, wie man bestimmte Eindringlinge aufspürt. Der Lehrer muss manuell eine Liste von Testfällen schreiben: „Wenn der Code 5 ausgibt, wenn die Eingabe 2 ist, ist das gut. Wenn er 6 ausgibt, ist das schlecht.“
Dieser Ansatz hat drei große Probleme. Erstens ist es unglaublich mühsam. Man muss erraten, auf welche Weise ein Schüler Fehler machen könnte, was so ist, als würde man versuchen, jede mögliche Art aufzulisten, wie jemand in einem Flur stolpern könnte. Zweitens ist es schwer zu wissen, ob die eigene Liste gut genug ist. Hat man einen kniffligen Fehler übersehen? Wenn man es nicht weiß, könnte der Autograder ungenau sein, indem er schlechten Code durchgehen lässt oder guten Code ablehnt. Drittens sind diese Testlisten oft verwirrend für die Schüler. Wenn ein Test fehlschlägt, weiß der Schüler vielleicht nicht, ob sein eigener Code falsch ist oder ob die Testliste des Lehrers einfach nur schlecht geschrieben war.
Die Lösung: Die „Perfekter-Kuchen“-Strategie
Die Autoren, Geoffrey Challen und Ben Nordick, schlagen eine clevere Wendung vor. Anstatt eine Liste von Regeln zu schreiben, stellt der Lehrer einfach die Lösung bereit – den perfekten Code, der das Problem löst. Sie nennen ihr Werkzeug Questioner.
So funktioniert Questioner, unter Verwendung einer spielerischen Analogie: Stellen Sie sich vor, der Lehrer reicht dem Roboter einen perfekten, goldbraunen Kuchen (die Referenzlösung). Der Roboter betrachtet ihn nicht nur; er beginnt, ihn zu „zerstören“. Er verwendet ein spezielles „Mutations“-Werkzeug, um winzige, alberne Fehler in den perfekten Kuchen einzubauen. Vielleicht tauscht er Zucker gegen Salz aus, oder ändert die Ofentemperatur um einen Grad, oder vergisst, die Eier unterzumischen. Dies sind die „Mutanten“.
Der Roboter fragt sich dann: „Kann ich den Unterschied zwischen meinem kaputten Kuchen und dem perfekten einen erkennen?“ Er generiert tausende zufällige Zutaten (Inputs), um die Kuchen zu testen. Wenn der Roboter den Unterschied zwischen dem perfekten Kuchen und dem kaputten Kuchen mithilfe dieser zufälligen Zutaten erkennen kann, weiß er, dass er einen guten Test hat. Wenn er den Unterschied nicht erkennen kann, generiert er weiter zufällige Zutaten, bis er es kann.
Das ist die Magie: Der Roboter nutzt die perfekte Lösung, um sich selbst beizubringen, was er nicht akzeptieren darf. Er muss nicht, dass der Lehrer eine Liste von „Nicht-Tun“ schreibt. Er findet die Grenzen der Korrektheit heraus, indem er versucht, die perfekte Lösung zu manipulieren und zu sehen, was passiert.
Was sie herausgefunden haben
Das Team hat Questioner für Java und Kotlin gebaut und es vier Jahre lang in einem massiven Einführungskurs für Informatik an der University of Illinois eingesetzt. Sie erstellten fast 800 Programmierfragen, die von Tausenden von Schülern zur Bewertung von Millionen von Abgaben verwendet wurden.
Hier sind die wichtigsten Erkenntnisse aus ihrer Erfahrung:
- Geschwindigkeit und Spaß: Das Schreiben von Fragen mit Questioner war viel schneller und angenehmer als das Schreiben traditioneller Test-Suites. Ein Dozent konnte etwa eine neue Frage pro Arbeitstag über drei Jahre hinweg schreiben und so einen Bank von 771 Fragen aufbauen.
- Genauigkeit: Da der Roboter gegen die tatsächliche perfekte Lösung testet, ist er sehr gut darin, zwischen Richtig und Falsch zu unterscheiden. In ihren Quizfragen mussten sie nie eine Frage deshalb streichen, weil der Autograder ungenau war.
- Reichhaltiges Feedback: Das System sagt nicht nur „Richtig“ oder „Falsch“. Es kann auch die Code-Qualität prüfen. Zum Beispiel kann es feststellen, ob der Code eines Schülers viel zu kompliziert ist (zu viele Schritte verwendet) im Vergleich zur einfachen, eleganten Lösung. Es kann sogar prüfen, ob ein Schüler eine bestimmte Technik verwendet hat, wie zum Beispiel Rekursion, falls dies das Ziel der Lektion war.
- Umgang mit den schwierigen Dingen: Manchmal reichen zufällige Zutaten nicht aus. Wenn zum Beispiel ein Problem erfordert, dass eine spezifische Zahl wie „88“ funktioniert, könnte der Roboter diese durch Zufall niemals erraten. In diesen Fällen kann der Lehrer dem Roboter eine kleine Liste von „speziellen Zutaten“ geben, die er ausprobieren soll. Aber selbst dann nutzt der Roboter immer noch die perfekte Lösung, um die Bewertung vorzunehmen, sodass der Lehrer keine vollständige Test-Suite schreiben muss.
Warum es wichtig ist
Diese Arbeit legt nahe, dass wir keine „Testfall-Aufzähler“ sein müssen, um gute Autograder zu bauen. Indem wir die Lösung selbst die Tests generieren lassen, können wir viel schneller große Bestände an Übungsmaterialien aufbauen. Das bedeutet, dass mehr Schüler sofortiges, genaues Feedback zu ihrem Code erhalten können, was ihnen hilft zu lernen, ohne an verwirrenden Fehlern hängenzubleiben.
Die Autoren merken auch an, dass dies nicht nur für Java gilt; sie arbeiten bereits an einer Version für Python namens Snapact und untersuchen sogar, wie sie KI nutzen können, um die anfänglichen perfekten Lösungen zu schreiben. Während sie zugeben, dass kein System perfekt ist (ein Schüler könnte immer noch versuchen, das System durch einen „Brute-Force“-Hack zu umgehen), macht ihre Methode es viel schwieriger, das System zu umgehen, und viel einfacher für Lehrer, hochwertige Lernmaterialien zu erstellen.
Kurz gesagt: Anstatt eine Million Regeln zu schreiben, um jeden Fehler abzufangen, zeigt der Lehrer dem Roboter einfach die richtige Antwort, und lässt den Roboter den Rest erledigen. Es ist ein schnellerer, intelligenterer und weniger frustrierender Weg, die nächste Generation von Programmierern zu unterrichten.
Ertrinken Sie in Arbeiten in Ihrem Fachgebiet?
Erhalten Sie tägliche Digests der neuesten Arbeiten passend zu Ihren Forschungsbegriffen — mit technischen Zusammenfassungen, in Ihrer Sprache.