Bohrbug: ce este, cauzele apariției și metode de remediere

Autor: IT Sectr Publicat: 2026-07-29 Timp de citire: 8 min

Bohrbug — este o eroare software care se comportă determinist: la aceleași date de intrare, se reproduce de fiecare dată fără excepție. Denumirea provine de la modelul atomic al lui Niels Bohr, unde electronul se mișcă pe o orbită strict definită — la fel de previzibil ca această eroare. Potrivit Wikipedia (2026), Bohrbug aparține clasei de defecte cel mai ușor de diagnosticat, deoarece nu necesită condiții speciale pentru reproducere.

Principalele puncte

  • Bohrbug — o eroare stabilă care se reproduce la fiecare rulare cu aceleași date de intrare.
  • Denumirea este legată de modelul planetar al atomului lui Bohr — eroarea se comportă previzibil, ca electronul pe orbită.
  • Diagnosticarea acestor erori este cea mai simplă: este suficient să fixați condițiile de intrare și să efectuați depanarea.
  • Cauzele includ erori logice, condiții de margine incorecte și greșeli de tastare în cod.
  • Testele unitare — instrumentul principal de prevenire a Bohrbug în faza de dezvoltare.

Ce este Bohrbug?

Bohrbug — este un tip de eroare software care se manifestă determinist: la aceleași date de intrare, duce întotdeauna la aceeași defecțiune. Termenul a fost introdus în circulația științifică de cercetătorii Jim Gray și Andreas Reuter în cartea „Transaction Processing: Concepts and Techniques” (1993).

Spre deosebire de Mandelbug, care își schimbă haotic comportamentul, Bohrbug este stabil: dezvoltatorul îl poate reproduce cu ochii închiși, furnizând sistemului aceiași parametri. Acest lucru îl face un candidat ideal pentru depanarea pas cu pas în IDE.

Bohrbug apare în toate etapele ciclului de viață al software-ului — de la dezvoltare până la exploatare. Adesea este depistat în faza de testare, deoarece inginerii QA execută scenarii repetitive care duc garantat la defecțiune.

Definiția conform lui Gray și Reuter

Conform clasificării lui Gray și Reuter, Bohrbug este un defect care îndeplinește trei condiții: un set fix de date de intrare, aceeași stare a sistemului și același rezultat al defecțiunii. Dacă cel puțin una dintre condiții este încălcată, eroarea încetează să mai fie „borowsk”.

Autorii subliniază că Bohrbug nu este neapărat o eroare simplă. Poate fi oricât de complex din punct de vedere logic, dar determinismul său îl diferențiază de toate celelalte tipuri de defecțiuni din clasificare.

Originea denumirii Bohrbug

Denumirea Bohrbug provine de la numele fizicianului danez Niels Bohr, creatorul modelului planetar al atomului. Analogia este simplă: așa cum electronul în modelul lui Bohr se mișcă pe o orbită strict fixată, această eroare repetă același comportament la fiecare rulare.

Gray și Reuter au ales această denumire pentru a contrasta erorile deterministe cu cele haotice, pe care le-au numit Mandelbug — în onoarea matematicianului Benoît Mandelbrot, fondatorul teoriei fractalilor și haosului.

Interesant este că în literatura în limba engleză, termenul Bohrbug este adesea folosit ca sinonim pentru „erore deterministă”, deși în mediul românesc este mai puțin răspândit. Majoritatea dezvoltatorilor numesc astfel de erori simplu „erori reproductibile”.

Caracteristicile cheie ale Bohrbug

Bohrbug posedă un set de proprietăți distinctive care permit identificarea sa printre alte tipuri de defecte software. Să analizăm fiecare caracteristică în detaliu.

Determinism

Caracteristica principală a Bohrbug — predictibilitatea totală. Dacă aplicația a căzut la anumite date de intrare pe mașina dezvoltatorului, va cădea exact la fel pe mașina testerului și în producție. Fără factori aleatori.

Reproductibilitate

Bohrbug se reproduce în 100% din încercări. Aceasta înseamnă că pentru depanarea sa nu sunt necesare instrumente speciale — este suficient un IDE obișnuit și un debugger. Dezvoltatorul plasează un punct de întrerupere, lansează aplicația, furnizează datele de intrare și parcurge codul pas cu pas.

Stabilitate în timp

Dacă Bohrbug nu este reparat, se va reproduce în orice versiune a programului până la momentul remedierii. Factorii temporali — încărcarea CPU, faza lunii, momentul zilei — nu influențează manifestarea sa.

Principalele cauze ale apariției Bohrbug

Cauzele apariției Bohrbug pot fi împărțite în mai multe categorii. Înțelegerea acestor categorii ajută la găsirea mai rapidă a rădăcinii problemei.

Erori logice

O condiție construită incorect — cea mai frecventă cauză a Bohrbug. De exemplu, dezvoltatorul a folosit operatorul `||` în loc de `&&`, ceea ce a dus la executarea incorectă a ramurii de cod la fiecare apel al funcției cu anumite argumente.

Erori de condiții de margine

Utilizarea operatorului `<=` în loc de `<` sau situația inversă — sursa clasică de Bohrbug. Dacă bucla trebuie să se execute de 10 ori, dar se execută de 11 din cauza unei condiții incorecte, aceasta este o eroare deterministă care se va manifesta la fiecare rulare.

Constante incorecte și numere magice

Constantele codificate rigid care nu corespund logicii de afaceri creează defecțiuni stabile. De exemplu, timeout-ul conexiunii la server este setat la 100 de milisecunde în loc de 5000 — conexiunea se va întrerupe la fiecare cerere.

Cum să depistăm Bohrbug în cod

Depistarea Bohrbug — cea mai simplă sarcină pentru un dezvoltator în comparație cu alte tipuri de erori. Caracterul determinist permite aplicarea metodelor standard de depanare.

java
public class DiscountCalculator {
    public double calculate(double amount, boolean isPremium) {
        // Eroare: utilizatorii premium primesc 5% reducere în loc de 10%
        if (isPremium) {
            return amount * 0.95;
        }
        return amount * 0.90;
    }
}

În acest exemplu, Bohrbug este evident: la apelul `calculate(1000, true)`, metoda returnează întotdeauna 950 în loc de 900. Cel mai simplu test unitar cu date de intrare fixe va dezvălui instantaneu problema.

Testarea unitară ca metodă principală

Pentru depistarea Bohrbug, testele unitare sunt cel mai eficient instrument. Este suficient să acoperiți funcția cu un set de teste cu diferite valori de margine, iar eroarea deterministă se va manifesta la prima execuție.

Depanarea pas cu pas

Odată ce Bohrbug este depistat, depanarea pas cu pas în IDE este cea mai bună modalitate de a găsi rădăcina. Dezvoltatorul plasează un punct de întrerupere la intrarea în funcție și parcurge fiecare linie, observând valorile variabilelor.

Diferența dintre Bohrbug și alte tipuri de erori

Bohrbug se diferențiază de alte tipuri de erori software printr-o trăsătură cheie — determinismul. Să examinăm comparația în tabel.

Tipul eroriiReproductibilitateCauzăComplexitatea depanării
Bohrbug100% la aceleași intrăriEroare logicăScăzută
MandelbugDepinde de stareCompetiția firelor, timingRidicată
SchrödinbugPână la citirea codului — 0%Conștientizarea eroriiPsihologică
HindenbugO singură datăCascada defecțiunilorExtremă
HeisenbugSe modifică la depanareOptimizarea compilatoruluiMedie

Bohrbug — singurul tip de eroare care poate fi reprodus garantat în condiții controlate. Acest lucru îl face cel mai sigur din punct de vedere al diagnosticării, dar nu mai puțin periculos pentru utilizator.

De ce se confundă Bohrbug și Heisenbug

Heisenbug — o eroare care dispare la încercarea de a o depana. Spre deosebire de Bohrbug, Heisenbug poate să nu se reproducă în debugger din cauza modificării timing-urilor de execuție a codului. Dezvoltatorii începători confundă adesea aceste două tipuri.

Exemplu de Bohrbug în cod

Să examinăm un exemplu real de Bohrbug într-o aplicație de magazin online. Funcția calculează costul total al comenzii cu luarea în considerare a taxei.

java
public double calculateTotal(double subtotal, double taxRate) {
    // Eroare: dezvoltatorul a setat taxRate ca procent
    // dar a uitat să împartă la 100
    return subtotal + (subtotal * taxRate);
}

La apelul `calculateTotal(1000, 20)` funcția va returna 21000 în loc de 1200 așteptați. Acesta este un Bohrbug clasic: aceleași date de intrare duc întotdeauna la același rezultat incorect. Remedierea este trivială — adăugarea împărțirii la 100.

Varianta corectată

După corectare, funcția procesează corect cota de taxă:

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

Acest exemplu arată clar că Bohrbug poate fi cauzat de cea mai simplă eroare matematică. Tocmai de aceea revizuirea codului și testele unitare sunt principalele instrumente de prevenire a unor astfel de defecte.

Întrebări frecvente

Cu ce se deosebește Bohrbug de o eroare obișnuită?

Bohrbug — este o variantă a erorii obișnuite care se caracterizează printr-un determinism strict. Orice Bohrbug este o eroare, dar nu orice eroare este Bohrbug. O eroare obișnuită se poate reproduce instabil sau poate depinde de factori externi.

De ce Bohrbug este numit eroare stabilă?

Stabilă Bohrbug este numită datorită capacității sale de a se reproduce la fiecare rulare cu aceleași date de intrare. Această proprietate o face previzibilă și convenabilă pentru depanare — spre deosebire de Mandelbug sau Heisenbug.

Cine a introdus termenul Bohrbug?

Termenul Bohrbug a fost introdus de Jim Gray și Andreas Reuter în 1993 în cartea „Transaction Processing: Concepts and Techniques”. Ei au clasificat erorile software după gradul de determinism, folosind analogii din fizică și matematică.

Cum să remediați rapid Bohrbug?

Pentru remedierea rapidă a Bohrbug este necesar: reproduceți eroarea în mediul de test, parcurgeți codul pas cu pas în debugger, găsiți linia cu logica incorectă și scrieți un test unitar care verifică comportamentul corect.

Poate Bohrbug să fie complex?

Da, Bohrbug poate fi oricât de complex din punct de vedere logic. Determinismul nu înseamnă simplitate. Eroarea poate implica multiple condiții și apeluri imbricate, dar dacă se reproduce stabil — este Bohrbug.

Concluzii

  • Bohrbug — o eroare software deterministă care se reproduce în 100% din cazuri la aceleași date de intrare.
  • Denumirea provine de la numele fizicianului Niels Bohr, al cărui model atomic se bazează pe orbite stricte — analogie cu comportamentul previzibil al erorii.
  • Cauzele principale ale Bohrbug: erori logice, condiții de margine incorecte, greșeli de tastare și constante incorecte.
  • Diagnosticarea Bohrbug este cea mai simplă dintre toate tipurile de erori datorită caracterului determinist.
  • Testele unitare și revizuirea codului — principalele instrumente de prevenire a Bohrbug în faza de dezvoltare.
  • Diferența față de Mandelbug: Bohrbug este stabil și previzibil, Mandelbug este haotic și depinde de starea sistemului.
  • Recomandare: la depistarea unei erori stabile, începeți întotdeauna cu scrierea unui test care o reproduce.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și