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 — 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.
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.
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”.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
Bohrbug ay naiiba sa iba pang uri ng software error sa isang pangunahing katangian — determinismo. Tingnan natin ang paghahambing sa talahanayan.
| Uri ng bug | Reproducibility | Sanhi | Hirap ng debugging |
|---|---|---|---|
| Bohrbug | 100% sa parehong input | Lohikal na error | Mababa |
| Mandelbug | Depende sa estado | Race condition, timing | Mataas |
| Schrödinbug | Hanggang basahin ang code — 0% | Pagkamalay sa error | Sikolohikal |
| Hindenbug | Isang beses lang | Cascade ng pagkasira | Ekstremal |
| Heisenbug | Nagbabago sa debugging | Optimisasyon ng compiler | Katamtaman |
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.
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.
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.
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.
Pagkatapos ng pag-aayos, wasto nang pinoproseso ng function ang rate ng buwis:
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
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.
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.
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.
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.
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
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.
Basahin din