Centralt innehåll
- Arbetsmetoder för förebyggande av programmeringsfel, testning, felsökning och rättning av kod.
- Strukturerat arbetssätt för problemlösning och programmering.
Fakta
Ordet bugg har delvis mytiskt ursprung, men anses i allmänhet komma från dess engelska betydelse insekt eller kryp.
Enligt en myt härledde man på någon av de tidigare relästyrda datorerna (som BARK) en felaktig funktion i datorn till
en mal som hittades död bland reläerna. Ordet ska emellertid ha använts redan på 1870-talet av
Thomas Edison för att beskriva fel i en apparat.
Den första dokumenterade buggen hittades 9 september 1947 i en Mark II Aiken Relay Calculator av
Grace Hopper.
Felsökning i kod med hjälp av gummianka (en: Rubber duck debugging) är en metod för att felsöka kod. Namnet är en referens till boken The Pragmatic Programmer, där en programmerare ofta bär runt på en gummianka och felsöker sin kod genom att tvinga sig själv att förklara den, rad för rad, för ankan. Många programmerare har upplevt att när de förklarat sin kod för någon annan har de själva upptäckt problemet i koden.
1. Felsökning (debugga)
Det är nästan omöjligt att skriva kod utan att det blir något fel, s.k. buggar. Dessa fel måste hittas och rättas innan programmet kan anses vara klar.
1.1 Olika typer av fel
-
Syntaxfel. Något fel i språkreglerna.
T.ex. stavfel, saknade paranteser eller felaktig indentering.
-
Exekveringsfel. Kallas även programkörningsfel. Det är när programmet kraschar.
T.ex. division med noll.
- Logiska fel. Programmet kan köras, men ger inte det förväntade resultatet. T.ex. om du vill sortera ord i bokstavsordning, men resultatet inte är i bokstavsordning.
Att leta efter buggar (fel) och rätta dem i program brukar kallas att felsöka, avlusa
eller debugga, som kommer från engelskans debug.
1.2 Debugger
Mycket av en programmerares tid går åt till felsökning (debugging) av framförallt logiska fel.
Det finns oftast funktioner i utvecklingsmiljön för att debugga.
En debugger
(avlusare på svenska)
används för att upptäcka fel under körning av program.
Fungerar inte ett program som vi har tänkt oss kan man med hjälp av debuggern "stega"
sig igenom programmet rad för rad samt lägga in stopp i körningen, s.k. brytpunkter i koden och
på så sätt hitta felen i programmet.
1.3 Felutskrifter
Fel som visas i konsolfönstret kan vara svåra att förstå för nybörjare
- Om felmeddelandet säger att något är okänt eller används innan den är definierad: Kontrollera att du stavat namn rätt och var noga med små och stora bokstäver.
- Om man inte hittar felet på raden som anges i felmeddelandet, titta på raden ovanför.
1.4 Tålamod
Vissa buggar kan vara irriterande och svåra att hitta och man känna som mannen i filmen.
Som programmerare kommer man att ägna mycket tid till att leta efter och rätta olika slags buggar.
Det gäller att ha tålamod och en bra strategi:
- Läs eventuellt felmeddelande även om de ibland kan vara lite svåra att tolka.
- Försöka läsa koden och se om du kan upptäcka buggen.
- Om du inte hittar felet på radnumret som angavs i felmeddelandet, titta på raden ovanför.
- Debugga koden i IDE:n.
- Fråga en kompis eller prata med en gummianka (rubberducking).
Begrepp
Bugg: Ett fel i programmet.
Debugga: Felsöka och rätta till fel i koden.
Avlusa: Felsöka och rätta till fel i koden.
Syntax: Språkregler för hur koden ska skrivas i ett programmeringsspråk.
Syntaxfel: Ett fel i en språkregel.
Exekveringsfel: Kallas även programkörningsfel. Är när programmet kraschar när det körs.
Logiskt fel: Programmet går att köra, men man får ett oönskat resultat.
Brytpunkt: En rad i koden där körningen stoppas.
Rubberducking: En metod att hitta fel i koden genom att förklara den för en gummianka.
Länkar
Film
Fördjupning
Övningar
Du kan inte att lära dig att programmera genom att läsa en bok eller titta på videos. Du måste öva på att skriva kod själv och ju mer du övar desto bättre blir du.- Nedan finns 8 rader med kod. Bara en av dem är korrekt skriven, övriga har något syntaxfel.
Kan du se vilken rad som är korrekt och vad som är felet i övriga?
plint('Hej') print('Hej") print('Hej' print('Hej') Print("Hej") print('Hej') print('Hej) print("Hej')
- Ange ett exempel på när det blir syntaxfel?
- Ange ett exempel på när det blir exekveringsfel?
- Ange ett exempel på när det blir ett logiskt fel?
Inlämningsuppgift
Visa läraren när du debuggar. Du ska kunna sätta en brytpunkt, ta bort brytpunkt, stega i koden och kunna se värden för olika variabler.