Bugg (datorprogram)
En bugg är ett fel eller oväntat beteende i ett datorprogram. Artikeln förklarar vad buggar är, vanliga orsaker, historik, hur de hittas och åtgärdas samt skillnaden mot skadlig kod.
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.
Bildgalleri
2 BilderEgenskaper 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.
Typer av buggar
Buffertöverskridande
Ett buffertöverskridande inträffar när ett program skriver till eller läser från ett minnesområde som det inte får komma åt.
Aritmetiskt överflöde
Ett aritmetiskt överflöde inträffar när ett tal i en variabel ökas utöver det högsta tal som variabeln tillåter. Detta leder vanligtvis till att talet återställs till noll.
Oändlig slinga
En oändlig slinga uppstår när ett program går in i en slinga (en serie instruktioner som upprepas många gånger) och det inte finns någon väg ut ur slingan. Detta kan leda till att programmet fryser.
Avrundningsfel
Om en variabel med flyttal inte har tillräcklig precision kan det tal som lagras i den vara felaktigt. Detta kan orsaka olika problem beroende på programtypen, till exempel kan det leda till att ett navigationsprogram navigerar till en oönskad plats eller att ljudet förvrängs i ett ljudinspelningsprogram.
Division med noll
Division med noll är en ogiltig matematisk operation. Om ett program dividerar ett heltal med noll kommer det att krascha. På Linux är meddelandet som visas när detta fel inträffar "floating point exception" (undantag för flyttal), även om flyttal inte var inblandade. Matematik med flytande punkter tillåter ibland division med noll. Detta resulterar vanligtvis i ett speciellt "not a number"-värde.
Problem med klippning
I videospel uppstår clippingproblem, även kallade kollisionsdetekteringsproblem, när ett objekt passerar genom en barriär (t.ex. en vägg, ett golv eller ett tak) som det inte var tänkt att passera genom. Detta är ett mycket vanligt fel som förekommer i många videospel. Det kan till exempel hända i Doom 2 när ett krossat monster återuppstår av en ärkevild. Clippingproblem kan ofta användas som en tidsbesparande taktik i speedruns, till exempel i Super Mario 64 är det möjligt att hoppa över att gå upp för spiraltrappan i slottet genom att hoppa genom taket.
Säkerhetsproblem
Säkerhetsfel är fel som gör det möjligt för en inkräktare att antingen få tillgång till datorn eller få datorn att krascha. Att få datorn att krascha kallas för en överbelastningsattack. Det är särskilt viktigt att åtgärda säkerhetsfel eftersom de kan göra det möjligt för inkräktare att stjäla viktig information, t.ex. kreditkortsnummer eller lösenord. Exempel på säkerhetsfel är Heartbleed och Shellshock.
Misbugs
Fel i maskinvaran
Vissa fel påverkar hårdvaran (de fysiska delarna av datorn) istället för programvaran. Om man till exempel körde instruktionen lock cmpxchg8b eax på gamla Pentium-processorer skulle det leda till att processorn slutade fungera tills den startades om. Eftersom hårdvarubuggar är fysiska konstruktionsfel kan de inte rättas till med en programuppdatering, även om det kan vara möjligt att arbeta runt (dölja) buggen med en programuppdatering.
Frågor och svar
F: Vad är en programvarubugg?
S: En programvarubugg är ett problem med koden i ett datorprogram som gör att det inte fungerar korrekt.
F: Vilka är konsekvenserna av ett programfel?
S: En programvarubugg kan orsaka olägenheter för användaren och kan få datorn att krascha eller frysa.
F: Har alla datorprogram buggar?
S: Ja, de flesta datorprogram har buggar.
F: Vad är ett buggigt program?
S: Ett buggigt program är ett program som har ett stort antal buggar, eller möjligen en eller ett par allvarliga buggar.
F: Vem är ansvarig för de flesta buggar i datorprogram?
S: De flesta buggar orsakas av dålig programmering av utvecklaren, men ibland kan de orsakas av kompilatorproblem.
F: Vad gör man när man hittar ett fel i ett datorprogram?
S: När buggar hittas skickar man buggrapporter till utvecklaren för att berätta om buggen och låta dem åtgärda den.
F: Vad menar man när man säger att datorn har en bugg?
S: När folk säger att deras dator har en bugg menar de vanligtvis att något är fel med den, vilket vanligtvis orsakas av ett datavirus som har infekterat deras dator och gör den långsam eller gör olika saker.
Relaterade artiklar
Författare
AlegsaOnline.com Bugg (datorprogram) Leandro Alegsa
URL: https://sv.alegsaonline.com/art/91575