Bogmærke

Test elevernes kodeforståelse med AI

Fag/retning: Informatik

Udfordringen
Eleverne havde gennemført et programmeringsforløb, hvor de via videoer havde fået kode forklaret, skrevet den ind og fået den til at fungere.

Næste skridt var at skabe en dybere forståelse af den kode, de netop selv havde arbejdet med – ikke kun om den virkede, men hvad de enkelte dele faktisk gjorde. Eleverne var endnu ikke klar til at svare på åbne spørgsmål om koden og havde derfor brug for svarmuligheder som stillads. Multiple choice var oplagt, men det er tidskrævende for underviseren at udvikle gode spørgsmål og plausible forkerte svarmuligheder med udgangspunkt i den konkrete kode.

Løsningen
Underviseren brugte ChatGPT til at generere en multiple choice-test direkte ud fra den JavaScript-kode, eleverne netop havde arbejdet med. Eleverne skulle fx tage stilling til, hvordan en for-løkke fungerer, hvad bestemte variabler betyder, og hvad forskellige dele af deres kode gør.

Fordelen ved AI er, at underviseren hurtigt kan lave nye tests, der er direkte koblet til den kode, eleverne arbejder med – uden selv at skulle bruge lang tid på at formulere spørgsmål og realistiske forkerte svarmuligheder.

Sådan gik det
Tilgangen gav mulighed for hurtigt at undersøge, hvad eleverne havde forstået, og hvor der stadig var huller i deres forståelse. Underviseren vil fremover bruge metoden både til repetition af tidligere undervisning og til test af elevernes læring.

Sådan gør du
Kopiér den kode, eleverne netop har arbejdet med, ind i en chatbot, og bed den lave en multiple choice-test med korrekte og plausible forkerte svar. Tilpas spørgsmålene til elevernes niveau og de dele af koden, du ønsker at teste deres forståelse af. Den anvendte prompt og et eksempel på testen findes i bilaget.

Bilag: Prompt til AI

Prompt til ChatGPT med egen kilde-kode: 

Ud fra denne JavaScript-kode far Code.orgs Applab skal du lave en multiple choise-test, hvor du angiver, det korrekte svar. Spørgsmålene skal passe til et gymnasie-niveau. Du skal lave 11 spørgsmål. Det skal omhandle f.eks. Hvordan virker en For-løkke?, Hvad returnerer records.length, hvis der er indtastet to menuer i databasen? Hvad gør den lokale variabel i inden i for-løkken? Hvilke numre har de forskellige pladser i en liste/array, når der er indsat 3 elementer i den, f.eks. i listen menuNavne? Hvad gør appendItem-funktionen?, Bliver der indsat ordet “Samlet pris” i teksten på kurv-siden, hvis der ingenting er indsat i kurven? Hvad den globale variabel aktuelMenu betyder i koden? osv.   

Javascript koden kopierer jeg ind til dig her.
//Globale variable var aktuelMenu = 0; //Globale lister/arrays var menuNavne = []; var menuBeskrivelse = []; var menuPris = []; var kurv = []; //Navigation onEvent(“button_gåTilMenuFraForside”, “click”, function( ) { setScreen(“screen_menu”); //få vist menu visMenu(); }); onEvent(“button_tilForsideFraMenu”, “click”, function( ) { setScreen(“screen_forside”); }); onEvent(“button_seKurv”, “click”, function( ) { setScreen(“screen_kurv”); //få vist kurv visKurv(); }); onEvent(“button_tilMenuFraKurv”, “click”, function( ) { setScreen(“screen_menu”); }); onEvent(“button_betal”, “click”, function( ) { setScreen(“screen_betaling”); }); onEvent(“button_gåTilKurvFraBetaling”, “click”, function( ) { setScreen(“screen_kurv”); }); //Hente data fra databasen readRecords(“Menu”, {}, function(records) { for (var i =0; i < records.length; i++) { appendItem(menuNavne, (records[i]).MenuNavn); appendItem(menuBeskrivelse, (records[i]).MenuBeskrivelse); appendItem(menuPris, (records[i]).MenuPris); } }); //Vist aktuel menu på menu-skærm function visMenu() { setText(“label_menuNavn”, menuNavne[aktuelMenu]); setText(“label_menuBeskrivelse”, menuBeskrivelse[aktuelMenu]); setNumber(“label_menuPris”, menuPris[aktuelMenu]); } onEvent(“button_tilVenstre”, “click”, function( ) { aktuelMenu = aktuelMenu – 1; if (aktuelMenu < 0) { aktuelMenu = menuNavne.length – 1; } visMenu(); }); onEvent(“button_tilHøjre”, “click”, function( ) { aktuelMenu = aktuelMenu + 1; if (aktuelMenu > menuNavne.length – 1) { aktuelMenu = 0; } visMenu(); }); //bestiller aktuel menu onEvent(“button_bestilMenu”, “click”, function( ) { appendItem(kurv, aktuelMenu); }); function visKurv() { var samletKurv = “Du har bestilt: “; var samletPris = 0; for (var i = 0; i < kurv.length; i++) { samletKurv = samletKurv + menuNavne[kurv[i]]; samletKurv = samletKurv + ” ” + menuPris[kurv[i]]; samletKurv = samletKurv + “\n”; samletPris = samletPris + menuPris[kurv[i]]; } if (samletPris != 0) { samletKurv = samletKurv + “\n” + “Samlet pris: ” + samletPris; } setText(“label_kurv”, samletKurv); } //Tømmer kurven onEvent(“button_tømKurv”, “click”, function( ) { kurv = []; visKurv(); }); 

 

Resultatet blev således:  

Spørgsmål 1 

Hvordan fungerer en for-løkke? 

  • A. Den gentager en blok kode, indtil en given betingelse bliver falsk. 
  • B. Den kører kun én gang og stopper derefter. 
  • C. Den kan kun bruges til at gennemgå arrays. 
  • D. Den kører en blok kode et uendeligt antal gange. 

Korrekt svar: A 

 

Spørgsmål 2 

Hvis der er indtastet to menuer i databasen, hvad returnerer records.length? 

  • A. 0 
  • B. 1 
  • C. 2 
  • D. records.length giver ikke en værdi. 

Korrekt svar: C 

 

Spørgsmål 3 

Hvad gør appendItem-funktionen? 

  • A. Tilføjer et element til starten af en liste. 
  • B. Erstatten alle elementer i en liste med et nyt element. 
  • C. Tilføjer et element til slutningen af en liste. 
  • D. Sorterer elementerne i en liste. 

Korrekt svar: C 

 

Spørgsmål 4 

Hvad gør den lokale variabel i inde i for-løkken, når vi læser data fra databasen? 

  • A. Den repræsenterer antallet af databaser. 
  • B. Den bruges til at holde styr på hvilket element, der aktuelt tilføjes til listen. 
  • C. Den er et tilfældigt nummer valgt af computeren. 
  • D. Den bruges til at nulstille listen. 

Korrekt svar: B 

 

Spørgsmål 5 

Hvis der er tre elementer i listen menuNavne, hvilke pladser har disse elementer? 

  • A. 0, 1, 2 
  • B. 1, 2, 3 
  • C. 0, 1, 3 
  • D. 1, 2, 4 

Korrekt svar: A 

 

Spørgsmål 6 

Bliver der indsat ordet “Samlet pris” i teksten på kurv-siden, hvis der ingenting er i kurven? 

  • A. Ja, altid. 
  • B. Nej, kun hvis samletPris er forskellig fra 0. 
  • C. Ja, men kun hvis brugeren klikker på “button_bestilMenu”. 
  • D. Nej, da “Samlet pris” ikke vises nogen steder i koden. 

Korrekt svar: B 

 

Spørgsmål 7 

Hvilken funktionalitet tilføjer koden, når brugeren klikker på knappen button_bestilMenu? 

  • A. Den fjerner aktuelMenu fra kurv-listen. 
  • B. Den nulstiller aktuelMenu. 
  • C. Den tilføjer aktuelMenu til kurv-listen. 
  • D. Den viser en ny skærm. 

Korrekt svar: C 

 

Spørgsmål 8 

Hvad sker der, når brugeren klikker på knappen button_tilHøjre, og aktuelMenu er lig med menuNavne.length – 1? 

  • A. aktuelMenu sættes til 0. 
  • B. aktuelMenu reduceres med 1. 
  • C. aktuelMenu sættes til menuNavne.length. 
  • D. aktuelMenu forbliver den samme. 

Korrekt svar: A 

 

Spørgsmål 9 

Hvad vil der ske, når kurv er tom og funktionen visKurv() kaldes? 

  • A. Teksten “Du har bestilt:” bliver vist uden nogen priser. 
  • B. En fejl vises på grund af en tom liste. 
  • C. Teksten “Samlet pris:” bliver vist. 
  • D. Hele kurven bliver slettet. 

Korrekt svar: A 

 

Spørgsmål 10 

Hvad er formålet med readRecords-funktionen i denne kode? 

  • A. At læse indholdet af en database og tilføje det til de globale arrays. 
  • B. At oprette en ny database. 
  • C. At slette eksisterende data i databasen. 
  • D. At redigere eksisterende data i databasen. 

Korrekt svar: A 

 

Spørgsmål 11 

Hvad betyder den globale variabel aktuelMenu i koden? 

  • A. Den holder styr på det samlede antal menuer i databasen. 
  • B. Den indeholder den aktuelle skærm, som brugeren ser. 
  • C. Den repræsenterer indekset for den menu, der aktuelt vises for brugeren. 
  • D. Den tæller antallet af elementer, der er tilføjet til kurven. 

Korrekt svar: C

Udviklet af: hso@eucnordvest.dk (skrevet i september 2026).
Del af projektet: AI på ungdomsuddannelserne. Find flere AI-idéer her.

Logo reion nordjylland