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».
  • Systematisk liste over testtilfeller. 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»).

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?

Løsning:
  1. Vi sporer algoritmen: sammenlign 5 og 5
  2. like, behold én av dem (5)
  3. sammenlign 5 og 3
  4. 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.
Spore algoritmen på (5, 5, 3)
StegSammenligningBehold
15 vs 55
25 vs 35

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
  1. Begge tallene er 7
  2. det største av to like tall er tallet selv
  3. 7
TestResultat
Begge tall7
Konklusjon7

L-12Test algoritmen «finn gjennomsnittet av en liste» på listen [10]. Hva bør svaret bli?

Vis fasit
  1. Listen har kun tallet 10
  2. gjennomsnittet av én verdi er verdien selv
  3. 10
TestResultat
Sum10
Antall1
Gjennomsnitt10

L-13Test algoritmen «finn det minste tallet» på (4, 4, 4). Hva bør svaret bli?

Vis fasit

Alle tallene er like, så det minste er også 4

TestResultat
Alle tall4, 4, 4
Minste4
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

sum: 6+6+6+6=24, antall: 4, gjennomsnitt: 24 : 4 = 6

TestResultat
Sum24
Antall4
24 : 46

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

Av -3, -8, -1 er -1 størst (nærmest null oppover)

TestResultat
Tallene-3, -8, -1
Størst-1

M-13En algoritme skal telle partall i en liste. Test den på [2, 4, 6, 8]. Hva bør svaret bli?

Vis fasit
  1. 2, 4, 6 og 8 er alle partall
  2. 4
TestResultat
Partall funnet2, 4, 6, 8
Teller4
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
  1. Uten tall å sammenligne kan ikke algoritmen finne et «størst» tall – tomme lister er et klassisk randtilfelle som ofte glemmes
  2. bør håndteres som en feil, ikke krasje eller gi feil svar
TestResultat
Tall å sammenligne0
Konklusjonbør gi feilmelding, ikke krasje

V-12En algoritme skal telle partall i listen [-4, 3, -2, 7]. Hva bør svaret bli (husk: negative partall telles også)?

Vis fasit
  1. -4 og -2 er partall (selv om de er negative), 3 og 7 er oddetall
  2. 2 partall
TestResultat
Partall funnet-4, -2
Teller2

V-13En elev tester bare algoritmen sin med (3, 5, 7) og konkluderer at den fungerer perfekt. Hva mangler i testingen?

Vis fasit
  1. 3, 5 og 7 er tre «vanlige» oddetall uten spesielle egenskaper
  2. et slikt testtilfelle avdekker ikke feil som bare oppstår ved spesielle innganger
  3. mangler testing av randtilfeller
TestResultat
Testetvanlige oddetall (3,5,7)
Manglerrandtilfeller (like/negative tall)