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 — 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.
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.
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”.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 erorii | Reproductibilitate | Cauză | Complexitatea depanării |
|---|---|---|---|
| Bohrbug | 100% la aceleași intrări | Eroare logică | Scăzută |
| Mandelbug | Depinde de stare | Competiția firelor, timing | Ridicată |
| Schrödinbug | Până la citirea codului — 0% | Conștientizarea erorii | Psihologică |
| Hindenbug | O singură dată | Cascada defecțiunilor | Extremă |
| Heisenbug | Se modifică la depanare | Optimizarea compilatorului | Medie |
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.
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.
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.
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.
După corectare, funcția procesează corect cota de taxă:
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
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.
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.
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ă.
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.
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
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.
Citiți și