Bohrbug: apa itu, penyebab munculnya dan metode perbaikan

Penulis: IT Sectr Diterbitkan: 2026-07-29 Waktu membaca: 8 mnt

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 — kesalahan stabil yang muncul setiap kali dijalankan dengan data masukan yang sama.
  • Nama terkait dengan model planet atom Bohr — bug berperilaku dapat diprediksi, seperti elektron di orbit.
  • Diagnosis bug semacam ini paling sederhana: cukup catat kondisi masukan dan lakukan debugging.
  • Penyebab mencakup kesalahan logika, kondisi batas yang salah, dan kesalahan ketik dalam kode.
  • Pengujian unit — alat utama pencegahan Bohrbug pada tahap pengembangan.

Apa itu Bohrbug?

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.

Definisi menurut Gray dan Reuter

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.

Asal-usul nama Bohrbug

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

Karakteristik utama Bohrbug

Bohrbug memiliki serangkaian sifat khas yang memungkinkan identifikasinya di antara jenis cacat perangkat lunak lainnya. Mari kita bahas setiap karakteristik secara detail.

Determinisme

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.

Reproduksibilitas

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.

Stabilitas sepanjang waktu

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 utama munculnya Bohrbug

Penyebab munculnya Bohrbug dapat dibagi menjadi beberapa kategori. Memahami kategori ini membantu menemukan akar masalah lebih cepat.

Kesalahan logika

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.

Kesalahan kondisi batas

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 dan angka ajaib yang salah

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.

Cara mendeteksi Bohrbug dalam kode

Deteksi Bohrbug — tugas paling sederhana bagi pengembang dibandingkan dengan jenis bug lainnya. Sifat deterministik memungkinkan penerapan metode debugging standar.

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

Pengujian unit sebagai metode utama

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.

Debugging langkah demi langkah

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.

Perbedaan Bohrbug dengan jenis bug lainnya

Bohrbug berbeda dari jenis kesalahan perangkat lunak lainnya dalam satu karakteristik kunci — determinisme. Mari kita lihat perbandingannya dalam tabel.

Jenis bugReproduksibilitasPenyebabKompleksitas debugging
Bohrbug100% dengan masukan samaKesalahan logikaRendah
MandelbugTergantung statusRace condition, timingTinggi
SchrödinbugSampai baca kode — 0%Kesadaran akan bugPsikologis
HindenbugSekali sajaKaskade kegagalanEkstrem
HeisenbugBerubah saat debuggingOptimasi kompilerSedang

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.

Mengapa Bohrbug dan Heisenbug sering tertukar

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.

Contoh Bohrbug dalam kode

Mari kita lihat contoh nyata Bohrbug dalam aplikasi toko online. Fungsi menghitung total biaya pesanan dengan mempertimbangkan pajak.

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

Versi yang diperbaiki

Setelah perbaikan, fungsi memproses tarif pajak dengan benar:

java
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

Apa perbedaan Bohrbug dengan bug biasa?

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.

Mengapa Bohrbug disebut bug stabil?

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.

Siapa yang memperkenalkan istilah Bohrbug?

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.

Bagaimana cara cepat memperbaiki Bohrbug?

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.

Bisakah Bohrbug menjadi kompleks?

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

  • Bohrbug — kesalahan perangkat lunak deterministik yang muncul dalam 100% kasus dengan data masukan yang sama.
  • Nama berasal dari nama fisikawan Niels Bohr, yang model atomnya didasarkan pada orbit yang ketat — analogi dengan perilaku bug yang dapat diprediksi.
  • Penyebab utama Bohrbug: kesalahan logika, kondisi batas yang salah, kesalahan ketik, dan konstanta yang salah.
  • Diagnosis Bohrbug adalah yang paling sederhana di antara semua jenis bug karena sifat deterministiknya.
  • Pengujian unit dan tinjauan kode — alat utama pencegahan Bohrbug pada tahap pengembangan.
  • Perbedaan dari Mandelbug: Bohrbug stabil dan dapat diprediksi, Mandelbug kacau dan tergantung pada status sistem.
  • Rekomendasi: saat menemukan bug stabil, selalu mulai dengan menulis pengujian yang mereproduksinya.

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.

Diskusikan proyek

Baca juga