Teste og forbedre en algoritme
Å teste en algoritme betyr å kjøre den med FLERE ulike innganger – spesielt «vanskelige» tilfeller (like tall, negative tall, tomme lister) – for å avdekke feil FØR de dukker opp i en ekte situasjon. Finner du en inngang algoritmen håndterer feil, er det der du må forbedre den.
Tips
- Test alltid MINST tre typer innganger: et vanlig tilfelle, et «randtilfelle» (f.eks. to like store tall), og et uventet tilfelle (f.eks. negative tall) – algoritmer feiler oftest på randtilfellene.
- Skriv opp hva algoritmen SKAL gi før du kjører den, så du har noe konkret å sjekke svaret mot – ikke bare stol på at svaret «ser riktig ut».
Eksempel: Teste en størst-av-tre-algoritme
Algoritmen «sammenlign de tre tallene parvis, behold det største» skal finne det største av tre tall. Test den på (5, 5, 3) – to like store tall. Fungerer den?
| Steg | Sammenligning | Behold |
|---|---|---|
| 1 | 5 vs 5 | 5 |
| 2 | 5 vs 3 | 5 |
- Vi sporer algoritmen: sammenlign 5 og 5
- like, behold én av dem (5)
- sammenlign 5 og 3
- 5 er størst, behold 5. Algoritmen håndterer like tall riktig, siden «behold det største av to like tall» fortsatt gir riktig svar. Svaret er algoritmen fungerer, gir 5.
Alternativ forklaring/metode: Systematisk liste over testtilfeller
Alternativ metode – innenfor pensum, men ikke hovedmetoden her
Lage en test-tabell
I stedet for å teste ett og ett tilfelle tilfeldig, lag en tabell på forhånd med testtilfeller og forventet svar: «vanlig tilfelle → forventet X», «like tall → forventet Y», «negative tall → forventet Z». Kjør algoritmen mot hvert testtilfelle og kryss av – dette er hvordan programmerere faktisk jobber i praksis (kalt «testcases»).
| Testtilfelle | Forventet svar |
|---|---|
| Vanlig tilfelle | forventet X |
| Like tall | forventet Y |
| Negative tall | forventet Z |
Oppgaver
Prøv minst én oppgave på hvert nivå.
Lett(3)
L-11Test algoritmen «finn det største av to tall» på (7, 7). Hva bør svaret bli?
Vis fasit
| Test | Resultat |
|---|---|
| Begge tall | 7 |
| Konklusjon | 7 |
- Begge tallene er 7
- det største av to like tall er tallet selv
- 7
L-12Test algoritmen «finn gjennomsnittet av en liste» på listen [10]. Hva bør svaret bli?
Vis fasit
| Test | Resultat |
|---|---|
| Sum | 10 |
| Antall | 1 |
| Gjennomsnitt | 10 |
- Listen har kun tallet 10
- gjennomsnittet av én verdi er verdien selv
- 10
L-13Test algoritmen «finn det minste tallet» på (4, 4, 4). Hva bør svaret bli?
Vis fasit
| Test | Resultat |
|---|---|
| Alle tall | 4, 4, 4 |
| Minste | 4 |
Alle tallene er like, så det minste er også 4
Middels(3)
M-11En algoritme skal finne gjennomsnittet av en liste. Test den på [6, 6, 6, 6]. Hva bør svaret bli?
Vis fasit
| Test | Resultat |
|---|---|
| Sum | 24 |
| Antall | 4 |
| 24 : 4 | 6 |
sum: 6+6+6+6=24, antall: 4, gjennomsnitt: 24 : 4 = 6
M-12En algoritme «finn største tall» testes på (-3, -8, -1). Hva bør svaret bli (husk: -1 er større enn -8)?
Vis fasit
| Test | Resultat |
|---|---|
| Tallene | -3, -8, -1 |
| Størst | -1 |
Av -3, -8, -1 er -1 størst (nærmest null oppover)
M-13En algoritme skal telle partall i en liste. Test den på [2, 4, 6, 8]. Hva bør svaret bli?
Vis fasit
| Test | Resultat |
|---|---|
| Partall funnet | 2, 4, 6, 8 |
| Teller | 4 |
- 2, 4, 6 og 8 er alle partall
- 4
Vanskelig(3)
V-11En algoritme «finn største tall» testes på en tom liste (ingen tall). Hva bør skje, og hvorfor er dette et viktig testtilfelle?
Vis fasit
| Test | Resultat |
|---|---|
| Tall å sammenligne | 0 |
| Konklusjon | bør gi feilmelding, ikke krasje |
- Uten tall å sammenligne kan ikke algoritmen finne et «størst» tall – tomme lister er et klassisk randtilfelle som ofte glemmes
- bør håndteres som en feil, ikke krasje eller gi feil svar
V-12En algoritme skal telle partall i listen [-4, 3, -2, 7]. Hva bør svaret bli (husk: negative partall telles også)?
Vis fasit
| Test | Resultat |
|---|---|
| Partall funnet | -4, -2 |
| Teller | 2 |
- -4 og -2 er partall (selv om de er negative), 3 og 7 er oddetall
- 2 partall
V-13En elev tester bare algoritmen sin med (3, 5, 7) og konkluderer at den fungerer perfekt. Hva mangler i testingen?
Vis fasit
| Test | Resultat |
|---|---|
| Testet | vanlige oddetall (3,5,7) |
| Mangler | randtilfeller (like/negative tall) |
- 3, 5 og 7 er tre «vanlige» oddetall uten spesielle egenskaper
- et slikt testtilfelle avdekker ikke feil som bare oppstår ved spesielle innganger
- mangler testing av randtilfeller