Bohrbug: co to je, příčiny výskytu a metody opravy

Autor: IT Sectr Publikováno: 2026-07-29 Doba čtení: 8 min

Bohrbug — je softwarová chyba, která se chová deterministicky: při stejných vstupních datech se pokaždé bez výjimky opakuje. Název pochází z atomového modelu Nielse Bohra, kde se elektron pohybuje po přesně definované dráze — stejně předvídatelně jako tato chyba. Podle Wikipedie (2026) patří Bohrbug do třídy nejsnáze diagnostikovatelných defektů, protože nevyžaduje speciální podmínky pro opakování.

Hlavní body

  • Bohrbug — stabilní chyba, která se opakuje při každém spuštění se stejnými vstupními daty.
  • Název souvisí s planetárním modelem atomu Bohra — chyba se chová předvídatelně, jako elektron na oběžné dráze.
  • Diagnostika takových chyb je nejjednodušší: stačí zaznamenat vstupní podmínky a provést ladění.
  • Příčiny zahrnují logické chyby, nesprávné okrajové podmínky a překlepy v kódu.
  • Unit testy — hlavní nástroj prevence Bohrbug ve fázi vývoje.

Co je Bohrbug?

Bohrbug — je typ softwarové chyby, která se projevuje deterministicky: při stejných vstupních datech vždy vede ke stejnému selhání. Termín zavedli do vědeckého oběhu výzkumníci Jim Gray a Andreas Reuter v knize „Transaction Processing: Concepts and Techniques” (1993).

Na rozdíl od Mandelbug, který chaoticky mění své chování, je Bohrbug stabilní: vývojář ho může reprodukovat se zavřenýma očima, když systému poskytne stejné parametry. To z něj dělá ideálního kandidáta pro krokové ladění v IDE.

Bohrbug se vyskytuje ve všech fázích životního cyklu softwaru — od vývoje po provoz. Často je objeven ve fázi testování, protože QA inženýři provádějí opakovatelné scénáře, které zaručeně vedou k selhání.

Definice podle Graye a Reutera

Podle klasifikace Graye a Reutera je Bohrbug defekt, který splňuje tři podmínky: pevná sada vstupních dat, stejný stav systému a stejný výsledek selhání. Pokud je porušena alespoň jedna podmínka, chyba přestává být „bohrovskou”.

Autoři zdůrazňují, že Bohrbug není nutně jednoduchá chyba. Může být logicky libovolně složitá, ale její determinismus ji odlišuje od všech ostatních typů selhání v klasifikaci.

Původ názvu Bohrbug

Název Bohrbug pochází od dánského fyzika Nielse Bohra, tvůrce planetárního modelu atomu. Analogie je jednoduchá: stejně jako se elektron v Bohrově modelu pohybuje po přesně stanovené dráze, tato chyba opakuje stejné chování při každém spuštění.

Gray a Reuter zvolili tento název, aby postavili deterministické chyby proti chaotickým, které nazvali Mandelbug — na počest matematika Benoîta Mandelbrota, zakladatele teorie fraktálů a chaosu.

Zajímavé je, že v anglicky psané literatuře se termín Bohrbug často používá jako synonymum pro „deterministickou chybu”, i když v českém prostředí je méně rozšířený. Většina vývojářů nazývá takové chyby jednoduše „reprodukovatelnými chybami”.

Klíčové vlastnosti Bohrbug

Bohrbug má soubor charakteristických vlastností, které umožňují jeho identifikaci mezi jinými typy softwarových defektů. Pojďme si každou vlastnost podrobně prohlédnout.

Determinismus

Hlavní rys Bohrbug — úplná předvídatelnost. Pokud aplikace spadla při určitých vstupních datech na počítači vývojáře, spadne úplně stejně na počítači testera a v produkci. Žádné náhodné faktory.

Reprodukovatelnost

Bohrbug se reprodukuje ve 100 % pokusů. To znamená, že k jeho ladění nejsou potřeba speciální nástroje — stačí běžné IDE a debugger. Vývojář nastaví bod přerušení, spustí aplikaci, poskytne vstupní data a prochází kód krok za krokem.

Stabilita v čase

Pokud Bohrbug není opraven, bude se reprodukovat v každé verzi programu až do okamžiku opravy. Časové faktory — zatížení CPU, fáze měsíce, denní doba — neovlivňují jeho projevení.

Hlavní příčiny výskytu Bohrbug

Příčiny vzniku Bohrbug lze rozdělit do několika kategorií. Porozumění těmto kategoriím pomáhá rychleji najít kořen problému.

Logické chyby

Nesprávně sestavená podmínka — nejčastější příčina Bohrbug. Například vývojář použil operátor `||` místo `&&`, což vedlo k nesprávnému provedení větve kódu při každém volání funkce s určitými argumenty.

Chyby okrajových podmínek

Použití operátoru `<=` místo `<` nebo opačná situace — klasický zdroj Bohrbug. Pokud se má smyčka provést 10krát, ale provede se 11krát kvůli nesprávné podmínce, jde o deterministickou chybu, která se projeví při každém spuštění.

Nesprávné konstanty a magická čísla

Pevně zakódované konstanty, které neodpovídají obchodní logice, vytvářejí stabilní selhání. Například časový limit připojení k serveru je nastaven na 100 milisekund místo 5000 — připojení bude přerušeno při každém požadavku.

Jak odhalit Bohrbug v kódu

Odhalení Bohrbug je pro vývojáře nejjednodušší úkol ve srovnání s jinými typy chyb. Deterministický charakter umožňuje použití standardních metod ladění.

java
public class DiscountCalculator {
    public double calculate(double amount, boolean isPremium) {
        // Chyba: prémioví uživatelé dostávají 5% slevu místo 10%
        if (isPremium) {
            return amount * 0.95;
        }
        return amount * 0.90;
    }
}

V tomto příkladu je Bohrbug zřejmý: při volání `calculate(1000, true)` metoda vždy vrací 950 místo 900. Nejjednodušší unit test s pevnými vstupními daty okamžitě odhalí problém.

Unit testování jako hlavní metoda

Pro odhalení Bohrbug jsou unit testy nejúčinnějším nástrojem. Stačí pokrýt funkci sadou testů s různými okrajovými hodnotami a deterministická chyba se projeví při prvním spuštění.

Krokové ladění

Jakmile je Bohrbug odhalen, krokové ladění v IDE je nejlepší způsob, jak najít kořen. Vývojář nastaví bod přerušení na vstupu funkce a prochází každý řádek, přičemž sleduje hodnoty proměnných.

Rozdíl mezi Bohrbug a jinými typy chyb

Bohrbug se liší od jiných typů softwarových chyb klíčovým rysem — determinismem. Podívejme se na srovnání v tabulce.

Typ chybyReprodukovatelnostPříčinaObtížnost ladění
Bohrbug100 % při stejných vstupechLogická chybaNízká
MandelbugZávisí na stavuZávitová soutěž, načasováníVysoká
SchrödinbugDo přečtení kódu — 0 %Uvědomění chybyPsychologická
HindenbugJednorázověKaskáda selháníExtrémní
HeisenbugMění se při laděníOptimalizace kompilátoruStřední

Bohrbug — jediný typ chyby, který lze zaručeně reprodukovat v kontrolovaných podmínkách. To ho činí nejbezpečnějším z hlediska diagnostiky, ale ne méně nebezpečným pro uživatele.

Proč se zaměňuje Bohrbug a Heisenbug

Heisenbug — chyba, která zmizí při pokusu o její odladění. Na rozdíl od Bohrbug se Heisenbug nemusí v debuggeru reprodukovat kvůli změně načasování provádění kódu. Začínající vývojáři si tyto dva typy často pletou.

Příklad Bohrbug v kódu

Podívejme se na reálný příklad Bohrbug v aplikaci internetového obchodu. Funkce vypočítá celkovou cenu objednávky s ohledem na daň.

java
public double calculateTotal(double subtotal, double taxRate) {
    // Chyba: vývojář nastavil taxRate jako procento
    // ale zapomněl vydělit 100
    return subtotal + (subtotal * taxRate);
}

Při volání `calculateTotal(1000, 20)` funkce vrátí 21000 místo očekávaných 1200. Toto je klasický Bohrbug: stejná vstupní data vždy vedou ke stejnému nesprávnému výsledku. Oprava je triviální — přidat dělení 100.

Opravená verze

Po opravě funkce správně zpracovává daňovou sazbu:

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

Tento příklad jasně ukazuje, že Bohrbug může být způsoben nejjednodušší matematickou chybou. Právě proto jsou code review a unit testy hlavními nástroji prevence takových defektů.

Často kladené otázky

Čím se liší Bohrbug od běžné chyby?

Bohrbug — je varianta běžné chyby, která se vyznačuje přísným determinismem. Každý Bohrbug je chybou, ale ne každá chyba je Bohrbug. Běžná chyba se může reprodukovat nestabilně nebo záviset na vnějších faktorech.

Proč se Bohrbug nazývá stabilní chybou?

Stabilní se Bohrbug nazývá kvůli své schopnosti reprodukovat se při každém spuštění se stejnými vstupními daty. Tato vlastnost ho činí předvídatelným a vhodným pro ladění — na rozdíl od Mandelbug nebo Heisenbug.

Kdo zavedl termín Bohrbug?

Termín Bohrbug zavedli Jim Gray a Andreas Reuter v roce 1993 v knize „Transaction Processing: Concepts and Techniques”. Klasifikovali softwarové chyby podle stupně determinismu s využitím analogií z fyziky a matematiky.

Jak rychle opravit Bohrbug?

Pro rychlou opravu Bohrbug je třeba: reprodukovat chybu v testovacím prostředí, projít kód krok za krokem v debuggeru, najít řádek s nesprávnou logikou a napsat unit test, který ověřuje správné chování.

Může být Bohrbug složitý?

Ano, Bohrbug může být logicky libovolně složitý. Deterministický charakter neznamená jednoduchost. Chyba může zahrnovat mnoho podmínek a vnořených volání, ale pokud se stabilně reprodukuje — jde o Bohrbug.

Shrnutí

  • Bohrbug — deterministická softwarová chyba, která se reprodukuje ve 100 % případů při stejných vstupních datech.
  • Název pochází od fyzika Nielse Bohra, jehož atomový model je založen na přísných drahách — analogie s předvídatelným chováním chyby.
  • Hlavní příčiny Bohrbug: logické chyby, nesprávné okrajové podmínky, překlepy a nesprávné konstanty.
  • Diagnostika Bohrbug je nejjednodušší ze všech typů chyb díky deterministickému charakteru.
  • Unit testy a code review — hlavní nástroje prevence Bohrbug ve fázi vývoje.
  • Rozdíl od Mandelbug: Bohrbug je stabilní a předvídatelný, Mandelbug je chaotický a závisí na stavu systému.
  • Doporučení: při odhalení stabilní chyby vždy začněte napsáním testu, který ji reprodukuje.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také