Bohrbug: шта је то, узроци појаве и методе исправљања

Аутор: IT Sectr Објављено: 2026-07-29 Време читања: 8 мин

Bohrbug — је програмска грешка која се понаша детерминистички: при истим улазним подацима понавља се сваки пут без изузетка. Назив потиче од атомског модела Нилса Бора, где се електрон креће по строго одређеној орбити — једнако предвидљиво као и ова грешка. Према Википедији (2026), Bohrbug спада у класу најједноставнијих за дијагностику дефеката, јер не захтева посебне услове за понављање.

Главно

  • Bohrbug — стабилна грешка која се понавља при сваком покретању са истим улазним подацима.
  • Назив је повезан са планетарним моделом атома Бора — грешка се понаша предвидљиво, као електрон на орбити.
  • Дијагностика оваквих грешака је најлакша: довољно је фиксирати улазне услове и извршити отклањање грешака.
  • Узроци укључују логичке грешке, нетачне граничне услове и штампарске грешке у коду.
  • Unit тестови — основни инструмент спречавања Bohrbug у фази развоја.

Шта је Bohrbug?

Bohrbug — је врста програмске грешке која се манифестује детерминистички: при истим улазним подацима увек доводи до истог квара. Термин су увели у научну употребу истраживачи Џим Греј и Андреас Ројтер у књизи „Transaction Processing: Concepts and Techniques” (1993).

За разлику од Mandelbug-а, који хаотично мења своје понашање, Bohrbug је стабилан: програмер га може репродуковати затворених очију, дајући систему исте параметре. То га чини идеалним кандидатом за корачно отклањање грешака у IDE.

Bohrbug се јавља у свим фазама животног циклуса софтвера — од развоја до експлоатације. Често се открива у фази тестирања, јер QA инжењери извршавају понављајуће сценарије који гарантовано доводе до квара.

Дефиниција према Греју и Ројтеру

Према класификацији Греја и Ројтера, Bohrbug је дефект који испуњава три услова: фиксни скуп улазних података, исто стање система и исти резултат квара. Ако је бар један услов прекршен, грешка престаје да буде „боровска”.

Аутори наглашавају да Bohrbug није нужно једноставна грешка. Може бити произвољно сложена по логици, али њен детерминизам је разликује од свих осталих врста кварова у класификацији.

Порекло назива Bohrbug

Назив Bohrbug потиче од имена данског физичара Нилса Бора, творца планетарног модела атома. Аналогија је једноставна: као што се електрон у Боровом моделу креће по строго фиксираној орбити, тако и ова грешка понавља исто понашање при сваком покретању.

Греј и Ројтер су изабрали овај назив да би супротставили детерминистичке грешке хаотичним, које су назвали Mandelbug — у част математичара Беноа Манделброта, оснивача теорије фрактала и хаоса.

Занимљиво је да се у енглеској литератури термин Bohrbug често користи као синоним за „детерминистичку грешку”, иако је у српском окружењу мање распрострањен. Већина програмера такве грешке назива једноставно „поновљивим грешкама”.

Кључне карактеристике Bohrbug

Bohrbug поседује скуп карактеристичних својстава која омогућавају идентификацију међу другим врстама софтверских дефеката. Размотримо сваку карактеристику детаљно.

Детерминизам

Главна особина Bohrbug-а — потпуна предвидљивост. Ако је апликација пала при одређеним улазним подацима на рачунару програмера, пашће потпуно исто на рачунару тестера и у продукцији. Без случајних фактора.

Поновљивост

Bohrbug се понавља у 100% покушаја. То значи да за његово отклањање нису потребни специјални алати — довољни су обичан IDE и дебагер. Програмер поставља тачку заустављања, покреће апликацију, даје улазне податке и корак по корак прати код.

Стабилност током времена

Ако Bohrbug не буде поправљен, понављаће се у свакој верзији програма до тренутка поправке. Временски фактори — оптерећење CPU-а, фаза месеца, доба дана — не утичу на његово испољавање.

Главни узроци појаве Bohrbug

Узроци настанка Bohrbug могу се поделити у неколико категорија. Разумевање ових категорија помаже да се брже пронађе корен проблема.

Логичке грешке

Неправилно конструисан услов — најчешћи узрок Bohrbug. На пример, програмер је користио оператор `||` уместо `&&`, што је довело до неправилног извршавања гране кода при сваком позиву функције са одређеним аргументима.

Грешке граничних услова

Коришћење оператора `<=` уместо `<` или обрнута ситуација — класичан извор Bohrbug. Ако се петља треба извршити 10 пута, а извршава се 11 због нетачног услова, ово је детерминистичка грешка која ће се испољити при сваком покретању.

Нетачне константе и магични бројеви

Чврсто кодиране константе које не одговарају пословној логици стварају стабилне кварове. На пример, timeout повезивања са сервером је постављен на 100 милисекунди уместо 5000 — веза ће се прекидати при сваком захтеву.

Како открити Bohrbug у коду

Откривање Bohrbug-а — најједноставнији задатак за програмера у поређењу са другим врстама грешака. Детерминистички карактер омогућава примену стандардних метода отклањања грешака.

java
public class DiscountCalculator {
    public double calculate(double amount, boolean isPremium) {
        // Greška: premium korisnici dobijaju 5% popusta umesto 10%
        if (isPremium) {
            return amount * 0.95;
        }
        return amount * 0.90;
    }
}

У овом примеру Bohrbug је очигледан: при позиву `calculate(1000, true)` метода увек враћа 950 уместо 900. Најједноставнији unit тест са фиксним улазним подацима одмах ће открити проблем.

Unit тестирање као главни метод

За откривање Bohrbug-а, unit тестови су најефикасније средство. Довољно је покрити функцију сетом тестова са различитим граничним вредностима, и детерминистичка грешка ће се испољити при првом покретању.

Корачно отклањање грешака

Када Bohrbug буде откривен, корачно отклањање грешака у IDE је најбољи начин да се пронађе корен. Програмер поставља тачку заустављања на улазу у функцију и пролази кроз сваку линију, посматрајући вредности променљивих.

Разлика између Bohrbug и других врста грешака

Bohrbug се разликује од других врста програмских грешака по кључној особини — детерминизму. Размотримо поређење у табели.

Врста грешкеПоновљивостУзрокСложеност отклањања
Bohrbug100% при истим улазимаЛогичка грешкаНиска
MandelbugЗависи од стањаТрка нити, тајмингВисока
SchrödinbugДо читања кода — 0%Свест о грешциПсихолошка
HindenbugЈеднократноКаскада отказивањаЕкстремна
HeisenbugМења се при отклањањуОптимизација компајлераСредња

Bohrbug — једина врста грешке која се може гарантовано поновити у контролисаним условима. То га чини најбезбеднијим са становишта дијагностике, али не мање опасним за корисника.

Зашто се мешају Bohrbug и Heisenbug

Heisenbug — грешка која нестаје при покушају отклањања. За разлику од Bohrbug, Heisenbug се можда неће поновити у дебагеру због промене тајминга извршавања кода. Почетници програмери често мешају ове две врсте.

Пример Bohrbug у коду

Размотримо стварни пример Bohrbug у апликацији интернет продавнице. Функција израчунава укупну цену поруџбине узимајући у обзир порез.

java
public double calculateTotal(double subtotal, double taxRate) {
    // Greška: programer je postavio taxRate kao procenat
    // ali je zaboravio da podeli sa 100
    return subtotal + (subtotal * taxRate);
}

При позиву `calculateTotal(1000, 20)` функција ће вратити 21000 уместо очекиваних 1200. Ово је класичан Bohrbug: исти улазни подаци увек доводе до истог нетачног резултата. Поправка је тривијална — додати дељење са 100.

Исправљена верзија

Након поправке, функција коректно обрађује пореску стопу:

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

Овај пример јасно показује да Bohrbug може бити изазван најједноставнијом математичком грешком. Управо зато су преглед кода и unit тестови главни алати превенције таквих дефеката.

Често постављана питања

По чему се Bohrbug разликује од обичне грешке?

Bohrbug — је варијанта обичне грешке коју карактерише строги детерминизам. Сваки Bohrbug је грешка, али није свака грешка Bohrbug. Обична грешка може да се понавља нестабилно или да зависи од спољних фактора.

Зашто се Bohrbug назива стабилном грешком?

Стабилном Bohrbug се назива због способности да се понови при сваком покретању са истим улазним подацима. Ово својство га чини предвидљивим и погодним за отклањање грешака — за разлику од Mandelbug или Heisenbug.

Ко је увео термин Bohrbug?

Термин Bohrbug увели су Џим Греј и Андреас Ројтер 1993. године у књизи „Transaction Processing: Concepts and Techniques”. Они су класификовали програмске грешке према степену детерминизма, користећи аналогије из физике и математике.

Како брзо поправити Bohrbug?

За брзо поправљање Bohrbug потребно је: поновити грешку у тестном окружењу, проћи кроз код корак по корак у дебагеру, пронаћи линију са нетачном логиком и написати unit тест који проверава исправно понашање.

Може ли Bohrbug бити сложен?

Да, Bohrbug може бити произвољно сложен по својој логици. Детерминизам не значи једноставност. Грешка може укључивати више услова и угњеждених позива, али ако се стабилно понавља — то је Bohrbug.

Закључци

  • Bohrbug — детерминистичка програмска грешка која се понавља у 100% случајева при истим улазним подацима.
  • Назив потиче од презимена физичара Нилса Бора, чији се атомски модел заснива на строгим орбитама — аналогија са предвидљивим понашањем грешке.
  • Главни узроци Bohrbug: логичке грешке, нетачни гранични услови, штампарске грешке и нетачне константе.
  • Дијагностика Bohrbug је најлакша међу свим врстама грешака захваљујући детерминистичком карактеру.
  • Unit тестови и преглед кода — главни алати превенције Bohrbug у фази развоја.
  • Разлика од Mandelbug: Bohrbug је стабилан и предвидљив, Mandelbug је хаотичан и зависи од стања система.
  • Препорука: при откривању стабилне грешке увек започните писањем теста који је понавља.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође