En programvarubugg är ett felaktigt eller oväntat beteende i koden som får ett datorprogram att fungera felaktigt eller inte alls. Begreppet används brett för allt från små visuella fel till allvarliga fel som orsakar krascher, dataförlust eller säkerhetshål. Enstaka buggar kan vara lätta att rätta till, medan sammansatta eller svårreproducerade fel kan kräva omfattande felsökning och ändringar i både design och implementation.

Egenskaper och typer

Buggars karaktär varierar beroende på ursprung och effekt. Vanliga typer är syntaxfel som stoppas av kompilatorn, logiska fel där programmet ger fel resultat, minnesläckor som urholkar resurser och konkurrensfel (race conditions) i parallella system. Vissa buggar är intermittenta och svåra att reproducera, andra uppträder konsekvent under särskilda förutsättningar.

Vanliga orsaker

  • Dålig kravspecifikation eller missförstånd mellan användare och utvecklare.
  • När utvecklaren skriver felaktig kod eller missar gränsfall; dessutom kan komplexitet och teknisk skuld öka risken.
  • Verktyg eller miljöproblem, till exempel kompilatorbuggar eller felaktiga bibliotek; se även kompilatorproblem och beroenden.
  • Plattforms- och hårdvarufel som får mjukvara att bete sig oväntat.

Många buggar upptäcks först av användare eller testare som skickar en felrapport till utvecklingsteamet med exempel och loggar. Formaliserade processer som enhetstester, kontinuerlig integration och kodgranskningar minskar antalet introducerade fel.

Historia och begreppsutveckling

Ordet "bugg" i teknisk mening är etablerat sedan 1900-talets mitt. En välkänd anekdot beskriver hur en insekt hittades i en reläpanel på en tidig dator, vilket populariserade termen. Begreppet har sedan dess breddats för att omfatta alla typer av programmerings- och systemfel.

Hantering och åtgärd

Processen att hitta och åtgärda buggar kallas debugging. Den inkluderar reproduktion av felet, analys med hjälp av loggar och felsökningsverktyg, och sedan kodändringar och tester för att säkerställa att felet är löst utan att introducera nya regressionsfel. Verktyg för buggspårning hjälper team att prioritera och följa upp rapporter; exempel på steg är identifiering, prioritering, åtgärd och regressionstest.

Betydelse, exempel och skillnader

Buggars konsekvenser varierar: i konsumentprogram kan de vara irriterande visuella fel, i kritiska system som sjukvård eller flyg kan de få allvarliga följder. Ett viktigt distinkt begrepp är att en bugg inte är samma sak som skadlig kod (till exempel virus) — en bugg är oftast oavsiktlig, medan skadlig kod är avsiktligt designad för skada. Säkerhetsbuggar som läcker data behandlas ofta som sårbarheter och kan få egna hanteringsrutiner (t.ex. CVE-publicering).

Praktiska exempel inkluderar videospelsglitchar där objekt passerar genom ytor, mindre allvarliga gränssnittsproblem eller komplexa fel i realtidsstyrning. Många system levereras med kända buggar som åtgärdas i senare uppdateringar eller patchar — därför är underhåll, testning och snabb uppdateringshantering viktiga delar av modern programvaruutveckling. För mer vägledning om kvalitetsarbete och testning, se även kodkvalitet, testmetoder och systemkrascher.

Att förstå och hantera buggar är centralt för tillförlitlig programvara. En kombination av god design, automatiserade tester, kodgranskning och användarrapportering är de vanligaste metoderna för att minimera och snabbt åtgärda fel i produktionssystem.