Bytt funksjon
Hva er en feature toggle?
I programvareutvikling er en funksjonsbryter en mekanisme som gjør det mulig å slå kode "på" eller "av" eksternt uten at det er behov for en distribusjon. Feature toggles brukes ofte av produkt-, ingeniør- og DevOps-team for kanarifuglutgivelser, A/B-testing, produkteksperimenter og kontinuerlig distribusjon.
Også kjent som "feature flags", "feature switches" eller "release toggles"; feature toggles har en rekke bruksområder i applikasjoner og infrastruktur, hvorav de fleste er for å redusere risiko.
De kan for eksempel brukes i applikasjoner for å gradvis rulle ut nye funksjoner, slik at teamene kan teste endringene på en liten gruppe brukere før de lanseres til alle. På samme måte kan funksjonsbrytere fungere som strømbrytere i infrastrukturen, slik at teknikere kan fjernstyre et utrullet systems oppførsel.
Slik fungerer funksjonsbrytere
Feature toggles legges vanligvis til i kodebaser for å gjøre det mulig å fjernstyre viss logikk under kjøring. I koden er denne logikken pakket inn slik at den kan styres av statusen til en funksjonsbryter. Hvis statusen til funksjonsbryteren er "på", utføres den innkapslede logikken. Hvis statusen til funksjonsbryteren er "av", hoppes den innkapslede logikken over.
Når en applikasjon ønsker å vite statusen til en funksjonsbryter under kjøring, sender den en forespørsel til en ekstern datakilde eller en administrert tjeneste som Optimizely Feature Experimentation. Applikasjonen kan deretter bestemme om den skal utføre innpakket logikk basert på den returnerte statusen.
Siden applikasjonen får statusen for funksjonsbrytere fra en ekstern kilde, kan den innpakkede logikken fjernstyres ved å slå flagget av eller på i konfigurasjonsfilen, uten at det er nødvendig å distribuere kode. Hvis statusen til en funksjonsbryter for eksempel endres i Feature Experimentation, endres den også i applikasjonen ved kjøretid.
Kodebaser inneholder ofte mange funksjonsbrytere som styrer ulike deler av applikasjonen. Derfor blir funksjonsbrytere vanligvis tildelt unike navn eller nøkler for å kunne skilles fra hverandre og beskrive logikken de kontrollerer. I tillegg kan funksjonsknappene ha ulik status for ulike brukere eller målgrupper. Disse unike nøklene samt informasjon om brukeren eller målgruppen kan deretter brukes til å slå opp statusen til en bestemt funksjonsknapp i en ekstern datakilde eller i Feature Experimentation.
Fordelene med funksjonskoblinger
Den største fordelen med funksjonsflagging er at det reduserer risikoen forbundet med å lansere endringer i en applikasjon. Enten det er snakk om en ny funksjonsutgivelse eller en liten refaktorering, er det alltid en iboende risiko for å slippe nye regresjoner. For å redusere denne risikoen kan endringer i en applikasjon plasseres bak funksjonsknapper, slik at de kan slås "på" eller "av" i nødstilfeller.
I mer komplekse tilfeller kan funksjonsknapper brukes til å teste endringer på små undergrupper av brukere. Ved å aktivere en funksjonsbryter for en brøkdel av alle brukere, kan teamene få innsikt før endringene rulles ut til alle. Denne funksjonaliteten brukes vanligvis i forbindelse med utrulling av nye funksjoner eller kanarifugl, som innebærer å validere endringer i applikasjoner og infrastruktur ved å teste dem på en delmengde av brukere. På denne måten kan teamene fange opp regresjoner tidlig og rulle tilbake om nødvendig, noe som reduserer risikoen for feil under kjøring.
Utviklingsprosessen for funksjonsbytte
Det første trinnet i implementeringen av en funksjonsveksler er å opprette og definere den i en ekstern datakilde eller en tjeneste som Optimizely. Dette innebærer vanligvis å velge et unikt navn eller en unik nøkkel for funksjonsvekslingen samt en innledende status. Når funksjonsvekslingen er definert, kan applikasjoner og infrastruktur begynne å slå opp statusen ved hjelp av den unike nøkkelen.
Etter at funksjonsbryteren er definert i Optimizely eller et annet sted, må statusen være tilgjengelig for applikasjonen. Derfor må det legges til kode i kodebasen som gjør det mulig for applikasjonen å slå opp statusen til en funksjonsbryter fra den eksterne kilden. Optimizely Feature Experimentation tilbyr SDK-er for mange store språk og rammeverk som tilbyr denne funksjonaliteten.
Når funksjonsbrytere er tilgjengelige for applikasjonen, kan de legges til i bestemte kodebaner for å gi fjernkontroll. Kodebaner som krever fjernkontroll, kan pakkes inn i betinget logikk som sjekker statusen til funksjonsbryteren før den kjøres. Når den aktuelle kodebanen nås under kjøring, vil den bare utføres hvis funksjonsflagget er i en bestemt tilstand.
Eksempler på veksling mellom funksjoner / brukstilfeller
Utgivelser av kanarifugler
Når man lanserer en ny funksjon, er det ofte nyttig å teste den blant en liten gruppe brukere før den lanseres for alle. Denne praksisen kalles "canary release" eller "feature rollout", og brukes av team for å redusere risikoen når de legger til eller endrer en funksjon. Feature toggles kan brukes til å utføre "canary releases" ved å kontrollere om den nye funksjonen skal vises til en bestemt bruker eller ikke, og ved å gi mulighet til å fjernstyre utrulling eller tilbakekalling.
Test i produksjon
På grunn av kompleksiteten i moderne distribusjonssystemer kan det være forskjeller mellom test- og produksjonsmiljøer som kan introdusere feil som ikke kan oppdages under enhetstesting. Ved å innlemme feature toggling i utviklingsprosessen kan programvareutviklingsteamene lansere funksjoner i produksjonsmiljøet på en kontrollert måte, rettet mot et mindre segment av brukerbasen for å redusere risikoen, slik at de kan teste nye funksjoner i produksjon. Hvis testen mislykkes, kan den enkelt rulles tilbake ved å justere vekslingskonfigurasjonen uten å gjøre endringer i kildekoden.
A/B-testing
A/B-tester brukes av team til å eksperimentere med nye ideer og bekrefte hypoteser ved hjelp av data fra den virkelige verden. De segmenterer trafikken i én av to varianter av en funksjon, slik at man kan måle hver variant side om side. En funksjonsbryter kan brukes til å forenkle en A/B-test ved å kontrollere variasjonen som hver bruker er inndelt i. Hvis en funksjonsbryter er "av" for en bruker, vil vedkommende se A-variasjonen av testen, mens hvis den er "på", vil vedkommende se B-variasjonen.
Strømbryter
Etter hvert som en applikasjon eller infrastruktur blir mer kompleks, kan den bli vanskeligere å vedlikeholde og tregere å stabilisere i tilfelle feil. Funksjonsbrytere er en fin måte å løse problemer med vedlikehold og gjenopprettbarhet i et voksende system. Når de brukes på samme måte som strømbrytere eller nødstopp, kan funksjonsknapper gi teamene en sentralisert, ekstern måte å kontrollere komponenter i et distribuert system og reagere på feil på.
Trunk-basert distribusjon
Fordi feature toggles muliggjør rask distribusjon og tilbakespilling av ny kode, kan de brukes til å støtte en trunkbasert utviklingsprosess, der kodeendringer kan gjøres i hovedstammen i stedet for å ha flere featuregrener som deretter må slås sammen og avstemmes i Github eller andre kildehåndteringsplattformer. Dette kan føre til raskere utgivelsessykluser og mindre tid brukt på feilsøking.
Feature toggles og kontinuerlig levering
Kontinuerlig integrasjon og kontinuerlig levering (CI/CD), som ble lansert av den innflytelsesrike programvareutvikleren Martin Fowler, er en disiplin innen programvareutvikling som innebærer at programvare kan settes i produksjon når som helst. Den har blitt tatt i bruk av ledende programvareselskaper over hele verden, der det nå forventes at teamene raskt leverer programvare som er stabil og feilfri til brukerbasen.
Funksjonsflagging forbedrer CI/CD ved å gjøre "kontinuerlig" mer oppnåelig. Funksjonsflagg og funksjonskoblinger er en nøkkelkomponent i implementeringen av kontinuerlig levering, og gjør det mulig å skille utrulling av funksjoner fra distribusjon av kode. Ufullstendige funksjoner kan slås sammen i produksjonskodebasen, men skjules bak funksjonsflagg.
Med kontinuerlig levering og håndtering av funksjonsflagg kan et team lansere, kontrollere og måle funksjonene sine i stor skala.
Optimizely og feature toggles
Optimizely er ledende innen progressiv levering og eksperimentering, og vi tilbyr en rekke ulike løsninger for håndtering av funksjonsflagg.
Optimizely server-side eksperimentering er vår suite for funksjonsflagging og eksperimentering som gjør det mulig for utviklingsteam å administrere funksjoner og kjøre funksjonstester på alle Internett-tilkoblede enheter, med SDK-er tilgjengelig for de mest populære språkene og rammeverkene, inkludert Node, Python, Ruby, Go, React, Swift og C#.
For team som bare vil komme i gang med feature toggles, er Optimizely gratis feature flagging en feature flagging-løsning du kan registrere deg for og distribuere med en gang for å begynne å bruke feature flags uten funksjonaliteten for a/b-testing, helt gratis (i motsetning til konkurrenter som LaunchDarkly).
Feature toggles er et kraftig verktøy å ta i bruk i programvareutviklingen, og Optimizely Feature Experimentation gjør det enklere enn noensinne å ta i bruk for å redusere risiko, øke utviklingstiden og teste ny funksjonalitet i programvaren.