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 — 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.
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 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 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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
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 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ípusa | Reprodukálhatóság | Ok | Hibakeresés nehézsége |
|---|---|---|---|
| Bohrbug | 100% azonos bemenetnél | Logikai hiba | Alacsony |
| Mandelbug | Állapottól függ | Szálverseny, időzítés | Magas |
| Schrödinbug | A kód elolvasásáig — 0% | A hiba tudatosulása | Pszichológiai |
| Hindenbug | Egyszeri | Meghibásodási kaszkád | Extrém |
| Heisenbug | Hibakereséskor megváltozik | Fordítóoptimalizálás | Kö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.
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.
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.
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.
A javítás után a függvény helyesen dolgozza fel az adókulcsot:
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
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.
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.
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.
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.
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ó
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.
Olvassa el is