kompetanseguiden
Hva er feilsøking?
Hva er feilsøking – og hvor kan du lære det? I denne artikkelen får du en rask introduksjon til hva feilsøking går ut på, mens du i verktøyet øverst kan finne ut hvor og hvordan du kan lære det – basert på dine egne kriterier for læringen.
Tilbake til kompetanseguidens hovedside
Feilsøking, eller «debugging», er en viktig del av all utvikling. Det er nærmest uunngåelig at man støter på feil i løpet av utviklingsprosessen, og da er det viktig å kunne finne frem til feilen og rette den så fort som mulig.
Thomas Pettersen er medeier og ansatt i konsulentselskapet Skråstrek, og har blant annet vært med på å utvikle Yr- og Æ-appen. Vi har bedt ham fortelle mer om hva feilsøking innebærer.
Kort oppsummert; Hva er feilsøking?
Feilsøking er som ordet sier: å lete etter feil. I utviklerverden kaller vi det gjerne for debugging. For eksempel når en feil oppstår under utvikling eller når en applikasjon er i drift, vil første steget være å finne ut av feilen for å kunne gjøre riktige tiltak. Da må informasjon undersøkes, teorier om årsaker legges frem og man må gjøre en innsnevring av søkeområdet. Til slutt finner man forhåpentligvis den konkrete årsaken og kan gjøre tiltak.
Feilsøking er et veldig vidt begrep. Det er ikke nødvendigvis bare knyttet til kode og utvikling, men kan også gjelde områder som fysiske produkter, brukeropplevelse og universell utforming.
Hva brukes feilsøking til i 2020? Når er det viktig å kunne dette?
Det er spesielt viktig å kunne noe om feilsøking i 2020, da det har blitt en kraftig økning i Devops. Devops betyr at utviklerne i større grad har autonomi og ansvar for å holde applikasjoner de utvikler kjørende. Skulle en feilsituasjon oppstå, er det utviklerens oppgave å finne ut hva som har skjedd, legge en plan og utføre en feilretting om nødvendig. Feilen kan oppstå i alt fra infrastruktur til kode.
Det bør nevnes at det er et helt fagområde, testing, som omhandler feilsøking før feilen har oppstått — eller i det minste før sluttbruker har funnet den. Det vil si ende-til-ende-tester, verifisering av funksjonalitet, og feilhåndtering gjennom forskjellige former for kvalitetssikring, etc.
Med inntoget av mobilapper, mikrotjenester og til dels maskinlæring, har det blitt en enda mer kompleks jobb å finne feil
Har du noen eksempler på typiske situasjoner eller utfordringer som feilsøking blir brukt til å løse?
Med inntoget av mobilapper, mikrotjenester og til dels maskinlæring, har det blitt en enda mer kompleks jobb å finne feil. Flere bevegelige deler og langt flere teknologier har gjort at man må være i forkant med å lære seg hvordan man skal finne feil for å være klar når situasjoner oppstår.
For mobilapper har man 15.000+ unike mobilenheter å forholde seg til. Store leverandører som Samsung og Huawei gjør gjerne ting litt forskjellig, og plutselig har man en situasjon hvor noe ikke fungerer som tiltenkt.
Da jeg jobbet på Yr-appen (en av verdens mest brukte vær-apper) skjedde dette ganske ofte, til tross for at vi prøvde å utvikle i henhold til etablerte standarder. Under utvikling av appen kjørte alt fint på mine testenheter, men straks noen andre med en litt mer obskur enhet prøvde så kunne det oppstå en feil jeg ikke hadde hos meg. Flest feilrapporter kom derimot fra publikum rundt om i verden. Da er det viktig at man har tilgang på god nok informasjon; når skjedde det, på hvilken enhet, på hvilket OS, hva skjedde, etc.
I andre tilfeller kan det være sviktende kritisk infrastruktur. Vi har sett mange sammenbrudd av banksystemene i Norge, noe som gir store samfunnsøkonomiske konsekvenser. I slike tilfeller er det ekstremt viktig å kunne jobbe målrettet og effektivt mot å snevre inn søkeområdet og finne feilen.
Er det noen vanlige språk, rammeverk eller verktøy som er særlig knyttet til feilsøking?
Det er vanlig at man tar i bruk ulike verktøy for å hjelpe til med feilsøking. De aller fleste har gode loggverktøy med alle hendelser i et system som er søkbare, og er gjerne første stedet man leter etter feilene.
Det er i tillegg til hendelseslogger gjerne egne krasj-rapporter som inneholder langt mer informasjon om en spesifikk feilsituasjon. Det finnes også utviklingsverktøy og frittstående verktøy som lar deg gjøre profilering av kildekode, kjørende applikasjoner, infrastruktur og mer. Dette er viktig input for å bedrive feilsøking.
For hendelseslogger har man ofte ELK-stacken (Elasticsearch, Logstash og Kibana) eller Splunk som verktøy på servere. På mobil for krasjrapportering kjører vi noe som heter Firebase Crashlytics. For å «profile» finner man ofte Yourkit, Newrelic, Appdynamics og Firebug som brukte verktøy. Til slutt har de aller fleste IDE-er (utviklingsverktøy) innebygd profilering og feilsøkingsverktøy.
Hvordan ser du for deg at feilsøking kan videreutvikles?
Jeg antar at det blir bedre verktøy, da gjerne med AI, som vil gjøre det enklere å oppdage feil basert på tilgjengelig informasjon. Da vil i mindre grad kompetansen til personen som utfører feilsøking ha noe å si. Jeg tror også det vil bli bedre rutiner og mer kompetansebygging for hvordan man skal gå frem i alle ulike situasjoner.
Hvilke råd kan du gi til en som ønsker å lære seg dette?Utvikle mye kode, utfør feilsøkingsoppgaver som det finnes mange av der ute på nett, lær deg verktøy og lær deg å lese logger. Dette er litt som bilkjøring; man blir ikke god før man har kjørt lenge.