Testplan for karakterprogram med poengsum
Lov på eksamen
- Datamaskin med programmeringsverktøy
- Lærebok, dokumentasjon og egne notater og programmer
Ikke åpent internett (bare noen utvalgte nettressurser), kommunikasjon med andre eller kunstig intelligens.
Kan den løses uten PC?
1 av 3 deloppgaver kan løses uten PC.
Fra 2027 er det bare kalkulator og skriftlige hjelpemidler på del 2. Vurderingen er gjort med KI og kan inneholde feil.
Vi ønsker å lage et program der brukeren skal skrive inn en poengsum fra og med 0 til og med 100, og programmet skal bestemme og skrive ut tilsvarende karakter etter følgende regler:
- Enhver poengsum under 50 får karakteren «Ikke bestått».
- Enhver poengsum fra og med 50 til og med 69 får karakteren «Bestått».
- Enhver poengsum fra og med 70 til og med 89 får karakteren «Godt bestått».
- Enhver poengsum på 90 eller høyere får karakteren «Meget godt bestått».
- Enhver poengsum som er mindre enn 0 eller større enn 100, får karakteren «Ikke gyldig poengsum!».
Pseudokoden nedenfor beskriver logikken og programflyten i et forslag til dette programmet:
PRINT "Skriv inn poengsummen din:"
READ poengsum
IF poengsum LESSER THAN 50
PRINT "Ikke bestått"
ELSE IF poengsum GREATER THAN 50 AND poengsum LESSER THAN 69
PRINT "Bestått"
ELSE IF poengsum GREATER THAN 70 AND poengsum LESSER THAN 89
PRINT "Godt bestått"
ELSE IF poengsum GREATER THAN 90 AND poengsum LESSER THAN 100
PRINT "Meget godt bestått"
ELSE
PRINT "Ikke gyldig poengsum!"
ENDIF
Implementer den foreslåtte pseudokoden i det programmeringsspråket du foretrekker, gjennomfør testene som er beskrevet i testplanen nedenfor, og fyll inn de faktiske resultatene du får.
| Test nr. | Input-verdier | Forventet resultat | Faktisk resultat |
|---|---|---|---|
| 1 | Poengsum: 30 | Ikke bestått | |
| 2 | Poengsum: 65 | Bestått | |
| 3 | Poengsum: 82 | Godt bestått | |
| 4 | Poengsum: 97 | Meget godt bestått | |
| 5 | Poengsum: 102 | Ikke gyldig poengsum! | |
| 6 | Poengsum: 0 | Ikke bestått | |
| 7 | Poengsum: 50 | Bestått | |
| 8 | Poengsum: 69 | Bestått | |
| 9 | Poengsum: 70 | Godt bestått | |
| 10 | Poengsum: 89 | Godt bestått | |
| 11 | Poengsum: 90 | Meget godt bestått | |
| 12 | Poengsum: 100 | Meget godt bestått | |
| 13 | Poengsum: −1 | Ikke gyldig poengsum! |
Er de forventede resultatene like de faktiske resultatene? Hvis ikke: Finn de logiske feilene i pseudokoden som forårsaker det. Skriv inn og forklar svaret ditt.
Rett opp programmet fra punkt a slik at du får det forventede resultatet.
Fasit
Test 1–6 gir forventet resultat. Test 7–12 (50, 69, 70, 89, 90 og 100) gir «Ikke gyldig poengsum!», og test 13 () gir «Ikke bestått».
Nei. Betingelsene bruker GREATER THAN og LESSER THAN der det skulle vært «større enn eller lik» og «mindre enn eller lik», så grenseverdiene 50, 69, 70, 89, 90 og 100 havner i ELSE. I tillegg sjekkes det ikke om poengsummen er under 0, så gir «Ikke bestått».
LøsningsforslagKI-generert
Vi finner de faktiske resultatene ved å gå gjennom betingelsene i pseudokoden ovenfra og ned for hver poengsum. Den første betingelsen som er sann, bestemmer utskriften.
| Test nr. | Poengsum | Første sanne betingelse | Faktisk resultat | Som forventet? |
|---|---|---|---|---|
| 1 | 30 | poengsum LESSER THAN 50 | Ikke bestått | ja |
| 2 | 65 | GREATER THAN 50 AND LESSER THAN 69 | Bestått | ja |
| 3 | 82 | GREATER THAN 70 AND LESSER THAN 89 | Godt bestått | ja |
| 4 | 97 | GREATER THAN 90 AND LESSER THAN 100 | Meget godt bestått | ja |
| 5 | 102 | ingen, går til ELSE | Ikke gyldig poengsum! | ja |
| 6 | 0 | poengsum LESSER THAN 50 | Ikke bestått | ja |
| 7 | 50 | ingen, går til ELSE | Ikke gyldig poengsum! | nei |
| 8 | 69 | ingen, går til ELSE | Ikke gyldig poengsum! | nei |
| 9 | 70 | ingen, går til ELSE | Ikke gyldig poengsum! | nei |
| 10 | 89 | ingen, går til ELSE | Ikke gyldig poengsum! | nei |
| 11 | 90 | ingen, går til ELSE | Ikke gyldig poengsum! | nei |
| 12 | 100 | ingen, går til ELSE | Ikke gyldig poengsum! | nei |
| 13 | poengsum LESSER THAN 50 | Ikke bestått | nei |
Nei. Sju av de tretten testene gir et annet resultat enn forventet. Det skyldes to logiske feil.
Feil 1: Grenseverdiene er utelatt. GREATER THAN betyr «større enn» og LESSER THAN betyr «mindre enn». Selve grenseverdien er derfor ikke med i intervallet. Betingelsen
ELSE IF poengsum GREATER THAN 50 AND poengsum LESSER THAN 69
gjelder bare for 51–68, men reglene sier fra og med 50 til og med 69. Det samme skjer i de to neste betingelsene: «Godt bestått» gjelder bare for 71–88 og «Meget godt bestått» for 91–99. Poengsummene 50, 69, 70, 89, 90 og 100 oppfyller derfor ingen av betingelsene og havner i ELSE, som skriver «Ikke gyldig poengsum!». Test 7–12 feiler av denne grunnen.
Betingelsene burde brukt GREATER THAN OR EQUAL TO og LESSER THAN OR EQUAL TO, for eksempel poengsum GREATER THAN OR EQUAL TO 50 AND poengsum LESSER THAN OR EQUAL TO 69.
Feil 2: Den nedre grensen 0 sjekkes ikke. Den første betingelsen, poengsum LESSER THAN 50, er sann for alle tall under 50, også negative tall. Derfor gir «Ikke bestått» i stedet for «Ikke gyldig poengsum!» (test 13). Programmet må enten sjekke at poengsummen er ugyldig før de andre betingelsene, eller kreve poengsum GREATER THAN OR EQUAL TO 0 i den første betingelsen.
Testene viser hvorfor en testplan bør ha med grenseverdiene. Test 1–6 bruker verdier midt i intervallene (og 0), og de gir riktig resultat selv om programmet har feil. Først testene med 50, 69, 70, 89, 90, 100 og avslører feilene.