Bohrbug — bu determinist davranan proqram xətasıdır: eyni giriş məlumatları ilə hər dəfə istisnasız təkrarlanır. Adı Nils Borun atom modelindən gəlir, burada elektron ciddi müəyyən edilmiş orbitdə hərəkət edir — bu xəta da eyni dərəcədə proqnozlaşdırıla biləndir. Vikipediyaya (2026) görə, Bohrbug diaqnostikası ən asan olan qüsurlar sinfinə aiddir, çünki təkrarlanmaq üçün xüsusi şərtlər tələb etmir.
Əsas məqamlar
Bohrbug — bu determinist şəkildə özünü göstərən proqram xətası növüdür: eyni giriş məlumatları ilə həmişə eyni nasazlığa səbəb olur. Termin tədqiqatçılar Cim Qrey və Andreas Reuter tərəfindən “Transaction Processing: Concepts and Techniques” (1993) kitabında elmi dövriyyəyə daxil edilmişdir.
Mandelbug-dan fərqli olaraq, xaotik davranışını dəyişən, Bohrbug stabildir: proqramçı eyni parametrləri sistemə verərək onu gözü bağlı təkrarlaya bilər. Bu onu IDE-də addım-addım debug üçün ideal namizəd edir.
Bohrbug proqram təminatının həyat dövrünün bütün mərhələlərində — inkişafdan istismara qədər rast gəlinir. Çox vaxt test mərhələsində aşkar edilir, çünki QA-mühəndisləri nasazlığa zəmanət verən təkrarlanan ssenariləri yerinə yetirirlər.
Qrey və Reuterin təsnifatına görə, Bohrbug üç şərti ödəyən qüsurdur: sabit giriş məlumatları dəsti, eyni sistem vəziyyəti və eyni nasazlıq nəticəsi. Ən azı bir şərt pozulduqda, xəta “borovsk” olmaqdan çıxır.
Müəlliflər vurğulayırlar ki, Bohrbug mütləq sadə xəta deyil. Məntiqi cəhətdən istənilən qədər mürəkkəb ola bilər, lakin onun determinizmi onu təsnifatdakı bütün digər nasazlıq növlərindən fərqləndirir.
Bohrbug adı planetar atom modelinin yaradıcısı Danimarka fiziki Nils Borun soyadından gəlir. Bənzətmə sadədir: Bor modelində elektron necə ciddi şəkildə sabit orbitdə hərəkət edirsə, bu xəta da hər işə salındıqda eyni davranışı təkrarlayır.
Qrey və Reuter bu adı determinist xətaları xaotik olanlara qarşı qoymaq üçün seçdilər, onları Mandelbug adlandırdılar — fraktallar və xaos nəzəriyyəsinin banisi riyaziyyatçı Benua Mandelbrotun şərəfinə.
Maraqlıdır ki, ingilisdilli ədəbiyyatda Bohrbug termini tez-tez “determinist xəta” sinonimi kimi istifadə olunur, baxmayaraq ki, Azəri mühitində daha az yayılmışdır. Əksər proqramçılar belə xətaları sadəcə “təkrarlanan xətalarlar” adlandırırlar.
Bohrbug digər proqram qüsurları arasında onu müəyyən etməyə imkan verən fərqləndirici xüsusiyyətlər dəstinə malikdir. Hər bir xüsusiyyəti ətraflı nəzərdən keçirək.
Bohrbug-un əsas xüsusiyyəti — tam proqnozlaşdırıla bilmədir. Əgər tətbiq proqramçının maşınında müəyyən giriş məlumatlarında çökdüsə, test edənin maşınında və istehsal mühitində də eyni şəkildə çökəcək. Heç bir təsadüfi faktor yoxdur.
Bohrbug cəhdlərin 100%-də təkrarlanır. Bu o deməkdir ki, onun debug edilməsi üçün xüsusi alətlər tələb olunmur — adi IDE və debugger kifayətdir. Proqramçı dayanma nöqtəsi qoyur, tətbiqi işə salır, giriş məlumatlarını verir və kodu addım-addım izləyir.
Əgər Bohrbug düzəldilməzsə, proqramın hər bir versiyasında düzəliş anına qədər təkrarlanacaq. Vaxt faktorları — CPU yükü, ayın fazası, günün vaxtı — onun təzahürünə təsir göstərmir.
Səbəbləri Bohrbug-un yaranmasını bir neçə kateqoriyaya bölmək olar. Bu kateqoriyaları başa düşmək problemin kökünü daha tez tapmağa kömək edir.
Səhv qurulmuş şərt — Bohrbug-un ən tez-tez rast gəlinən səbəbidir. Məsələn, proqramçı `&&` əvəzinə `||` operatorundan istifadə etdi, bu da müəyyən arqumentlərlə funksiyanın hər çağırışında kod qolunun səhv yerinə yetirilməsinə səbəb oldu.
`<=` operatorunun `<` əvəzinə istifadəsi və ya əks vəziyyət — Bohrbug-un klassik mənbəyidir. Əgər dövrə 10 dəfə yerinə yetirilməli, lakin səhv şərtə görə 11 dəfə yerinə yetirilirsə, bu, hər işə salındıqda özünü göstərəcək determinist xətadır.
Biznes məntiqinə uyğun gəlməyən sərt kodlaşdırılmış sabitlər stabil nasazlıqlar yaradır. Məsələn, serverə qoşulma vaxtı 5000 əvəzinə 100 millisaniyəyə təyin edilib — hər sorğuda əlaqə kəsiləcək.
Bohrbug-un aşkar edilməsi digər xəta növləri ilə müqayisədə proqramçı üçün ən asan işdir. Determinist xarakter standart debug metodlarını tətbiq etməyə imkan verir.
public class DiscountCalculator {
public double calculate(double amount, boolean isPremium) {
// Xəta: premium istifadəçilər 10% əvəzinə 5% endirim alır
if (isPremium) {
return amount * 0.95;
}
return amount * 0.90;
}
}
Bu nümunədə Bohrbug aşkardır: `calculate(1000, true)` çağırışında metod həmişə 900 əvəzinə 950 qaytarır. Sabit giriş məlumatları olan ən sadə vahid test dərhal problemi üzə çıxaracaq.
Bohrbug-un aşkar edilməsi üçün vahid testlər ən təsirli vasitədir. Funksiyanı müxtəlif sərhəd dəyərləri olan testlər dəsti ilə əhatə etmək kifayətdir və determinist xəta ilk işə salınmada özünü göstərəcək.
Bohrbug aşkar edildikdə, IDE-də addım-addım debug kökü tapmağın ən yaxşı yoludur. Proqramçı funksiyanın girişində dayanma nöqtəsi qoyur və dəyişənlərin dəyərlərini izləyərək hər sətri gəzir.
Bohrbug digər proqram xətası növlərindən əsas xüsusiyyəti — determinizmlə fərqlənir. Müqayisəni cədvəldə nəzərdən keçirək.
| Xəta növü | Təkrarlanma | Səbəb | Debug çətinliyi |
|---|---|---|---|
| Bohrbug | 100% eyni girişdə | Məntiqi səhv | Aşağı |
| Mandelbug | Vəziyyətdən asılıdır | İp yarışı, vaxtlamalar | Yüksək |
| Schrödinbug | Kodu oxuyana qədər — 0% | Xətanı dərketmə | Psixoloji |
| Hindenbug | Bir dəfəlik | Nasazlıq kaskadı | Ekstremal |
| Heisenbug | Debug zamanı dəyişir | Kompilyator optimallaşdırması | Orta |
Bohrbug — nəzarət olunan şəraitdə zəmanətlə təkrarlana bilən yeganə xəta növüdür. Bu onu diaqnostika baxımından ən təhlükəsiz, lakin istifadəçi üçün daha az təhlükəli etmir.
Heisenbug — debug etməyə cəhd edərkən yox olan xətadır. Bohrbug-dan fərqli olaraq, Heisenbug kodun icra vaxtlamalarının dəyişməsi səbəbindən debuggerdə təkrarlanmaya bilər. Başlanğıc proqramçılar tez-tez bu iki növü qarışdırırlar.
İnternet mağazası tətbiqində real nümunəni nəzərdən keçirək. Funksiya vergi nəzərə alınmaqla sifarişin ümumi dəyərini hesablayır.
public double calculateTotal(double subtotal, double taxRate) {
// Xəta: proqramçı taxRate-i faiz kimi təyin etdi
// lakin 100-ə bölməyi unutdu
return subtotal + (subtotal * taxRate);
}
`calculateTotal(1000, 20)` çağırışında funksiya gözlənilən 1200 əvəzinə 21000 qaytaracaq. Bu klassik Bohrbug-dur: eyni giriş məlumatları həmişə eyni səhv nəticəyə gətirib çıxarır. Düzəliş sadədir — 100-ə bölmə əlavə etmək.
Düzəlişdən sonra funksiya vergi dərəcəsini düzgün emal edir:
public double calculateTotal(double subtotal, double taxRatePercent) {
return subtotal + (subtotal * taxRatePercent / 100.0);
}
Bu nümunə aydın göstərir ki, Bohrbug ən sadə riyazi səhv nəticəsində yarana bilər. Məhz buna görə kod icmalı və vahid testlər belə qüsurların profilaktikasının əsas vasitələridir.
Tez-tez verilən suallar
Bohrbug — bu ciddi deterministliklə fərqlənən adi xətanın bir növüdür. Hər Bohrbug xətadır, lakin hər xəta Bohrbug deyil. Adi xəta qeyri-sabit təkrarlana və ya xarici faktorlardan asılı ola bilər.
Stabil Bohrbug eyni giriş məlumatları ilə hər işə salındıqda təkrarlanma qabiliyyətinə görə belə adlanır. Bu xüsusiyyət onu Mandelbug və ya Heisenbug-dan fərqli olaraq proqnozlaşdırıla bilən və debug üçün əlverişli edir.
Bohrbug termini 1993-cü ildə Cim Qrey və Andreas Reuter tərəfindən “Transaction Processing: Concepts and Techniques” kitabında təqdim edilmişdir. Onlar proqram xətalarını determinizm dərəcəsinə görə təsnif edərək fizika və riyaziyyatdan analogiyalardan istifadə etdilər.
Bohrbug-u tez düzəltmək üçün lazımdır: xətanı test mühitində təkrarlamaq, debuggerdə kodu addım-addım izləmək, səhv məntiqli sətri tapmaq və düzgün davranışı yoxlayan vahid test yazmaq.
Bəli, Bohrbug məntiq baxımından istənilən qədər mürəkkəb ola bilər. Deterministlik sadəlik demək deyil. Xəta çoxsaylı şərtlər və iç-içə çağırışları əhatə edə bilər, lakin stabildirsə — bu Bohrbug-dur.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun