Kap 5.5
Testning, dokumentation och reflektion
Kontrollera kvaliteten och visa hur projektet fungerar.
Mål
Efter lektionen ska du kunna...
- testa ett program systematiskt
- jämföra faktiskt och förväntat resultat
- skriva kommentarer som förklarar varför
- skapa en användbar README
- skriva en konkret reflektion
Tre delar
Ett projekt är mer än fungerande kod
Testning
Visar om programmet fungerar i olika situationer.
Dokumentation
Gör programmet begripligt och möjligt att använda.
Reflektion
Visar vad du har lärt dig och hur du löste problem.
Testning
Det lyckade fallet räcker inte
Ett test med korrekt indata visar bara att programmet fungerar i bästa fall.
Testa också när:
- användaren skriver fel
- data saknas
- värden ligger på en gräns
- samma funktion körs flera gånger
Testfall
En bestämd situation att kontrollera
Ett testfall beskriver minst:
- vad som testas
- vilken indata som används
- vilket resultat som förväntas
- vilket resultat testet faktiskt gav
Fyra typer
Blanda olika testfall
- Normalt: förväntad och giltig indata.
- Feltest: text där programmet kräver ett tal.
- Gränsfall: exempelvis
0eller tom text. - Upprepat: samma funktion körs flera gånger.
Testprotokoll
Skriv vad du förväntar dig
Test: Lägg till post
Indata: "Testnamn"
Förväntat: Posten sparas
Faktiskt: Posten sparades
Godkänt: Ja
Förväntat resultat skrivs före testet.
Faktiskt resultat fylls i efter testet.
Databasprojekt
Testa både giltig och tom indata
Funktion: Lägg till
Indata: namn="Pasta", info="Tomatsås"
Förväntat: Raden sparas och visas.
Funktion: Lägg till
Indata: namn="", info="Saknar namn"
Förväntat: Felmeddelande visas.
Raden sparas inte.
Ett feltest ska även kontrollera att felaktig data inte sparas.
Tänk som en testare
Vad kan gå fel?
- tomma fält
- fel datatyp
- specialtecken
- extremt långa värden
- avbrott eller trasig anslutning
- data som redan finns
Dokumentation
Kommentarer ska tillföra information
# Mindre bra: upprepar koden
antal = antal + 1 # ökar antal med 1
# Bättre: förklarar varför
antal = antal + 1 # räknar poster som sparades
Kodens namn bör förklara vad. Kommentaren förklarar vid behov varför.
Kommentar
Förklara logik som inte är självklar
def add_recipe():
# Läser formuläret och sparar receptet
# först efter att fälten har validerats.
...
Kommentarer är särskilt användbara vid:
- felhantering
- databasanslutningar
- API-anrop
- ovanliga tekniska beslut
README
Projektets startpunkt
En README ska hjälpa någon annan att komma igång utan att först läsa all kod.
- Vad gör programmet?
- Vilka funktioner finns?
- Hur startas programmet?
- Vilka paket eller tekniker används?
- Vilka begränsningar finns?
README-exempel
En tydlig grundstruktur
# Receptregister
Programmet sparar och söker efter recept.
## Funktioner
- Lägg till recept
- Visa recept
- Sök efter recept
## Så kör du programmet
1. Öppna projektmappen.
2. Kör main.py.
## Kända begränsningar
- Recept kan ännu inte redigeras.
README-kontroll
Kan en ny användare starta programmet?
- Är syftet tydligt beskrivet?
- Står det vilken fil som ska köras?
- Står det om projektet använder
sqlite3,requestsellertkinter? - Finns ett konkret användningsexempel?
- Finns kända begränsningar?
Reflektion
Beskriv vad du faktiskt gjorde
Otydligt: ”Det gick bra, men databasen var svår.”
Tydligare: ”Min tomma sökning visade alla poster. Jag löste det genom att kontrollera sökordet före SQL-frågan.”
En konkret reflektion visar problem, orsak, lösning och lärdom.
Reflektionsmall
Frågor att besvara
- Planering: Vad hjälpte och vad saknades?
- Implementation: Vad byggde du först och varför?
- Problem: Vilka fel eller svårigheter uppstod?
- Lösning: Hur hittade och åtgärdade du orsaken?
- Testning: Vilka testfall gav viktig information?
- Vidare: Vad skulle du förbättra?
Före inlämning
Arbetsgång
- Starta programmet från början.
- Testa normala fall, feltest och gränsfall.
- Dokumentera testresultaten.
- Lägg till kommentarer där de hjälper.
- Uppdatera README-filen.
- Skriv en konkret reflektion.
Kontrollfråga
Vilket test saknas?
Programmet kräver en ålder mellan 0 och 120.
Test 1: 25
Test 2: "hej"
Exempel på gränsfall: 0, 120, -1 och 121.
Testa både precis innanför och precis utanför gränsen.
Sammanfattning
Kom ihåg
- Testfall innehåller indata och förväntat resultat.
- Blanda normala test, feltest, gränsfall och upprepade test.
- Kommentarer ska förklara sådant som inte redan är tydligt.
- README visar hur projektet används.
- Reflektionen beskriver problem, lösningar och lärdomar.