Feature toggles er en vigtig komponent i moderne softwareudvikling, og de gør det muligt for udviklingsteam at implementere nye funktioner uden at risikere at forstyrre eksisterende funktionalitet. En feature toggle, også kaldet feature flags, flippers, switches eller latent kode, er en konfigurationsmulighed, der bestemmer, om en bestemt funktion skal aktiveres i softwaren. Ved at pakke nye funktioner ind i sådanne konfigurationer kan koden frigives til produktion, uden at den er tilgængelig for alle brugere. Dette gør det muligt at undgå at lancere ufuldstændig eller utestet kode, som kunne føre til systemfejl eller dårlige brugeroplevelser.
En af de primære fordele ved feature toggles er, at de giver mulighed for gradvis frigivelse af funktioner. I stedet for at vente to uger på, at en funktion er færdigudviklet, kan koden løbende integreres i produktionen. Når funktionen er aktiveret via en toggle, er den kun tilgængelig for en lille gruppe brugere, hvilket giver udviklingsteamet og forretningsbrugerne mulighed for at teste funktionaliteten i et live-miljø. Hvis noget går galt, kan togglen hurtigt slukkes, og fejlen er dermed minimal.
Der er forskellige typer feature toggles, som hver især har specifikke anvendelser og risikoaspekter. Pete Hodgson, en anerkendt ekspert på området, kategoriserer toggles i fire typer:
-
Release toggles: Bruges til at skjule ufuldstændige eller utestede kodelinjer, der endnu ikke er klar til at blive offentliggjort.
-
Experiment toggles: Anvendes til at køre A/B tests eller multivariate tests for at sammenligne forskellige versioner af en funktion.
-
Ops toggles: Bruges til at styre operationelle aspekter af systemet, såsom at deaktivere ikke-kritiske funktioner under perioder med høj trafik.
-
Permissioning toggles: Kontrollere hvilke funktioner eller produktoplevelser bestemte brugere skal have adgang til, som for eksempel premium-funktioner.
Hver type toggle kan påvirke systemet forskelligt afhængigt af, hvordan og hvornår den bruges. For eksempel kan en release toggle, der kun er aktiv i kort tid, have en helt anden risiko end en permissioning toggle, der kan ændre sig ofte og eksistere permanent i systemet. Derfor er det vigtigt at forstå, hvordan togglen er implementeret, hvad dens mulige værdier er, og hvor i koden togglen bliver tjekket.
Når man tester en toggle, er det vigtigt at forstå, hvordan den er blevet integreret i systemet. Dette inkluderer, hvilken type værdi togglen kan tage, og hvordan dens værdi ændres. En simpel boolean-toggle, der kun har to tilstande (ON eller OFF), kræver normalt mindre testning end en mere kompleks toggle, der kan indeholde flere værdier eller betingelser. Det er også vigtigt at vurdere, om togglen er statisk, og hvordan ændringer af dens konfiguration kan håndteres under udviklingen og i produktionsmiljøet.
Selve testprocessen for toggles er ofte et punkt, hvor udviklere og testere støder på udfordringer. Med flere toggles i spil opstår der hurtigt en eksponentiel vækst af mulige tilstande, som systemet kan være i. Testning af hver kombination af toggles kan hurtigt blive en uoverkommelig opgave. Heldigvis er det ikke nødvendigt at teste alle mulige konfigurationer. Det vigtigste er at teste den konfiguration, der er planlagt til at blive frigivet til produktion, og sikre, at togglen fungerer som forventet under de forhold, den vil blive brugt i.
Der er tre sæt af tests, som udviklingsteamene bør fokusere på:
-
Den nuværende produktionskonfiguration.
-
Konfigurationen, hvor togglerne, der skal frigives, er tændt.
-
En fallback-konfiguration, hvor de toggler, der er planlagt til at blive frigivet, er slukket.
Derudover kan det være nyttigt at udføre test med alle toggles tændt for at undgå regressioner i fremtidige udgivelser.
Udviklere bør også sikre, at implementeringen af toggles er så simpel som muligt. Martin Fowler advarer mod at overkomplicere toggle-tests og påpeger, at toggles kun bør anvendes ved de nødvendige indgangspunkter, der leder brugerne til de nye funktioner. Hvis arbejdet med at oprette, vedligeholde eller fjerne toggles tager betydelig tid, er det et tegn på, at der er for mange toggles i systemet.
Det er også væsentligt at forstå, hvordan togglen kan ændres. Er konfigurationen læst ved byggetid eller køretid? Hvor nemt er det at skifte mellem forskellige indstillinger, og har testeren adgang til at ændre konfigurationen i deres eget testmiljø?
Feature toggles er et kraftfuldt værktøj i moderne softwareudvikling, men de kræver omhyggelig implementering og testning for at undgå utilsigtede konsekvenser. Forståelsen af togglenes typer, anvendelse og teststrategier kan markant reducere risikoen ved deres brug og sikre, at nye funktioner bliver leveret til brugerne på en sikker og effektiv måde.
Hvordan Testning og Samarbejde Er Grundlaget for DevOps-Kultur i Agil Udvikling
DevOps er et begreb, der ofte forbindes med høje krav til hastighed og automatisering, men når man overvejer at implementere en sådan kultur, er det afgørende at forstå, hvordan eksisterende arbejdsmetoder og samarbejdsstrukturer spiller en rolle i denne overgang. Hvis du ikke er vant til at teste i et agilt miljø, vil du måske opleve udfordringer ved at hoppe direkte ind i en DevOps-kultur. Hvorfor er det sådan? I et agilt miljø er testning en kollektiv proces. Alle i teamet bliver opfordret til at udvikle en forståelse for kravene og den nødvendige testning. Alle er støttet i at udføre test, enten gennem udforskning eller ved at køre automatiserede tests. Problemer håndteres hurtigt – uanset om de rapporteres af et teammedlem eller en kontinuerlig integration server. Denne tilgang er ikke kun noget, der overlades til testeren, men involverer hele teamet.
Når disse ideer ikke stemmer overens med udviklingsteamets kultur, kan det være nødvendigt at tage et skridt tilbage, før man bevæger sig mod DevOps. Karen Greaves har udarbejdet en liste med ti spørgsmål, som kan hjælpe med at vurdere, hvordan de nuværende agile testpraksisser fungerer, og om man er klar til at implementere DevOps.
Test er en uundværlig del af det agile miljø, og det kræver et tæt samarbejde mellem udviklere og testere. En agil tilgang betyder, at hele teamet er enige om, hvad der skal testes for hver brugerhistorie og funktion, før udviklingen påbegyndes. Dette sikrer, at alle er klar over de krav, der ligger til grund for testningen, og at disse krav bliver forstået grundigt, før løsningen diskuteres. Det er også afgørende at kunne svare på spørgsmålet "Hvordan tester vi dette?" i forbindelse med enhver brugerhistorie. Hvis alle på teamet har kendskab til, hvordan de automatiserede tests køres og kan forstå resultaterne, bidrager det til at fjerne barrierer for effektivt samarbejde.
Automatisering er også et centralt element. Ved at planlægge, hvilke tests der skal automatiseres, og på hvilket niveau (enhed, komponent, brugergrænseflade), undgår man at duplikere tests og kan holde teststrategien strømlinet. Test scripts versioneres og mærkes sammen med kildekoden, da test er en del af den fungerende software. I en vellykket agil proces logges der ikke bugs i en database. I stedet rettes fejl straks, så snart de opdages. Når en server til kontinuerlig integration fejler, bliver problemet løst og systemet bringes tilbage til en fungerende tilstand inden for en time.
Denne type samarbejde betyder, at teammedlemmerne ikke nødvendigvis er adskilt i deres roller. Under et dagligt standup-møde ville en udenforstående ikke nødvendigvis kunne afgøre, hvem der er udvikler, og hvem der er tester. Det er et tegn på, at testning er blevet en del af teamets samlede opgave og ikke længere et separat domæne for en enkelt person.
Når man ønsker at implementere DevOps i en organisation, er det vigtigt at forstå, hvilken betydning dette har for de personer, der er involveret i produktleveringen. I DevOps-modellen er det ikke kun udviklerne, der er påvirket, men også forretningsanalytikere, produktledere, operations engineers og andre relevante roller. Det betyder, at alle disse personer har forskellige perspektiver på, hvad DevOps indebærer. Ledelsen fokuserer måske på resultatet af hurtigt at kunne udgive software dagligt, mens udviklere er mere optaget af, hvordan implementeringen ændres for at understøtte den nye arbejdsmodel, f.eks. ved at overgå til trunk-baseret udvikling. Dette mangfoldige perspektiv er en fordel, da det giver et mere nuanceret billede af, hvad DevOps betyder i praksis.
For at implementere DevOps effektivt er det nødvendigt at forstå motivationsfaktorerne for de forskellige aktører. Er målet at opnå hurtigere markedsføring, højere produktkvalitet eller stabilitet i produktionsmiljøet? At identificere, hvad der motiverer ledelsen, gør det muligt at prioritere de udviklingspraksisser, der er nødvendige for at opnå disse mål. For dem, der er involveret i implementeringen af ændringerne, er det vigtigste at fokusere på de næste små forbedringer, som kan skubbe organisationen videre.
Det er også essentielt at forstå betydningen af samarbejde på tværs af udviklingsteamet. I agile udviklingsteam er størrelsen på teamet et kritisk element. Små team størrelser giver mulighed for effektiv kommunikation og samarbejde, hvilket er nødvendigt for hurtige beslutninger og handlinger. Men for DevOps at fungere optimalt er det ofte nødvendigt med samarbejde ud over udviklingsteamet. Det kan betyde at inkludere en operations-specialist, eller at kommunikationen mellem udvikling og supportteamet bliver intensiveret.
At skabe samarbejde på tværs af teamet kræver, at man opbygger kommunikationsveje med andre personer i organisationen. Begynd med at identificere de personer, der kan hjælpe med at fremme det samarbejde, der er nødvendigt for en succesfuld DevOps-kultur. Det kan være en god idé at tage kontakt til disse personer via e-mail eller møde, præsentere sig selv og forklare, hvorfor et tættere samarbejde kunne være nyttigt. Det handler ikke blot om at promovere udviklingsteamets ideer, men om at skabe et fælles grundlag for samarbejde, hvor information deles på tværs af teams.
For at skabe effektivt samarbejde er det nødvendigt at undgå at overbelaste kommunikationen med ens egne ideer og materiale. Fokus bør være på at bygge et langsigtet samarbejde, hvor begge parter kan bidrage med værdifuld information. At stille spørgsmål til, hvad andre teammedlemmer laver, og invitere dem til at deltage i dine egne sessioner, kan være en god måde at opbygge denne gensidige forståelse og samarbejde.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский