Bohrbug: vad är det, orsaker till uppkomst och metoder för åtgärd

Författare: IT Sectr Publicerad: 2026-07-29 Lästid: 8 min

Bohrbug — är ett programvarufel som beter sig deterministiskt: med samma indata uppträder det varje gång utan undantag. Namnet kommer från Niels Bohrs atommodell, där elektronen rör sig i en strikt bestämd bana — lika förutsägbart som denna bugg. Enligt Wikipedia (2026) tillhör Bohrbug klassen av enklast diagnosticerbara defecter, eftersom det inte kräver särskilda villkor för att upprepas.

Huvudpunkter

  • Bohrbug — ett stabilt fel som upprepas vid varje körning med samma indata.
  • Namnet är relaterat till Bohrs planetmodell av atomen — buggen beter sig förutsägbart, som en elektron i omloppsbana.
  • Diagnostik av sådana buggar är enklast: det räcker att fastställa indatavillkoren och utföra felsökning.
  • Orsaker inkluderar logiska fel, felaktiga gränsvillkor och skrivfel i koden.
  • Enhetstester — det främsta verktyget för att förebygga Bohrbug under utvecklingsfasen.

Vad är Bohrbug?

Bohrbug — är en typ av programvarufel som visar sig deterministiskt: med samma indata leder det alltid till samma fel. Termen introducerades i vetenskaplig cirkulation av forskarna Jim Gray och Andreas Reuter i boken “Transaction Processing: Concepts and Techniques” (1993).

Till skillnad från Mandelbug, som kaotiskt ändrar sitt beteende, är Bohrbug stabilt: en utvecklare kan reproducera det med slutna ögon genom att ge systemet samma parametrar. Detta gör det till en idealisk kandidat för steg-för-steg-felsökning i IDE.

Bohrbug förekommer i alla faser av mjukvarans livscykel — från utveckling till drift. Det upptäcks ofta i testfasen, eftersom QA-ingenjörer utför repeterbara scenarier som garanterat leder till fel.

Definition enligt Gray och Reuter

Enligt klassificeringen av Gray och Reuter är Bohrbug en defekt som uppfyller tre villkor: en fast uppsättning indata, samma systemtillstånd och samma felresultat. Om minst ett villkor bryts är buggen inte länge “Bohr”.

Författarna betonar att Bohrbug inte nödvändigtvis är ett enkelt fel. Det kan vara hur komplext som helst logiskt sett, men dess determinism skiljer det från alla andra feltryper i klassificeringen.

Ursprunget till namnet Bohrbug

Namnet Bohrbug kommer från den danske fysikern Niels Bohr, skaparen av planetmodellen av atomen. Analogin är enkel: precis som elektronen i Bohrs modell rör sig i en strikt fixerad bana, upprepar denna bugg samma beteende vid varje körning.

Gray och Reuter valde detta namn för att kontrastera deterministiska fel mot kaotiska, som de kallade Mandelbug — för att hedra matematikern Benoît Mandelbrot, grundaren av teorin om fraktaler och kaos.

Intressant nog används termen Bohrbug i engelskspråkig litteratur ofta som synonym för “deterministiskt fel”, även om den är mindre spridd i svenskspråkig miljö. De flesta utvecklare kallar sådana buggar helt enkelt “reproducerbara fel”.

Nyckelegenskaper hos Bohrbug

Bohrbug har en uppsättning särskiljande egenskaper som gör att det kan identifieras bland andra typer av mjukvarudefekter. Låt oss granska varje egenskap i detalj.

Determinism

Huvudegenskapen hos Bohrbug — fullständig förutsägbarhet. Om applikationen kraschade med viss indata på utvecklarens maskin kommer den att krascha exakt likadant på testarens maskin och i produktion. Inga slumpmässiga faktorer.

Reproducerbarhet

Bohrbug reproduceras i 100% av försöken. Detta innebär att ingen speciell utrustning krävs för felsökning — en vanlig IDE och debugger räcker. Utvecklaren placerar en brytpunkt, startar applikationen, anger indata och följer koden steg för steg.

Stabilitet över tid

Om Bohrbug inte åtgärdas kommer det att reproduceras i varje version av programmet fram till reparationen. Tidsfaktorer — CPU-belastning, månfas, tid på dygnet — påverkar inte dess uppträdande.

Huvudorsaker till Bohrbug

Orsakerna till uppkomsten av Bohrbug kan delas in i flera kategorier. Att förstå dessa kategorier hjälper till att snabbare hitta roten till problemet.

Logiska fel

Ett felaktigt konstruerat villkor — den vanligaste orsaken till Bohrbug. Till exempel använde utvecklaren operatorn `||` istället för `&&`, vilket ledde till felaktig exekvering av kodgrenen vid varje anrop av funktionen med vissa argument.

Fel i gränsvillkor

Användning av operatorn `<=` istället för `<` eller den omvända situationen — en klassisk källa till Bohrbug. Om en loop ska köras 10 gånger men körs 11 på grund av ett felaktigt villkor är detta ett deterministiskt fel som kommer att visa sig vid varje körning.

Felaktiga konstanter och magiska tal

Hårdkodade konstanter som inte överensstämmer med affärslogiken skapar stabila fel. Till exempel är timeout för serveranslutning inställd på 100 millisekunder istället för 5000 — anslutningen kommer att brytas vid varje begäran.

Hur man upptäcker Bohrbug i koden

Upptäckt av Bohrbug — den enklaste uppgiften för en utvecklare jämfört med andra buggtyper. Den deterministiska karaktären möjliggör användning av standardmetoder för felsökning.

java
public class DiscountCalculator {
    public double calculate(double amount, boolean isPremium) {
        // Bug: premiumanvändare får 5% rabatt istället för 10%
        if (isPremium) {
            return amount * 0.95;
        }
        return amount * 0.90;
    }
}

I detta exempel är Bohrbug uppenbar: vid anrop av `calculate(1000, true)` returnerar metoden alltid 950 istället för 900. Det enklaste enhetstestet med fast indata kommer omedelbart att avslöja problemet.

Enhetstestning som huvudmetod

För upptäckt av Bohrbug är enhetstester det mest effektiva verktyget. Det räcker att täcka funktionen med en uppsättning tester med olika gränsvärden, och det deterministiska felet kommer att visa sig vid första körningen.

Steg-för-steg-felsökning

När Bohrbug har upptäckts är steg-för-steg-felsökning i IDE det bästa sättet att hitta roten. Utvecklaren placerar en brytpunkt vid ingången till funktionen och följer varje rad och observerar variablernas värden.

Skillnad mellan Bohrbug och andra buggtyper

Bohrbug skiljer sig från andra typer av programvarufel genom en nyckelegenskap — determinism. Låt oss titta på jämförelsen i en tabell.

BuggtypReproducerbarhetOrsakFelsökningssvårighet
Bohrbug100% vid samma indataLogiskt felLåg
MandelbugBeror på tillståndTrådrace, timingHög
SchrödinbugTills koden läses — 0%Medvetenhet om feletPsykologisk
HindenbugEngångsföreteelseFelkaskadExtrem
HeisenbugÄndras vid felsökningKompilatoroptimeringMedel

Bohrbug — den enda buggtypen som garanterat kan reproduceras under kontrollerade förhållanden. Detta gör det säkrast ur diagnostiksynpunkt, men inte mindre farligt för användaren.

Varför Bohrbug och Heisenbug förväxlas

Heisenbug — en bugg som försvinner vid försök till felsökning. Till skillnad från Bohrbug kan Heisenbug eventuellt inte reproduceras i debugger på grund av förändringar i kodens exekveringstiming. Nybörjarutvecklare blandar ofta ihop dessa två typer.

Exempel på Bohrbug i kod

Låt oss titta på ett verkligt exempel på Bohrbug i en webbutiksapplikation. Funktionen beräknar den totala orderkostnaden med hänsyn till skatt.

java
public double calculateTotal(double subtotal, double taxRate) {
    // Bug: utvecklaren ställde in taxRate som procent
    // men glömde dividera med 100
    return subtotal + (subtotal * taxRate);
}

Vid anrop av `calculateTotal(1000, 20)` returnerar funktionen 21000 istället för förväntade 1200. Detta är en klassisk Bohrbug: samma indata leder alltid till samma felaktiga resultat. Åtgärden är trivial — lägg till division med 100.

Korrigerad version

Efter korrigering behandlar funktionen skattesatsen korrekt:

java
public double calculateTotal(double subtotal, double taxRatePercent) {
    return subtotal + (subtotal * taxRatePercent / 100.0);
}

Detta exempel visar tydligt att Bohrbug kan orsakas av det enklaste matematiska felet. Det är just därför kodgranskning och enhetstester är de främsta verktygen för att förebygga sådana defekter.

Vanliga frågor

Hur skiljer sig Bohrbug från en vanlig bugg?

Bohrbug — är en variant av en vanlig bugg som kännetecknas av strikt determinism. Varje Bohrbug är en bugg, men inte varje bugg är en Bohrbug. En vanlig bugg kan reproduceras instabilt eller bero på yttre faktorer.

Varför kallas Bohrbug en stabil bugg?

Stabil kallas Bohrbug på grund av dess förmåga att reproduceras vid varje körning med samma indata. Denna egenskap gör den förutsägbar och bekväm för felsökning — till skillnad från Mandelbug eller Heisenbug.

Vem introducerade termen Bohrbug?

Termen Bohrbug introducerades av Jim Gray och Andreas Reuter 1993 i boken “Transaction Processing: Concepts and Techniques”. De klassificerade programvarufel efter grad av determinism med analogier från fysik och matematik.

Hur åtgärdar man snabbt en Bohrbug?

För snabb åtgärd av Bohrbug krävs: reproducera buggen i testmiljö, gå igenom koden steg för steg i debugger, hitta raden med felaktig logik och skriv ett enhetstest som kontrollerar korrekt beteende.

Kan en Bohrbug vara komplex?

Ja, Bohrbug kan vara hur komplext som helst logiskt sett. Determinism innebär inte enkelhet. Buggen kan involvera flera villkor och nästlade anrop, men om den reproduceras stabilt — är det en Bohrbug.

Sammanfattning

  • Bohrbug — ett deterministiskt programvarufel som reproduceras i 100% av fallen med samma indata.
  • Namnet kommer från fysikern Niels Bohr, vars atommodell bygger på strikta banor — en analogi med buggens förutsägbara beteende.
  • Huvudorsaker till Bohrbug: logiska fel, felaktiga gränsvillkor, skrivfel och felaktiga konstanter.
  • Diagnostik av Bohrbug är enklast bland alla buggtyper tack vare dess deterministiska karaktär.
  • Enhetstester och kodgranskning — de främsta verktygen för att förebygga Bohrbug under utvecklingsfasen.
  • Skillnad från Mandelbug: Bohrbug är stabil och förutsägbar, Mandelbug är kaotisk och beror på systemtillståndet.
  • Rekommendation: när du upptäcker en stabil bugg, börja alltid med att skriva ett test som reproducerar den.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också