Bohrbug — bu deterministik xatti-harakatga ega dasturiy xatodir: bir xil kirish ma'lumotlari bilan u har safar istisnosiz takrorlanadi. Nom Nils Borning atom modelidan kelib chiqqan bo'lib, unda elektron qat'iy belgilangan orbita bo'ylab harakatlanadi — xuddi shu xato kabi bashorat qilish mumkin. Vikipediya (2026) ma'lumotlariga ko'ra, Bohrbug tashxisi eng oson bo'lgan nuqsonlar sinfiga kiradi, chunki takrorlash uchun maxsus shartlar talab qilmaydi.
Asosiy ma'lumotlar
Bohrbug — bu deterministik tarzda namoyon bo'ladigan dasturiy xato turi: bir xil kirish ma'lumotlari bilan har doim bir xil nosozlikka olib keladi. Atama tadqiqotchilar Jim Grey va Andreas Reuter tomonidan “Transaction Processing: Concepts and Techniques” (1993) kitobida ilmiy muomalaga kiritilgan.
Mandelbug dan farqli o'laroq, xaotik xatti-harakatini o'zgartiradigan, Bohrbug barqaror: dasturchi uni ko'zini yumib, tizimga bir xil parametrlarni berib takrorlashi mumkin. Bu uni IDE da bosqichma-bosqich tuzatish uchun ideal nomzod qiladi.
Bohrbug dasturiy ta'minot hayotiy tsiklining barcha bosqichlarida — ishlab chiqishdan foydalanishgacha uchraydi. Ko'pincha test bosqichida aniqlanadi, chunki QA muhandislari nosozlikka kafolatli olib keladigan takrorlanuvchi stsenariylarni bajaradilar.
Grey va Reuterning tasnifiga ko'ra, Bohrbug uchta shartni qondiradigan nuqsondir: kirish ma'lumotlarining qat'iy to'plami, bir xil tizim holati va bir xil nosozlik natijasi. Agar kamida bitta shart buzilgan bo'lsa, xato “borovsk” bo'lishdan to'xtaydi.
Mualliflar ta'kidlaydilarki, Bohrbug majburiy ravishda oddiy xato emas. Mantiqan istalgancha murakkab bo'lishi mumkin, ammo uning determinizmi uni tasnifdagi barcha boshqa nosozlik turlaridan ajratib turadi.
Bohrbug nomi planetar atom modelining yaratuvchisi Daniya fizigi Nils Borning familiyasidan kelib chiqqan. O'xshatish oddiy: Bor modelidagi elektron qanday qat'iy belgilangan orbita bo'ylab harakatlansa, bu xato ham har bir ishga tushirishda bir xil xatti-harakatni takrorlaydi.
Grey va Reuter bu nomni deterministik xatolarni xaotik bo'lganlarga qarama-qarshi qo'yish uchun tanladilar, ularni Mandelbug deb atadilar — fraktallar va xaos nazariyasi asoschisi matematik Benua Mandelbrot sharafiga.
Qizig'i shundaki, ingliz tilidagi adabiyotda Bohrbug atamasi ko'pincha “deterministik xato” sinonimi sifatida ishlatiladi, garchi o'zbek tilidagi muhitda u kamroq tarqalgan. Aksariyat dasturchilar bunday xatolarni oddiygina “takrorlanuvchi xatolar” deb atashadi.
Bohrbug boshqa dasturiy nuqsonlar orasida uni aniqlash imkonini beradigan farqlovchi xususiyatlar to'plamiga ega. Har bir xususiyatni batafsil ko'rib chiqamiz.
Bohrbug ning asosiy xususiyati — to'liq bashorat qilinadiganlik. Agar ilova dasturchining mashinasida ma'lum kirish ma'lumotlarida ishlamay qolsa, tester mashinasida va ishlab chiqarish muhitida ham xuddi shunday ishlamay qoladi. Hech qanday tasodifiy omillar yo'q.
Bohrbug urinishlarning 100 foizida takrorlanadi. Bu uning tuzatilishi uchun maxsus vositalar kerak emasligini anglatadi — oddiy IDE va tuzatuvchi (debugger) yetarli. Dasturchi to'xtash nuqtasini qo'yadi, ilovani ishga tushiradi, kirish ma'lumotlarini beradi va kodni bosqichma-bosqich ko'rib chiqadi.
Agar Bohrbug tuzatilmasa, u dasturning har bir versiyasida tuzatish vaqtigacha takrorlanadi. Vaqt omillari — CPU yuklamasi, oy fazasi, kun vaqti — uning namoyon bo'lishiga ta'sir qilmaydi.
Sabablari Bohrbugning paydo bo'lishini bir necha toifalarga bo'lish mumkin. Ushbu toifalarni tushunish muammoning ildizini tezroq topishga yordam beradi.
Noto'g'ri qurilgan shart — Bohrbugning eng keng tarqalgan sababi. Masalan, dasturchi `&&` o'rniga `||` operatoridan foydalandi, bu funksiyani ma'lum argumentlar bilan har chaqirishda kod tarmog'ining noto'g'ri bajarilishiga olib keldi.
`<=` operatorining `<` o'rniga ishlatilishi yoki teskari holat — Bohrbugning klassik manbai. Agar sikl 10 marta bajarilishi kerak bo'lsa, lekin noto'g'ri shart tufayli 11 marta bajarilsa, bu har bir ishga tushirishda namoyon bo'ladigan deterministik xatodir.
Biznes mantiqiga mos kelmaydigan qattiq kodlangan konstantalar barqaror nosozliklarni yaratadi. Masalan, serverga ulanish vaqti 5000 o'rniga 100 millisekundga o'rnatilgan — ulanish har bir so'rovda uziladi.
Bohrbug ni aniqlash boshqa xato turlariga nisbatan dasturchi uchun eng oson vazifadir. Deterministik xarakter standart tuzatish usullarini qo'llash imkonini beradi.
public class DiscountCalculator {
public double calculate(double amount, boolean isPremium) {
// Xato: premium foydalanuvchilar 10% o'rniga 5% chegirma oladi
if (isPremium) {
return amount * 0.95;
}
return amount * 0.90;
}
}
Ushbu misolda Bohrbug aniq: `calculate(1000, true)` chaqiruvida metod har doim 900 o'rniga 950 qaytaradi. Barqaror kirish ma'lumotlari bilan eng oddiy unit test darhol muammoni aniqlaydi.
Bohrbug ni aniqlash uchun unit testlar eng samarali vositadir. Funksiyani turli chegara qiymatlari bilan testlar to'plami bilan qoplash kifoya va deterministik xato birinchi ishga tushirishda namoyon bo'ladi.
Bohrbug aniqlanganda, IDE da bosqichma-bosqich tuzatish ildizni topishning eng yaxshi usulidir. Dasturchi funksiyaga kirishda to'xtash nuqtasini qo'yadi va o'zgaruvchilar qiymatlarini kuzatib, har bir qatorni ko'rib chiqadi.
Bohrbug boshqa dasturiy xato turlaridan asosiy xususiyati — determinizm bilan farqlanadi. Taqqoslashni jadvalda ko'rib chiqamiz.
| Xato turi | Takrorlanish | Sabab | Tuzatish murakkabligi |
|---|---|---|---|
| Bohrbug | 100% bir xil kirishda | Mantiqiy xato | Past |
| Mandelbug | Holatga bog'liq | Ip poygasi, vaqtlash | Yuqori |
| Schrödinbug | Kodni o'qiguncha — 0% | Xatoni anglash | Psixologik |
| Hindenbug | Bir martalik | Nosozliklar kaskadi | Ekstremal |
| Heisenbug | Tuzatishda o'zgaradi | Kompilyator optimallashuvi | O'rta |
Bohrbug — nazorat qilinadigan sharoitlarda kafolatli takrorlanishi mumkin bo'lgan yagona xato turidir. Bu uni tashxis nuqtai nazaridan eng xavfsiz, ammo foydalanuvchi uchun kamroq xavfli qilmaydi.
Heisenbug — tuzatishga urinishda yo'qoladigan xato. Bohrbugdan farqli o'laroq, Heisenbug kodning bajarilish vaqtining o'zgarishi tufayli tuzatuvchida takrorlanmasligi mumkin. Boshlang'ich dasturchilar ko'pincha bu ikki turni chalkashtiradilar.
Internet-do'kon ilovasidagi real misolni ko'rib chiqamiz. Funksiya soliqni hisobga olgan holda buyurtmaning umumiy qiymatini hisoblaydi.
public double calculateTotal(double subtotal, double taxRate) {
// Xato: dasturchi taxRate ni foiz sifatida o'rnatdi
// lekin 100 ga bo'lishni unutdi
return subtotal + (subtotal * taxRate);
}
`calculateTotal(1000, 20)` chaqiruvida funksiya kutilgan 1200 o'rniga 21000 qaytaradi. Bu klassik Bohrbug: bir xil kirish ma'lumotlari har doim bir xil noto'g'ri natijaga olib keladi. Tuzatish oddiy — 100 ga bo'lishni qo'shish.
Tuzatishdan so'ng funksiya soliq stavkasini to'g'ri qayta ishlaydi:
public double calculateTotal(double subtotal, double taxRatePercent) {
return subtotal + (subtotal * taxRatePercent / 100.0);
}
Bu misol Bohrbug eng oddiy matematik xato tufayli yuzaga kelishi mumkinligini aniq ko'rsatadi. Aynan shuning uchun kod ko'rib chiqishi va unit testlar bunday nuqsonlarning oldini olishning asosiy vositalaridir.
Tez-tez beriladigan savollar
Bohrbug — bu qat'iy determinizm bilan ajralib turadigan oddiy xato turidir. Har bir Bohrbug xatodir, lekin har bir xato Bohrbug emas. Oddiy xato beqaror takrorlanishi yoki tashqi omillarga bog'liq bo'lishi mumkin.
Barqaror Bohrbug bir xil kirish ma'lumotlari bilan har bir ishga tushirishda takrorlanish qobiliyati tufayli shunday ataladi. Bu xususiyat uni Mandelbug yoki Heisenbugdan farqli o'laroq bashorat qilinadigan va tuzatish uchun qulay qiladi.
Bohrbug atamasi 1993 yilda Jim Grey va Andreas Reuter tomonidan “Transaction Processing: Concepts and Techniques” kitobida kiritilgan. Ular dasturiy xatolarni determinizm darajasiga ko'ra tasniflab, fizika va matematikadan o'xshatishlardan foydalanganlar.
Bohrbug ni tez tuzatish uchun kerak: xatoni test muhitida takrorlash, tuzatuvchida kodni bosqichma-bosqich ko'rib chiqish, noto'g'ri mantiqli qatorni topish va to'g'ri xatti-harakatni tekshiruvchi unit test yozish.
Ha, Bohrbug mantiqan istalgancha murakkab bo'lishi mumkin. Determinizm soddalikni anglatmaydi. Xato ko'plab shartlar va ichma-ich chaqiruvlarni o'z ichiga olishi mumkin, ammo barqaror takrorlansa — bu Bohrbug.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.
Shuningdek o'qing