QA - Bloggen

Vad är feature flagging?

Skriven av QESTIT Team | 2024-06-26 08:35

Feature flagging är en kostnadseffektiv och enkel programmeringsmetod som gör det möjligt för utvecklare att slå på eller stänga av funktionalitet i en programvara utan att behöva släppa eller ändra produktkoden. Att omsluta kod med feature-flaggor möjliggör att frikoppla funktionsutrullning från koddistribution.

I en tidigare artikel om progressiv leverans nämnde vi feature flagging för ytterligare styrning av inkrementella leveranser och tillgänglighetskontroll. En feature-flagga kallas också en feature-toggle eller feature-switch.

 

Varför feature flagging?

 

Även om tekniken inte är helt oproblematisk och ibland kritiserad (se hantering av feature-flaggor längre ner) så har den sina fördelar. Feature flagging kan erbjuda olika fördelar genom de olika sätt det kan implementeras på. Nedan följer några exempel på användningsområden för feature flagging:

 

  • Styrning av inkrementella releaser:
    En utvecklare kan bygga, testa och distribuera kod i produktion och leverera till de användare som är redo (lite jämförbart med progressiv leverans).

  • A/B-tester:
    En administratör kan placera användare i specifika grupper och besluta vid körning vilken väg varje grupp ska följa. A/B-test används för att utvärdera ny funktionalitet med mindre grupper av kunder. Mer om A/B-test i nästa artikel.

  • Panikknapp:
    Med feature flagging går det att skapa en panikknapp som gör det möjligt att snabbt stänga av en funktionalitet om den presterar dåligt. Detta kan kombineras med progressiv leverans som gör det möjligt att begränsa antalet användare som får ta del av den nya funktionaliteten. Om något går fel vid den första utrullningen går det att omedelbart stänga av och på så vis påverka så få slutanvändare som möjligt.

  • Hantering av säsongsmässiga/tillfälliga funktioner:
    Utvecklare kan aktivera funktionalitet under vissa tidsperioder (Black Friday, julhandel och så vidare) eller inaktivera en väldigt resurskrävande funktionalitet under kända perioder med hög trafik.

  • Blockering av användare:
    Feature-flaggor kan användas för att begränsa eller ge specifika grupper av användare tillgång till vissa delar av ett system. Detta är användbart för företag som följer bestämmelser som skiljer sig åt från land eller delstat (momssatser, skatter, regler för tobak, läkemedel, alkohol eller vapen).

  • Premiumfunktioner:
    Feature-flaggor kan också användas för att styra innehåll och funktionalitet som är tillgänglig för prenumeranter eller premiumanvändare kontra icke-betalande. Detta görs enkelt genom att omsluta funktionalitet med feature- flaggor.

Hur fungerar flaggningen?

 

I korthet innebär feature flagging att omsluta kodförändringar eller delar av koden med en flagga som anger vilka attribut som behöver vara uppfyllda för att koden ska köras. Feature flagging ändrar runtime-beteendet för en applikation baserat på hur den är konfigurerad. När en funktionalitet har flaggats i koden kan en administratör använda olika metoder för att avgöra vilka användare som ser eller får tillgång till den.

Feature-flaggor kan konfigureras på olika sätt, till exempel genom:

 

  • Användarattribut, såsom geografisk plats, namn och användarbeteende.
  • Miljö, såsom maskiner, operativsystem och IP-adress.
  • Slumpmässigt, till exempel en fast procentsats av alla användare och varianter av beteende, exempelvis aktivitet på sociala medier.

 

Hantering av feature-flaggor

 

Feature-flaggor introducerar villkorad logik och nya abstraktioner av koden och de skapar en stor testbörda. Därför måste teamet proaktivt ta bort flaggor som inte längre behövs för att hålla mängden flaggor hanterbara.

 

I och med att man vanligtvis använder många feature-flaggor på samma gång kan den ökade komplexiteten bli problematisk. Den extra komplexitet som kan uppstå är ökad trafik och att koden blir svårare att läsa, förstå, testa, uppdatera och underhålla.

 

Organisationer bör i förväg ha tänkt igenom hur feature-flaggor bör hanteras. Några exempel på saker att i förväg tänka igenom och bestämma är:

 

  • Ansvar för att hantera feature-flaggor, skapa, ändringar, förfrågningar, utrullning och borttagning.
  • Flaggningskonventioner, som bör beskriva vad flaggan är avsedd att göra så att de lätt kan identifieras och förstås för framtida utveckling och uppdateringar.
  • Process, som för progressiv leverans generellt försäkrar att varje flagga endast är på för utvecklaren först, sedan för testaren eller administratören innan den slås på för någon annan användare.
  • Ordning och reda. Alla system som använder feature-flaggor bör kunna visa flaggkonfigurationens nuvarande tillstånd. När bygg/versionnummer anges för en specifik komponent bör man få ut metadata så att testare eller utvecklare ser vilken kod som körs i vilken miljö.

Dessa faktorer tillsammans med att användningsområdet för olika feature-flaggor kan variera gör användandet komplext. För att underlätta hanteringen används ofta featurehanterings-plattformar eller featureflagg-hanteringssystem. Dessa är till för att hjälpa utvecklare att organisera och effektivisera feature-flaggkonfigurationer och hantering.

 

De flesta feature-flagghanteringssystem inkluderar flaggändringsvarningar, utrullningshantering, och möjlighet för panikknapp. Vissa feature-flagghanterings-system är open-source och är fria men har bara stöd för ett eller två programmeringsspråk, medan andra tar ut en månatlig prenumerationsavgift och erbjuder stöd för flera språk och tekniker.