Bohrbug: bu nədir, yaranma səbəbləri və düzəltmə üsulları

Müəllif: IT Sectr Dərc olunub: 2026-07-29 Oxuma vaxtı: 8 dəq

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 — stabil xəta, eyni giriş məlumatları ilə hər işə salındıqda təkrarlanır.
  • Adı Borun planetar atom modeli ilə bağlıdır — xəta orbitdəki elektron kimi proqnozlaşdırıla bilən davranır.
  • Diaqnostikası belə xətaların ən asandır: giriş şərtlərini müəyyənləşdirmək və debug etmək kifayətdir.
  • Səbəbləri məntiqi səhvlər, səhv sərhəd şərtləri və koddakı hərf səhvlərini əhatə edir.
  • Vahid testlər — Bohrbug-un proqramlaşdırma mərhələsində qarşısının alınmasının əsas vasitəsidir.

Bohrbug nədir?

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ə Reuterə görə tərif

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ının mənşəyi

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-un əsas xüsusiyyətləri

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.

Determinizm

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.

Təkrarlana bilmə

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.

Zamanda sabitlik

Ə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.

Bohrbug-un yaranmasının əsas səbəbləri

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.

Məntiqi səhvlər

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.

Sərhəd şərtləri səhvləri

`<=` 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.

Səhv sabitlər və sehrli rəqəmlə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.

Koddakı Bohrbug-u necə aşkar etməli

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.

java
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.

Vahid testləşdirmə əsas metod kimi

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.

Addım-addım debug

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-un digər xəta növlərindən fərqi

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əkrarlanmaSəbəbDebug çətinliyi
Bohrbug100% eyni girişdəMəntiqi səhvAşağı
MandelbugVəziyyətdən asılıdırİp yarışı, vaxtlamalarYüksək
SchrödinbugKodu oxuyana qədər — 0%Xətanı dərketməPsixoloji
HindenbugBir dəfəlikNasazlıq kaskadıEkstremal
HeisenbugDebug zamanı dəyişirKompilyator 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.

Niyə Bohrbug və Heisenbug-u qarışdırırlar

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.

Koddakı Bohrbug nümunəsi

İ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.

java
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əldilmiş variant

Düzəlişdən sonra funksiya vergi dərəcəsini düzgün emal edir:

java
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 adi xətadan nə ilə fərqlənir?

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.

Niyə Bohrbug stabil xəta adlanı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 terminini kim təqdim etdi?

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 necə tez düzəltmək olar?

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.

Bohrbug mürəkkəb ola bilərmi?

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ə

  • Bohrbug — eyni giriş məlumatları ilə 100% hallarda təkrarlanan determinist proqram xətası.
  • Adı fizik Nils Borun soyadından gəlir, onun atom modeli ciddi orbitlərə əsaslanır — xətanın proqnozlaşdırıla bilən davranışı ilə analogiya.
  • Əsas səbəbləri: məntiqi səhvlər, səhv sərhəd şərtləri, hərf səhvləri və səhv sabitlər.
  • Diaqnostikası bütün xəta növləri arasında ən asandır, determinist xarakter sayəsində.
  • Vahid testlər və kod icmalı — Bohrbug-un proqramlaşdırma mərhələsində qarşısının alınmasının əsas vasitələri.
  • Mandelbug-dan fərqi: Bohrbug stabil və proqnozlaşdırıla biləndir, Mandelbug xaotikdir və sistem vəziyyətindən asılıdır.
  • Tövsiyə: stabil xəta aşkar edildikdə, həmişə onu təkrarlayan test yazmaqla başlayın.

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.

Layihəni müzakirə et

Həm də oxuyun