Accelerating Accurate Assignment Authoring Using Solution-Generated Autograders
Dit artikel introduceert "solution-generated autograding", een methode die gebruikmaakt van verstrekte oplossingen om automatisch nauwkeurige en schaalbare autograders te creëren zonder handmatige enumeratie van testgevallen, gedemonstreerd door het Questioner-systeem dat succesvol een grote CS1-cursus met bijna 800 programmeervragen gedurende vier jaar heeft ondersteund.
Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer
Stel je voor dat je een leraar bent die een klas van duizenden studenten probeert te leren hoe je de perfecte chocoladetaart bakt. In de oude dagen, om elke taart van elke individuele student te beoordelen, zou je elke taart zelf moeten proeven. Maar met duizenden studenten is dat onmogelijk. Dus bouw je een robotkok om de taarten voor jou te proeven. Deze robot is een "autograder". Normaal gesproken, om deze robot te leren hoe een "goede" taart eruitziet, moet je een enorme, tijdrovende lijst met regels schrijven: "Als de taart te droog is, falen ze. Als de taart te zoet is, falen ze. Als de frosting blauw is, falen ze." Je moet raden welke fouten een student ook zou kunnen maken en er een regel voor schrijven. Als je slechts één fout mist, kan de robot een slechte taart doorlaten, of erger nog, een perfecte taart afwijzen omdat je vergeten bent te vertellen dat blauwe frosting eigenlijk oké is voor een "blauwe bessen" taart. Dit proces van het schrijven van de regels is traag, saai en leidt vaak tot een robot die niet erg slim is.
Dit artikel gaat over een nieuwe manier om die robotkok te bouwen. In plaats van een lange lijst met regels te schrijven, laat de leraar de robot simpelweg de perfecte taart zien die hij zelf heeft gebakken. De robot gebruikt die perfecte taart vervolgens om zelf uit te zoeken hoe een "goede" taart eruitziet. Dit doet hij door te proberen de taart op een miljoen verschillende, lichtelijk "foute" manieren te bakken om te zien of hij het verschil kan zien tussen een echte fout en een perfecte taart. Deze methode wordt "solution-generated autograding" genoemd. Het verandert het saaie werk van het schrijven van regels in een leuk spel van "het verschil zoeken", wat het veel sneller maakt om enorme bibliotheken met oefenopdrachten te maken voor studenten die leren programmeren.
Het Probleem: De "Regel-Schrijvers" Valstrik
Wanneer studenten leren programmeren, moeten ze honderden verschillende puzzels oplossen om te oefenen. Om dit werkend te krijgen, hebben docenten een manier nodig om de code van de studenten direct te controleren. Dit is waar autograders in beeld komen. Traditioneel is het maken van een autograder als het bouwen van een beveiligingsbeambte die alleen specifieke indringers herkent. De docent moet handmatig een lijst met testgevallen schrijven: "Als de code 5 geeft wanneer de input 2 is, is dat goed. Als het 6 geeft, is dat slecht."
Deze aanpak heeft drie grote problemen. Ten eerste is het ontzettend tijdrovend. Je moet raden op elke mogelijke manier waarop iemand een fout zou kunnen maken, wat is alsof je probeert elke mogelijke manier op te sommen waarop iemand in een gang zou kunnen struikelen. Ten tweede is het moeilijk om te weten of je lijst wel goed genoeg is. Heb je een lastige fout gemist? Als je dat niet weet, kan je autograder onnauwkeurig zijn, waardoor slechte code wordt doorgelaten of goede code wordt afgewezen. Ten derde zijn deze testlijsten vaak verwarrend voor studenten. Als een test faalt, weet de student misschien niet of hun code fout is of dat de testlijst van de docent gewoon slecht geschreven was.
De Oplossing: De "Perfecte Taart" Strategie
De auteurs, Geoffrey Challen en Ben Nordick, stellen een slimme draai voor. In plaats van een lijst met regels te schrijven, levert de docent simpelweg de oplossing — de perfecte code die het probleem oplost. Ze noemen hun tool Questioner.
Zo werkt Questioner, met behulp van een speelse analogie: Stel je voor dat de docent de robot een perfecte, goudbruine taart overhandigt (de referentie-oplossing). De robot kijkt er niet alleen naar; de robot begint de taart te proberen te breken. De robot gebruikt een speciale "mutatie"-tool om kleine, stomme fouten aan de perfecte taart te maken. Misschien wordt suiker voor zout geruild, of wordt de oventemperatuur met één graad veranderd, of wordt het mengen van de eieren vergeten. Dit zijn de "mutanten".
De robot vraagt zichzelf vervolgens af: "Kan ik het verschil zien tussen mijn kapotte taart en de perfecte taart?" De robot genereert duizenden willekeurige ingrediënten (inputs) om de taarten te testen. Als de robot het verschil kan zien tussen de perfecte taart en de kapotte taart met behulp van deze willekeurige ingrediënten, dan weet hij dat hij een goede test heeft. Als hij het verschil niet kan zien, blijft hij meer willekeurige ingrediënten genereren totdat dat wel zo is.
Dit is de magie: de robot gebruikt de perfecte oplossing om zichzelf te leren wat hij niet mag accepteren. Hij heeft geen lijst met "wat niet mag" van de docent nodig. Hij ontdekt de grenzen van juistheid door de perfecte oplossing te proberen te breken en te zien wat er gebeurt.
Wat Ze Hebben Ontdekt
Het team heeft Questioner gebouwd voor Java en Kotlin en heeft het vier jaar lang gebruikt in een enorme introductiecursus informatica aan de University of Illinois. Ze hebben bijna 800 programmeervragen gemaakt die door duizenden studenten werden gebruikt om miljoenen inzendingen te evalueren.
Hier zijn de belangrijkste inzichten uit hun ervaring:
- Snelheid en Plezier: Het schrijven van vragen met Questioner was veel sneller en leuker dan het schrijven van traditionele testsuites. Eén instructeur was in staat om ongeveer één nieuwe vraag per werkdag te schrijven gedurende drie jaar achter elkaar, waarmee een bank van 771 vragen werd opgebouwd.
- Nauwkeurigheid: Omdat de robot test tegen de werkelijke perfecte oplossing, is hij erg goed in het onderscheiden van goed en fout. Tijdens hun toetsen hoefden ze nooit een vraag te verwijderen omdat de autograder onnauwkeurig was.
- Rijke Feedback: Het systeem zegt niet alleen "Goed" of "Fout". Het kan ook de codekwaliteit controleren. Het kan bijvoorbeeld aangeven of de code van een student veel te ingewikkeld is (door te veel stappen te gebruiken) vergeleken met de eenvoudige, elegante oplossing. Het kan zelfs controleren of een student een specifieke techniek heeft gebruikt, zoals recursie, als dat het doel van de les was.
- Omgaan met de Lastige Zaken: Soms zijn willekeurige ingrediënten niet genoeg. Bijvoorbeeld, als een probleem een specifiek getal zoals "88" vereist om te werken, kan de robot dit misschien nooit door toeval te raden. In die gevallen kan de docent de robot een kleine lijst met "speciale ingrediënten" geven om te proberen. Maar zelfs dan gebruikt de robot nog steeds de perfecte oplossing om de grading te doen, zodat de docent geen volledige testsuite hoeft te schrijven.
Waarom Het Er Toe Doet
Dit artikel suggereert dat we niet "testgeval-enumeratoren" hoeven te zijn om goede autograders te bouwen. Door de oplossing zelf de tests te laten genereren, kunnen we veel sneller enorme banken met oefenopdrachten opbouwen. Dit betekent dat meer studenten directe, nauwkeurige feedback kunnen krijgen op hun codering, wat hen helpt leren zonder vast te lopen op verwarrende fouten.
De auteurs merken ook op dat dit niet alleen voor Java is; ze zijn al bezig met het bouwen van een versie voor Python genaamd Snapact, en ze onderzoeken zelfs hoe ze AI kunnen gebruiken om te helpen bij het schrijven van de initiële perfecte oplossingen. Hoewel ze toegeven dat geen enkel systeem perfect is (een student zou nog steeds het systeem kunnen omzeilen met een "brute force" hack), maakt hun methode het veel moeilijker om het systeem te omzeilen en veel gemakkelijker voor docenten om hoogwaardig leermateriaal te creëren.
Kortom, in plaats van een miljoen regels te schrijven om elke fout te vangen, laat de docent de robot simpelweg het juiste antwoord zien, en laat de robot de rest uitzoeken. Het is een snellere, slimmere en minder frustrerende manier om de volgende generatie programmeurs te onderwijzen.
Verdrinkt u in papers in uw vakgebied?
Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.