(Artikkelen ble først publisert 21. april 2022)
- Jeg har hatt hovedansvar for å bevise, i test, at vi ikke ville klare å ta i mot trøkket fra publikum under Maskorama og MGP. Klarer jeg ikke å bevise at det vil feile, så vil det sannsynligvis fungere. Det er det beste vi får til i test, forteller testutvikler Roger Hoem-Martinsen.
I kode24s serie "Hva gjør en..?", hvor vi forklarer hva ulike utviklere på et team egentlig driver med, har turen kommet til testutvikleren.
Talsperson for denne gjengen er altså Roger Hoem-Martinsen, som driver for seg selv, og for tida er ute i oppdrag hos publikumsinteraksjon-avdelinga til NRK.
- Oppsummert jobber jeg for å minimalisere tiden med feil i prod. Men det er på ingen måte et mål at jeg skal bruke mest mulig tid på å skrive tester. Vi trenger å kunne raskt identifisere, forstå og rette feil, samt å rulle ut ny kode, og test er bare en liten del av dette, forteller han til kode24.
Slik gjør du kjedelig testdata gøy, med Jsonnet
Faktisk har han en lang liste over ting en testutvikler ikke er, før vi setter i gang med intervjuet:
- "Testutvikler er ikke en som skal sitte alene og skrive tester."
- "Hen skal ikke være en "dørvakt", som skal bestemme om noe skal ut i prod eller ikke."
- "Hen skal ikke bygge opp et eget økosystem av tester på utsiden av der produksjonskoden er, for eksempel i et eget repo.
- "Hen skal ikke innføre masse verktøy som bare hen kjenner til, eller sette i gang med helt andre programmeringsspråk enn resten av teamet."
- Kanskje burde testutvikler heller hete "utvikler med spesialisering innen test"? Vi har jo heller ikke "produksjonskodeutviklere", funderer testutvikler, og/eller "utvikler med spesialisering innen test", Hoem-Martinsen.
«Du kan velge å skrive flere tester, eller du kan slette kode. Kode som ikke finnes, inneholder heller ikke feil.»
Hvordan havna du i rollen som testutvikler? 📚
Jeg er utdannet sivilingeniør innen elektronikk, med spesialisering innen digital kommunikasjon, ved NTNU. Og har hatt en litt tilfeldig vei frem til der jeg er nå.
Jeg har jobbet som forsknings- og utviklingsingeniør, diverse programvare-utviklerstillinger, en rolle innen salg, samt en rolle som spesialist innen kommunikasjonsprotokoller.
Det var litt tilfeldig at jeg da begynte som konsulent innen test. Det var egentlig Marius Mæle, daglig leder i SOCO, som gjorde meg klar over at jeg kunne passe bra til nettopp det. Og jeg ble klar over at bredden i min erfaring var mer en styrke enn en svakhet.
Jeg jobbet i SOCO i rundt to år, før jeg valgte å starte for meg selv. For meg var det attraktivt å kunne dra på de konferansene jeg ville dra på, ta eller gi de kursene jeg ville, å kunne investere litt her og der, og etter alt dette også sitte igjen med en god slant penger.
Gruppen for publikumsinteraksjoner i NRK har vokst mye de siste årene, og teamet ønsket å få inn en spesialist innen test. Det ble heldigvis meg! Det har vært utrolig spennende, og det er masse spennende som skal skje i tiden fremover.
Hva innebærer det å være testutvikler? 💪
Det er viktigste for meg i min rolle å sikre at det vi lager fungerer etter hensikten.
Men dette kan aldri løses med testing alene. Alt starter med en en god forståelse av hvilket problem eller behov vi faktisk skal løse, og hvordan dette passer med strategien på høyere nivå. Når vi forstår hva vi skal løse og hvorfor, er det mye lettere å forenkle løsningen. Enkle løsninger er ofte lettere å teste og har veldig ofte færre feil.
Litt satt på spissen, er det to måter å øke testdekningen på: Du kan velge å skrive flere tester, eller du kan slette kode. Kode som ikke finnes, inneholder heller ikke feil.
Jeg ender ofte opp med å gjøre veldig mye forskjellig. Mye av det som til slutt havner på tech lead sitt bord prøver jeg å løse eller strømlinjeforme. Det gjelder for eksempel forbedringer av pipelines, av applikasjonslogging og annet som hjelper observerbarheten, eller å definere og implementere en teststrategi.
Jeg sørger for at tech leads, som Hans Christian Hagen, skal bruke minst mulig tid på debugging.
Hva gjør egentlig en tech lead? - Kunne blitt omdøpt til debugger
Hvordan ser en vanlig arbeidsdag ut for deg som testutvikler? 📅
Etter et lite kaos av en morgen får jeg mine to sønner ut døra, og jeg kan sette meg på T-banen fra Oppsal til Majorstua. Der drar jeg opp Lichess og blir knust i tre-fire partier med lynsjakk.
Lett rystet ankommer jeg endelig NRK sine lokaler, og starter med 5 minutter i hackertyper.com for å få litt flyt, og gjenvinne litt selvtillit. Jeg har ristet av meg noe av bedragersyndromet og dagen er i gang.
Hvis jeg er usikker på hva jeg skal gjøre, diskuterer jeg det med resten av teamet. Vi har fått vårt eget rom, så avklaringer går fort. De fleste utviklerne i teamet har veldig få møter. Tech lead, UX og team lead tar den støyten. Jeg bruker maks fire timer i uka på møter.
Akkurat nå er vi i innspurten av et prosjekt vi skal levere til påske. Dette prosjektet startet for tre uker siden med en Google Design Sprint. Etter gode tilbakemeldinger fra de som var med i brukertest, positive signaler for NRKs ekspert på Uniform Utvikling og tommel opp fra redaksjonen, ble det besluttet å gå videre med prosjektet.
I dette prosjektet har jeg holdt i mye av det som har med data og analyse å gjøre. UX-designer har laget forslag til hypoteser. Vi har så sammen iterert over disse, og kommet frem til gode kvantitative målinger vi kan gjøre for å hente innsikt. Designer har jobbet med spørreskjema, og jeg har jobbet med målinger i web-appen. Jeg har også sørget for lasttesting av API-et og diverse Ops-relaterte saker. Funksjonell testing sørger hele teamet for.
I slike korte og intense prosjekter, så merker jeg veldig godt hvor fantastisk flinke folk jeg jobber med!
Maskinlæringsutvikler om hverdagen: - Kan ta to-tre dager å trene en modell
Hvilke verktøy, språk og programvare bruker du mest tid i? 💾
Akkurat nå lager vi en webapp i Svelte, og backend er et Express-API skrevet i Typescript koblet mot en MySQL-database. Frontend er hostet i Akamai og backend kjører i Kubernetes. Vi skriver API-definisjonene i OpenAPI.
Som nevnt tidligere, så er prosjektet vi jobber med nå spikret sammen på noen uker. Appen skal leve veldig kort, så vi har skrevet veldig få tester, og har heller fokusert på god logging i produksjon.
Vi bruker Azure Application Insights for både frontend og backend. Vi gjør noen lasttester i k6 for å verifisere at ytelsen er god og at vi raskt klarer å forstå hvor flaskehalsen og eventuelle feil ligger.
NRK.no oppdaterte pakke, plutselig fikk ikke iPhone-brukerne gå tilbake
Hva er det beste og verste ved å være testutvikler, synes du? 💘
Det beste med rollen min er at jeg får bidratt til at hele teamet yter bedre uten at jeg alltid er nødt til å sitte ved produksjonslinjen. Jeg blir gitt tid til å se helheten.
Jeg trives aller best på jobb når jeg merker at teamet jobber mer og mer effektivt for hver dag som går. Min erfaring er at effektive team har feil i produksjon i mye kortere tid.
Det verste med rollen er når jeg kommer inn i team som har negative erfaringer med "sånne som meg" fra før. Dette er ille av minst to grunner.
For det første, så tar det tid for teamet å innse at jeg ikke er helt idiot og at hen som var inne i teamet var et unntak fra regelen. Da er jeg allerede bakpå og må overbevise om at testkompetanse kan være verdifullt i et team.
«Jeg synes egentlig det er veldig kjedelig å skrive tester.»
Min løsning på dette er å komme med konkrete forslag til teststrategi og jobbe jevnt og trutt med å implementere denne. Vanligvis innebærer dette å slette en masse tester som over lengre tid har kaster mynt og kron mellom å være rød eller grønn, for så å begynne å implementere stabile tester.
Dette tar meg til den andre grunnen. Dette kommer ofte av at samarbeidet mellom test og utvikling ikke har fungert, så vi må gjøre koden testbar. Det har sneket seg inn mange "assert(true)", fordi testene har brukket, og den som har skrevet og forstått hensikten bak testene har vært opptatt med andre ting. Utviklerne har selvsagt vært nødt til å få rullet ut endringer.
Da blir jeg i en periode sittende å skrive en masse tester og refaktorere kode for at vi skal komme litt a jour og for å lage eksempler for utviklerne. Jeg synes egentlig det er veldig kjedelig å skrive tester.
Skjalg (34) lager NRKs Core Components: - Overlater gjerne databaser til voksne
Hvorfor trenger testutvikler å faktisk være en egen rolle? 🤷
Det er et veldig godt spørsmål.
Det skulle i utgangspunktet være unødvendig med en egen rolle. Gode utviklere er ofte gode innen test, og de er også gode til å vurdere når noe kan gå ut i produksjon med relativt få tester. Alt må sees i sammenheng.
Kanskje kunne rollen testutvikler heller gå på rundgang innad i teamene? Eller burde teamene frigi mer tid til å eliminere "toil"?
Jeg tror kanskje at behovet for roller ofte brukes for å kommunisere behovet for kompetansen. Før vi klarer å skille kompetanse og rolle fra hverandre, så har vi kanskje behov for rollen?
Hvordan er lønna og arbeidsmarkedet for testutviklere? 💰
Jeg tror kanskje testutviklere er ganske attraktive i markedet, men er ikke alle utviklere attraktive akkurat nå?
Jeg har inntrykk av at lønna er bra, men vet ikke. Jeg har ikke så god oversikt over timepriser.
Men jeg har aldri vært uten oppdrag. Det er kanskje en pekepinn.