Bohrbug: mi ez, előfordulásának okai és javítási módszerei

Szerző: IT Sectr Megjelenés: 2026-07-29 Olvasási idő: 8 perc

Bohrbug — egy olyan programozási hiba, amely determinisztikusan viselkedik: azonos bemeneti adatok mellett minden alkalommal kivétel nélkül megismétlődik. A név Niels Bohr atommodelljéből származik, ahol az elektron szigorúan meghatározott pályán mozog — épp olyan kiszámíthatóan, mint ez a hiba. A Wikipédia (2026) szerint a Bohrbug a legkönnyebben diagnosztizálható hibák osztályába tartozik, mivel nem igényel különleges feltételeket a megismétlődéshez.

Főbb pontok

  • Bohrbug — stabil hiba, amely minden egyes futtatáskor megismétlődik azonos bemeneti adatok mellett.
  • Név Bohr bolygómodelljéhez kapcsolódik — a hiba kiszámíthatóan viselkedik, mint az elektron a pályán.
  • Diagnosztika az ilyen hibáké a legegyszerűbb: elég rögzíteni a bemeneti feltételeket és elvégezni a hibakeresést.
  • Okai magukban foglalják a logikai hibákat, helytelen határfeltételeket és gépelési hibákat a kódban.
  • Egységtesztek — a Bohrbug megelőzésének fő eszköze a fejlesztési szakaszban.

Mi az a Bohrbug?

Bohrbug — egy olyan programozási hiba, amely determinisztikusan nyilvánul meg: azonos bemeneti adatok mellett mindig ugyanahhoz a meghibásodáshoz vezet. A kifejezést Jim Gray és Andreas Reuter kutatók vezették be a tudományos köztudatba a „Transaction Processing: Concepts and Techniques” (1993) című könyvben.

Ellentétben a Mandelbug-gal, amely kaotikusan változtatja viselkedését, a Bohrbug stabil: a fejlesztő becsukott szemmel is képes reprodukálni, ha ugyanazokat a paramétereket adja a rendszernek. Ez ideális jelöltté teszi a lépésről lépésre történő hibakereséshez az IDE-ben.

A Bohrbug a szoftver életciklusának minden szakaszában előfordul — a fejlesztéstől az üzemeltetésig. Gyakran a tesztelési fázisban fedezik fel, mivel a QA-mérnökök ismétlődő forgatókönyveket hajtanak végre, amelyek garantáltan meghibásodáshoz vezetnek.

Meghatározás Gray és Reuter szerint

Gray és Reuter osztályozása szerint a Bohrbug olyan hiba, amely három feltételnek felel meg: rögzített bemeneti adatok, azonos rendszerállapot és azonos meghibásodási eredmény. Ha legalább egy feltétel sérül, a hiba már nem „bohr” jellegű.

A szerzők hangsúlyozzák, hogy a Bohrbug nem feltétlenül egyszerű hiba. Logikailag tetszőlegesen összetett lehet, de determinizmusa megkülönbözteti az összes többi meghibásodási típustól az osztályozásban.

A Bohrbug név eredete

A Bohrbug név a dán fizikus, Niels Bohr, a bolygómodell megalkotójának nevéből származik. Az analógia egyszerű: ahogy az elektron Bohr modelljében szigorúan rögzített pályán mozog, úgy ez a hiba is ugyanazt a viselkedést ismétli minden egyes futtatáskor.

Gray és Reuter azért választották ezt a nevet, hogy szembeállítsák a determinisztikus hibákat a kaotikusakkal, amelyeket Mandelbug-nak neveztek el — Benoît Mandelbrot matematikus, a fraktálelmélet és a káosz elméletének megalapítója tiszteletére.

Érdekes, hogy az angol nyelvű szakirodalomban a Bohrbug kifejezést gyakran használják a „determinisztikus hiba” szinonimájaként, bár a magyar nyelvű környezetben kevésbé elterjedt. A legtöbb fejlesztő egyszerűen „reprodukálható hibáknak” nevezi az ilyen hibákat.

A Bohrbug fő jellemzői

A Bohrbug olyan megkülönböztető tulajdonságokkal rendelkezik, amelyek lehetővé teszik azonosítását más szoftverhibák között. Vizsgáljuk meg részletesen az egyes jellemzőket.

Determinizmus

A Bohrbug fő jellemzője — teljes kiszámíthatóság. Ha az alkalmazás bizonyos bemeneti adatok mellett leállt a fejlesztő gépén, pontosan ugyanúgy le fog állni a tesztelő gépén és éles környezetben is. Nincsenek véletlenszerű tényezők.

Reprodukálhatóság

A Bohrbug a próbálkozások 100%-ában reprodukálható. Ez azt jelenti, hogy a hibakereséshez nincs szükség különleges eszközökre — egy szokásos IDE és hibakereső is elegendő. A fejlesztő megszakítási pontot helyez el, elindítja az alkalmazást, megadja a bemeneti adatokat, és lépésről lépésre követi a kódot.

Időbeli stabilitás

Ha a Bohrbug-ot nem javítják ki, a program minden verziójában reprodukálódni fog a javítás pillanatáig. Időbeli tényezők — CPU-terhelés, holdfázis, napszak — nem befolyásolják a megjelenését.

A Bohrbug megjelenésének fő okai

A Bohrbug okai több kategóriába sorolhatók. E kategóriák megértése segít gyorsabban megtalálni a probléma gyökerét.

Logikai hibák

Helytelenül felépített feltétel — a Bohrbug leggyakoribb oka. Például a fejlesztő a `||` operátort használta a `&&` helyett, ami a kódág helytelen végrehajtásához vezetett a függvény minden egyes, bizonyos argumentumokkal történő meghívásakor.

Határfeltétel-hibák

A `<=` operátor használata a `<` helyett, vagy fordított helyzet — a Bohrbug klasszikus forrása. Ha a ciklusnak 10-szer kell lefutnia, de a helytelen feltétel miatt 11-szer fut le, ez egy determinisztikus hiba, amely minden egyes futtatáskor jelentkezni fog.

Helytelen konstansok és mágikus számok

A keményen kódolt konstansok, amelyek nem felelnek meg az üzleti logikának, stabil meghibásodásokat okoznak. Például a szerverhez való csatlakozás időtúllépése 100 ezredmásodpercre van állítva 5000 helyett — a kapcsolat minden egyes kérésnél megszakad.

Hogyan észleljük a Bohrbug-ot a kódban

A Bohrbug észlelése a fejlesztő számára a legegyszerűbb feladat más hibafajtákhoz képest. A determinisztikus jelleg lehetővé teszi a szabványos hibakeresési módszerek alkalmazását.

java
public class DiscountCalculator {
    public double calculate(double amount, boolean isPremium) {
        // Hiba: prémium felhasználók 5% kedvezményt kapnak 10% helyett
        if (isPremium) {
            return amount * 0.95;
        }
        return amount * 0.90;
    }
}

Ebben a példában a Bohrbug nyilvánvaló: a `calculate(1000, true)` meghívásakor a metódus mindig 950-et ad vissza 900 helyett. A legegyszerűbb egységteszt rögzített bemeneti adatokkal azonnal felfedi a problémát.

Egységtesztelés mint fő módszer

A Bohrbug észleléséhez az egységtesztek a leghatékonyabb eszközök. Elég lefedni a függvényt különböző határértékeket tartalmazó tesztekkel, és a determinisztikus hiba az első futtatáskor megjelenik.

Lépésről lépésre történő hibakeresés

Amikor a Bohrbug-ot észlelték, a lépésről lépésre történő hibakeresés az IDE-ben a legjobb módja a gyökér megtalálásának. A fejlesztő megszakítási pontot helyez el a függvény bejáratánál, és végigköveti az egyes sorokat, figyelve a változók értékeit.

A Bohrbug és más hibafajták közötti különbség

A Bohrbug egy kulcsfontosságú jellemzőben — a determinizmusban — különbözik más szoftverhibáktól. Tekintsük meg az összehasonlítást a táblázatban.

Hiba típusaReprodukálhatóságOkHibakeresés nehézsége
Bohrbug100% azonos bemenetnélLogikai hibaAlacsony
MandelbugÁllapottól függSzálverseny, időzítésMagas
SchrödinbugA kód elolvasásáig — 0%A hiba tudatosulásaPszichológiai
HindenbugEgyszeriMeghibásodási kaszkádExtrém
HeisenbugHibakereséskor megváltozikFordítóoptimalizálásKözepes

Bohrbug — az egyetlen hibafajta, amely ellenőrzött körülmények között garantáltan reprodukálható. Ez teszi a legbiztonságosabbá diagnosztikai szempontból, de nem kevésbé veszélyessé a felhasználó számára.

Miért keverik össze a Bohrbug-ot és a Heisenbug-ot

Heisenbug — olyan hiba, amely eltűnik, amikor megpróbálják hibakereséssel kivizsgálni. Ellentétben a Bohrbug-gal, a Heisenbug előfordulhat, hogy nem reprodukálható a hibakeresőben a kód végrehajtási időzítésének megváltozása miatt. A kezdő fejlesztők gyakran összekeverik ezt a két típust.

Példa Bohrbug-ra a kódban

Tekintsünk egy valós példát a Bohrbug-ra egy online áruház alkalmazásában. A függvény kiszámítja a rendelés teljes költségét az adó figyelembevételével.

java
public double calculateTotal(double subtotal, double taxRate) {
    // Hiba: a fejlesztő a taxRate-et százalékként állította be
    // de elfelejtette osztani 100-zal
    return subtotal + (subtotal * taxRate);
}

A `calculateTotal(1000, 20)` meghívásakor a függvény 21000-et ad vissza a várt 1200 helyett. Ez egy klasszikus Bohrbug: ugyanazok a bemeneti adatok mindig ugyanarra a helytelen eredményre vezetnek. A javítás triviális — osztás 100-zal hozzáadása.

Javított változat

A javítás után a függvény helyesen dolgozza fel az adókulcsot:

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

Ez a példa világosan mutatja, hogy a Bohrbug-ot a legegyszerűbb matematikai hiba is okozhatja. Éppen ezért a kódellenőrzés és az egységtesztek az ilyen hibák megelőzésének fő eszközei.

Gyakran Ismételt Kérdések

Miben különbözik a Bohrbug a szokásos hibától?

Bohrbug — a szokásos hiba egy olyan változata, amelyet szigorú determinizmus jellemez. Minden Bohrbug hiba, de nem minden hiba Bohrbug. A szokásos hiba instabilan reprodukálódhat, vagy külső tényezőktől függhet.

Miért nevezik a Bohrbug-ot stabil hibának?

Stabilnak nevezik a Bohrbug-ot, mert minden egyes futtatáskor képes reprodukálódni azonos bemeneti adatok mellett. Ez a tulajdonság teszi kiszámíthatóvá és kényelmessé a hibakeresés szempontjából — ellentétben a Mandelbug-gal vagy a Heisenbug-gal.

Ki vezette be a Bohrbug kifejezést?

A Bohrbug kifejezést Jim Gray és Andreas Reuter vezette be 1993-ban a „Transaction Processing: Concepts and Techniques” című könyvben. A szoftverhibákat a determinizmus mértéke szerint osztályozták, fizikai és matematikai analógiákat használva.

Hogyan lehet gyorsan kijavítani egy Bohrbug-ot?

A Bohrbug gyors kijavításához: reprodukálni kell a hibát a tesztkörnyezetben, lépésről lépésre végighaladni a kódon a hibakeresőben, megtalálni a helytelen logikájú sort, és megírni az egységtesztet, amely ellenőrzi a helyes viselkedést.

Lehet-e összetett egy Bohrbug?

Igen, a Bohrbug logikailag tetszőlegesen összetett lehet. A determinizmus nem jelent egyszerűséget. A hiba több feltételt és egymásba ágyazott hívásokat is tartalmazhat, de ha stabilan reprodukálódik — az Bohrbug.

Összefoglaló

  • Bohrbug — determinisztikus szoftverhiba, amely az esetek 100%-ában reprodukálódik azonos bemeneti adatok mellett.
  • Név Niels Bohr fizikus nevétől származik, akinek atommodellje szigorú pályákon alapul — analógia a hiba kiszámítható viselkedésével.
  • Fő okai: logikai hibák, helytelen határfeltételek, gépelési hibák és helytelen konstansok.
  • Diagnosztikája a legkönnyebb az összes hibafajta között a determinisztikus jelleg miatt.
  • Egységtesztek és kódellenőrzés — a Bohrbug megelőzésének fő eszközei a fejlesztési szakaszban.
  • Különbség a Mandelbug-tól: a Bohrbug stabil és kiszámítható, a Mandelbug kaotikus és a rendszer állapotától függ.
  • Ajánlás: stabil hiba észlelésekor mindig kezdje a hibát reprodukáló teszt megírásával.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is