Bohrbug — adalah kesalahan perangkat lunak yang berperilaku deterministik: dengan data masukan yang sama, kesalahan ini muncul setiap kali tanpa terkecuali. Nama ini berasal dari model atom Niels Bohr, di mana elektron bergerak dalam orbit yang ditentukan secara ketat — sama dapat diprediksi seperti bug ini. Menurut Wikipedia (2026), Bohrbug termasuk dalam kelas cacat yang paling mudah didiagnosis karena tidak memerlukan kondisi khusus untuk terulang.
Poin Utama
Bohrbug — adalah jenis kesalahan perangkat lunak yang muncul secara deterministik: dengan data masukan yang sama, selalu menyebabkan kegagalan yang sama. Istilah ini diperkenalkan ke dalam sirkulasi ilmiah oleh peneliti Jim Gray dan Andreas Reuter dalam buku “Transaction Processing: Concepts and Techniques” (1993).
Tidak seperti Mandelbug, yang mengubah perilakunya secara kacau, Bohrbug stabil: pengembang dapat mereproduksinya dengan mata tertutup, memberikan parameter yang sama ke sistem. Ini menjadikannya kandidat ideal untuk debugging langkah demi langkah di IDE.
Bohrbug muncul di semua tahap siklus hidup perangkat lunak — dari pengembangan hingga operasi. Sering ditemukan pada tahap pengujian, karena insinyur QA menjalankan skenario berulang yang dijamin menyebabkan kegagalan.
Menurut klasifikasi Gray dan Reuter, Bohrbug adalah cacat yang memenuhi tiga kondisi: kumpulan data masukan tetap, status sistem yang sama, dan hasil kegagalan yang sama. Jika setidaknya satu kondisi dilanggar, bug tidak lagi menjadi “Bohr”.
Penulis menekankan bahwa Bohrbug belum tentu merupakan kesalahan sederhana. Ini bisa menjadi sangat kompleks secara logika, tetapi determinismenya membedakannya dari semua jenis kegagalan lainnya dalam klasifikasi.
Nama Bohrbug berasal dari nama fisikawan Denmark Niels Bohr, pencipta model planet atom. Analoginya sederhana: seperti elektron dalam model Bohr bergerak dalam orbit yang tetap, bug ini mengulangi perilaku yang sama setiap kali dijalankan.
Gray dan Reuter memilih nama ini untuk membandingkan kesalahan deterministik dengan yang kacau, yang mereka beri nama Mandelbug — untuk menghormati matematikawan Benoît Mandelbrot, pendiri teori fraktal dan kekacauan.
Menariknya, dalam literatur berbahasa Inggris, istilah Bohrbug sering digunakan sebagai sinonim untuk “kesalahan deterministik”, meskipun di lingkungan Indonesia kurang umum. Sebagian besar pengembang menyebut bug semacam itu sebagai “kesalahan yang dapat direproduksi”.
Bohrbug memiliki serangkaian sifat khas yang memungkinkan identifikasinya di antara jenis cacat perangkat lunak lainnya. Mari kita bahas setiap karakteristik secara detail.
Ciri utama Bohrbug — prediktabilitas penuh. Jika aplikasi crash dengan data masukan tertentu di mesin pengembang, aplikasi akan crash dengan cara yang persis sama di mesin penguji dan di produksi. Tidak ada faktor acak.
Bohrbug dapat direproduksi dalam 100% percobaan. Ini berarti tidak diperlukan alat khusus untuk debugging-nya — IDE biasa dan debugger sudah cukup. Pengembang menempatkan titik henti, menjalankan aplikasi, memberikan data masukan, dan menelusuri kode langkah demi langkah.
Jika Bohrbug tidak diperbaiki, ia akan muncul di setiap versi program hingga saat perbaikan. Faktor temporal — beban CPU, fase bulan, waktu hari — tidak mempengaruhi kemunculannya.
Penyebab munculnya Bohrbug dapat dibagi menjadi beberapa kategori. Memahami kategori ini membantu menemukan akar masalah lebih cepat.
Kondisi yang dibangun secara tidak benar — penyebab paling umum Bohrbug. Misalnya, pengembang menggunakan operator `||` alih-alih `&&`, yang menyebabkan eksekusi cabang kode yang salah setiap kali fungsi dipanggil dengan argumen tertentu.
Penggunaan operator `<=` alih-alih `<` atau situasi sebaliknya — sumber klasik Bohrbug. Jika loop harus dijalankan 10 kali, tetapi dijalankan 11 kali karena kondisi yang salah, ini adalah kesalahan deterministik yang akan muncul setiap kali dijalankan.
Konstanta yang dikodekan secara kaku dan tidak sesuai dengan logika bisnis menciptakan kegagalan yang stabil. Misalnya, waktu tunggu koneksi server diatur ke 100 milidetik alih-alih 5000 — koneksi akan terputus setiap kali permintaan.
Deteksi Bohrbug — tugas paling sederhana bagi pengembang dibandingkan dengan jenis bug lainnya. Sifat deterministik memungkinkan penerapan metode debugging standar.
public class DiscountCalculator {
public double calculate(double amount, boolean isPremium) {
// Bug: pengguna premium mendapatkan diskon 5% alih-alih 10%
if (isPremium) {
return amount * 0.95;
}
return amount * 0.90;
}
}
Dalam contoh ini Bohrbug jelas: saat memanggil `calculate(1000, true)`, metode selalu mengembalikan 950 alih-alih 900. Pengujian unit paling sederhana dengan data masukan tetap akan segera mengungkapkan masalahnya.
Untuk mendeteksi Bohrbug, pengujian unit adalah alat yang paling efektif. Cukup meliput fungsi dengan serangkaian pengujian dengan berbagai nilai batas, dan kesalahan deterministik akan muncul pada eksekusi pertama.
Setelah Bohrbug terdeteksi, debugging langkah demi langkah di IDE adalah cara terbaik untuk menemukan akar masalahnya. Pengembang menempatkan titik henti di pintu masuk fungsi dan menelusuri setiap baris, mengamati nilai variabel.
Bohrbug berbeda dari jenis kesalahan perangkat lunak lainnya dalam satu karakteristik kunci — determinisme. Mari kita lihat perbandingannya dalam tabel.
| Jenis bug | Reproduksibilitas | Penyebab | Kompleksitas debugging |
|---|---|---|---|
| Bohrbug | 100% dengan masukan sama | Kesalahan logika | Rendah |
| Mandelbug | Tergantung status | Race condition, timing | Tinggi |
| Schrödinbug | Sampai baca kode — 0% | Kesadaran akan bug | Psikologis |
| Hindenbug | Sekali saja | Kaskade kegagalan | Ekstrem |
| Heisenbug | Berubah saat debugging | Optimasi kompiler | Sedang |
Bohrbug — satu-satunya jenis kesalahan yang dapat direproduksi secara terjamin dalam kondisi terkendali. Ini membuatnya paling aman dari segi diagnosis, tetapi tidak kalah berbahaya bagi pengguna.
Heisenbug — bug yang menghilang saat mencoba melakukan debugging. Tidak seperti Bohrbug, Heisenbug mungkin tidak dapat direproduksi di debugger karena perubahan waktu eksekusi kode. Pengembang pemula sering mencampuradukkan kedua jenis ini.
Mari kita lihat contoh nyata Bohrbug dalam aplikasi toko online. Fungsi menghitung total biaya pesanan dengan mempertimbangkan pajak.
public double calculateTotal(double subtotal, double taxRate) {
// Bug: pengembang mengatur taxRate sebagai persentase
// tetapi lupa membagi dengan 100
return subtotal + (subtotal * taxRate);
}
Saat memanggil `calculateTotal(1000, 20)` fungsi akan mengembalikan 21000 alih-alih 1200 yang diharapkan. Ini adalah Bohrbug klasik: data masukan yang sama selalu menghasilkan hasil yang salah yang sama. Perbaikannya sepele — menambahkan pembagian dengan 100.
Setelah perbaikan, fungsi memproses tarif pajak dengan benar:
public double calculateTotal(double subtotal, double taxRatePercent) {
return subtotal + (subtotal * taxRatePercent / 100.0);
}
Contoh ini dengan jelas menunjukkan bahwa Bohrbug dapat disebabkan oleh kesalahan matematika yang paling sederhana. Itulah mengapa tinjauan kode dan pengujian unit adalah alat utama pencegahan cacat semacam itu.
Pertanyaan yang Sering Diajukan
Bohrbug — adalah varian dari bug biasa yang ditandai dengan determinisme yang ketat. Setiap Bohrbug adalah bug, tetapi tidak setiap bug adalah Bohrbug. Bug biasa dapat mereproduksi secara tidak stabil atau bergantung pada faktor eksternal.
Stabil Bohrbug disebut karena kemampuannya untuk mereproduksi setiap kali dijalankan dengan data masukan yang sama. Sifat ini membuatnya dapat diprediksi dan nyaman untuk debugging — tidak seperti Mandelbug atau Heisenbug.
Istilah Bohrbug diperkenalkan oleh Jim Gray dan Andreas Reuter pada tahun 1993 dalam buku “Transaction Processing: Concepts and Techniques”. Mereka mengklasifikasikan kesalahan perangkat lunak berdasarkan tingkat determinisme, menggunakan analogi dari fisika dan matematika.
Untuk perbaikan cepat Bohrbug, perlu: mereproduksi bug di lingkungan pengujian, menelusuri kode langkah demi langkah di debugger, menemukan baris dengan logika yang salah, dan menulis pengujian unit yang memeriksa perilaku yang benar.
Ya, Bohrbug bisa menjadi sangat kompleks secara logika. Determinisme tidak berarti kesederhanaan. Bug dapat melibatkan banyak kondisi dan panggilan bersarang, tetapi jika mereproduksi secara stabil — itu adalah Bohrbug.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga