Bohrbug: ano ito, mga dahilan ng paglitaw at mga paraan ng pag-aayos

May-akda: IT Sectr Nai-publish: 2026-07-29 Oras ng pagbabasa: 8 min

Bohrbug — ay isang software error na kumikilos nang deterministiko: sa parehong input data, ito ay nagpaparami sa bawat pagkakataon nang walang pagbubukod. Ang pangalan ay nagmula sa atomic model ni Niels Bohr, kung saan ang electron ay gumagalaw sa isang mahigpit na tinukoy na orbit — kasing predictable ng bug na ito. Ayon sa Wikipedia (2026), ang Bohrbug ay kabilang sa klase ng mga pinakamadaling i-diagnose na depekto, dahil hindi ito nangangailangan ng mga espesyal na kondisyon para maulit.

Mga Pangunahing Punto

  • Bohrbug — isang stable na error na nagpaparami sa bawat pagtakbo na may parehong input data.
  • Pangalan ay nauugnay sa planetary model ng atom ni Bohr — ang bug ay kumikilos nang predictable, tulad ng electron sa orbit.
  • Diagnosis ng mga ganitong bug ay pinakamadali: sapat na upang itala ang mga kondisyon ng input at magsagawa ng debugging.
  • Mga sanhi ay kinabibilangan ng mga lohikal na error, maling boundary conditions, at typo sa code.
  • Unit tests — pangunahing kasangkapan sa pagpigil ng Bohrbug sa yugto ng pag-develop.

Ano ang Bohrbug?

Bohrbug — ay isang uri ng software error na nagpapakita nang deterministiko: sa parehong input data, laging humahantong sa parehong pagkasira. Ang termino ay ipinakilala sa siyentipikong sirkulasyon ng mga mananaliksik na sina Jim Gray at Andreas Reuter sa aklat na “Transaction Processing: Concepts and Techniques” (1993).

Hindi tulad ng Mandelbug, na magulong nagbabago ng pag-uugali, ang Bohrbug ay stable: maaaring i-reproduce ito ng developer nang nakapikit, sa pamamagitan ng pagbibigay ng parehong mga parameter sa system. Ginagawa nitong perpektong kandidato para sa step-by-step na debugging sa IDE.

Ang Bohrbug ay matatagpuan sa lahat ng yugto ng lifecycle ng software — mula sa pag-develop hanggang sa operasyon. Madalas itong natutuklasan sa yugto ng pagsubok, dahil ang mga QA engineer ay nagsasagawa ng mga paulit-ulit na senaryo na garantadong hahantong sa pagkasira.

Kahulugan ayon kina Gray at Reuter

Ayon sa klasipikasyon nina Gray at Reuter, ang Bohrbug ay isang depekto na tumutupad sa tatlong kondisyon: isang nakapirming set ng input data, parehong estado ng system, at parehong resulta ng pagkasira. Kung kahit isang kondisyon ay nilabag, ang bug ay hindi na “Bohr”.

Binibigyang-diin ng mga may-akda na ang Bohrbug ay hindi nangangahulugang isang simpleng error. Maaari itong maging arbitraryong kumplikado sa lohika, ngunit ang determinismo nito ang nagpapahiwalay dito sa lahat ng iba pang uri ng pagkasira sa klasipikasyon.

Pinagmulan ng pangalang Bohrbug

Ang pangalang Bohrbug ay nagmula sa apelyido ng Danish physicist na si Niels Bohr, tagalikha ng planetary model ng atom. Ang pagkakatulad ay simple: kung paanong ang electron sa modelo ni Bohr ay gumagalaw sa isang mahigpit na nakapirming orbit, ang bug na ito ay inuulit ang parehong pag-uugali sa bawat pagtakbo.

Pinili nina Gray at Reuter ang pangalang ito upang ihambing ang deterministikong error sa mga magulong error, na tinawag nilang Mandelbug — bilang parangal sa mathematician na si Benoît Mandelbrot, tagapagtatag ng teorya ng fractals at kaguluhan.

Kapansin-pansin na sa panitikang Ingles, ang terminong Bohrbug ay kadalasang ginagamit bilang kasingkahulugan ng “deterministikong error”, bagama't sa komunidad ng Tagalog ay hindi gaanong kalat. Karamihan sa mga developer ay tinatawag lamang ang mga ganitong bug na “mga error na maaaring i-reproduce”.

Mga pangunahing katangian ng Bohrbug

Ang Bohrbug ay may hanay ng mga natatanging katangian na nagpapahintulot na makilala ito sa iba pang uri ng software depekto. Suriin natin ang bawat katangian nang detalyado.

Determinismo

Ang pangunahing katangian ng Bohrbug — ganap na predictability. Kung ang application ay nag-crash sa ilang input data sa makina ng developer, ito ay eksaktong mag-crash sa makina ng tester at sa produksyon. Walang mga random na kadahilanan.

Reproducibility

Bohrbug ay nagpaparami sa 100% ng mga pagtatangka. Ibig sabihin, hindi kailangan ng mga espesyal na kasangkapan para sa debugging nito — sapat na ang ordinaryong IDE at debugger. Ang developer ay naglalagay ng breakpoint, nagpapatakbo ng application, nagbibigay ng input data, at sinusundan ang code nang hakbang-hakbang.

Katatagan sa paglipas ng panahon

Kung hindi aayusin ang Bohrbug, ito ay magpaparami sa bawat bersyon ng programa hanggang sa oras ng pagkumpuni. Ang mga temporal na kadahilanan — load ng CPU, yugto ng buwan, oras ng araw — ay hindi nakakaapekto sa pagpapakita nito.

Mga pangunahing dahilan ng paglitaw ng Bohrbug

Mga sanhi ng paglitaw ng Bohrbug ay maaaring hatiin sa ilang kategorya. Ang pag-unawa sa mga kategoryang ito ay tumutulong upang mas mabilis na mahanap ang ugat ng problema.

Mga lohikal na error

Isang kondisyon na hindi wasto ang pagkakagawa — ang pinakakaraniwang sanhi ng Bohrbug. Halimbawa, gumamit ang developer ng operator na `||` sa halip na `&&`, na humantong sa maling pagpapatupad ng branch ng code sa bawat pagtawag ng function na may tiyak na mga argumento.

Mga error sa boundary conditions

Paggamit ng operator na `<=` sa halip na `<` o ang kabaligtaran na sitwasyon — klasikong pinagmulan ng Bohrbug. Kung ang loop ay dapat tumakbo ng 10 beses, ngunit tumatakbo ng 11 dahil sa maling kondisyon, ito ay isang deterministikong error na lilitaw sa bawat pagtakbo.

Maling constants at magic numbers

Ang mga hard-coded na constants na hindi tumutugma sa business logic ay lumilikha ng mga stable na pagkasira. Halimbawa, ang timeout ng koneksyon sa server ay nakatakda sa 100 millisecond sa halip na 5000 — ang koneksyon ay mapuputol sa bawat request.

Paano matukoy ang Bohrbug sa code

Ang pagtuklas ng Bohrbug — pinakamadaling gawain para sa developer kumpara sa iba pang uri ng bug. Ang deterministikong karakter ay nagpapahintulot ng paggamit ng mga standard na pamamaraan ng debugging.

java
public class DiscountCalculator {
    public double calculate(double amount, boolean isPremium) {
        // Bug: ang mga premium user ay nakakakuha ng 5% diskwento sa halip na 10%
        if (isPremium) {
            return amount * 0.95;
        }
        return amount * 0.90;
    }
}

Sa halimbawang ito, Bohrbug ay malinaw: sa pagtawag ng `calculate(1000, true)`, ang method ay laging nagbabalik ng 950 sa halip na 900. Ang pinakasimpleng unit test na may nakapirming input data ay agad na magpapakita ng problema.

Unit testing bilang pangunahing pamamaraan

Para sa pagtuklas ng Bohrbug, ang unit tests ay pinakaepektibong kasangkapan. Sapat na upang masakop ang function ng isang set ng mga test na may iba't ibang boundary values, at ang deterministikong error ay lilitaw sa unang pagtakbo.

Step-by-step na debugging

Kapag Bohrbug ay natuklasan, ang step-by-step na debugging sa IDE ay pinakamahusay na paraan upang mahanap ang ugat. Ang developer ay naglalagay ng breakpoint sa pasukan ng function at sinusundan ang bawat linya, na pinagmamasdan ang mga halaga ng mga variable.

Pagkakaiba ng Bohrbug sa iba pang uri ng bug

Bohrbug ay naiiba sa iba pang uri ng software error sa isang pangunahing katangian — determinismo. Tingnan natin ang paghahambing sa talahanayan.

Uri ng bugReproducibilitySanhiHirap ng debugging
Bohrbug100% sa parehong inputLohikal na errorMababa
MandelbugDepende sa estadoRace condition, timingMataas
SchrödinbugHanggang basahin ang code — 0%Pagkamalay sa errorSikolohikal
HindenbugIsang beses langCascade ng pagkasiraEkstremal
HeisenbugNagbabago sa debuggingOptimisasyon ng compilerKatamtaman

Bohrbug — ang tanging uri ng error na garantadong maaaring i-reproduce sa kontroladong kondisyon. Ginagawa nitong pinakaligtas mula sa pananaw ng diagnosis, ngunit hindi gaanong mapanganib para sa gumagamit.

Bakit napagkakamalan ang Bohrbug at Heisenbug

Heisenbug — isang bug na nawawala kapag sinubukang i-debug. Hindi tulad ng Bohrbug, ang Heisenbug ay maaaring hindi magparami sa debugger dahil sa pagbabago ng timing ng pagpapatupad ng code. Ang mga baguhang developer ay madalas na napagkakamalan ang dalawang uri na ito.

Halimbawa ng Bohrbug sa code

Tingnan natin ang isang tunay na halimbawa ng Bohrbug sa isang application ng online na tindahan. Kinakalkula ng function ang kabuuang halaga ng order kasama ang buwis.

java
public double calculateTotal(double subtotal, double taxRate) {
    // Bug: itinakda ng developer ang taxRate bilang porsyento
    // ngunit nakalimot na hatiin sa 100
    return subtotal + (subtotal * taxRate);
}

Sa pagtawag ng `calculateTotal(1000, 20)`, ang function ay magbabalik ng 21000 sa halip na inaasahang 1200. Ito ay isang klasikong Bohrbug: ang parehong input data ay laging humahantong sa parehong maling resulta. Ang pag-aayos ay trivial — magdagdag ng paghahati sa 100.

Naayos na bersyon

Pagkatapos ng pag-aayos, wasto nang pinoproseso ng function ang rate ng buwis:

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

Ang halimbawang ito ay malinaw na nagpapakita na ang Bohrbug ay maaaring sanhi ng pinakasimpleng pagkakamali sa matematika. Iyan mismo ang dahilan kung bakit ang code review at unit tests ang pangunahing kasangkapan sa pagpigil ng mga ganitong depekto.

Mga Madalas Itanong

Paano naiiba ang Bohrbug sa ordinaryong bug?

Bohrbug — ay isang variant ng ordinaryong bug na nailalarawan sa mahigpit na determinismo. Bawat Bohrbug ay isang bug, ngunit hindi lahat ng bug ay Bohrbug. Ang ordinaryong bug ay maaaring magparami nang hindi matatag o depende sa panlabas na mga kadahilanan.

Bakit tinatawag na stable na bug ang Bohrbug?

Stable ang tawag sa Bohrbug dahil sa kakayahan nitong magparami sa bawat pagtakbo na may parehong input data. Ang katangiang ito ay ginagawa itong predictable at maginhawa para sa debugging — hindi tulad ng Mandelbug o Heisenbug.

Sino ang nagpakilala ng terminong Bohrbug?

Ang terminong Bohrbug ay ipinakilala nina Jim Gray at Andreas Reuter noong 1993 sa aklat na “Transaction Processing: Concepts and Techniques”. Inuri nila ang mga software error ayon sa antas ng determinismo, gamit ang mga pagkakatulad mula sa pisika at matematika.

Paano mabilis na ayusin ang Bohrbug?

Para sa mabilis na pag-aayos ng Bohrbug, kailangan: i-reproduce ang bug sa test environment, sundan ang code nang hakbang-hakbang sa debugger, hanapin ang linya na may maling lohika, at sumulat ng unit test na sumusuri ng tamang pag-uugali.

Maaari bang maging kumplikado ang Bohrbug?

Oo, ang Bohrbug ay maaaring maging arbitraryong kumplikado sa lohika nito. Ang determinismo ay hindi nangangahulugan ng pagiging simple. Ang bug ay maaaring may kasamang maraming kondisyon at nested na tawag, ngunit kung ito ay matatag na nagpaparami — ito ay Bohrbug.

Buod

  • Bohrbug — isang deterministikong software error na nagpaparami sa 100% ng mga kaso na may parehong input data.
  • Pangalan ay nagmula sa apelyido ng physicist na si Niels Bohr, na ang atomic model ay nakabatay sa mahigpit na mga orbit — pagkakatulad sa predictable na pag-uugali ng bug.
  • Mga pangunahing sanhi ng Bohrbug: lohikal na error, maling boundary conditions, typo, at maling constants.
  • Diagnosis ng Bohrbug ay pinakamadali sa lahat ng uri ng bug dahil sa deterministikong karakter.
  • Unit tests at code review — pangunahing kasangkapan sa pagpigil ng Bohrbug sa yugto ng pag-develop.
  • Pagkakaiba sa Mandelbug: ang Bohrbug ay stable at predictable, ang Mandelbug ay magulo at depende sa estado ng system.
  • Rekomendasyon: kapag natuklasan ang isang stable na bug, laging magsimula sa pagsulat ng test na nagpaparami nito.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din