Skip to content

Cara Menaklukan Bug “Dewa”

Reading Time: 3 minutes
Cara menaklukan bud dewa
Pusing gara-gara bug

Bagi seorang programmer, menghadapi bug merupakan hal yang sudah biasa. Mulai dari menghadapi bug yang mudah sampai bug yang sulit. Bagi saya pribadi, bug yang mudah adalah bug yang bisa saya munculkan kembali dengan melakukan testing aplikasi menggunakan alur-alur normal. Sedangkan bug yang sulit adalah bug yang sulit saya munculkan kembali dengan melakukan testing menggunakan alur-alur normal atau pun alur-alur tidak normal. Untuk menghadapi bug yang sulit, ada beberapa hal yang biasa saya lakukan.

Pertama. Kalau bug itu berupa output data yang salah, maka saya sering melakukan hal-hal dibawah ini.

  1. Lihat datanya. Cari petunjuk dari data tersebut.
  2. Bandingkan dengan data sebelumnya yang outputnya benar kemudian cari polanya. Misalnya, bug ini hanya terjadi atau sering terjadi pada hari atau jam-jam tertentu, ketika mendaftarkan pasien-pasien tertentu, user-user tertentu, komputer-komputer tertentu, dan lain-lain. Intinya, lihat polanya.

Kedua. Persempit ruang pencarian. Kalau data yang salah tersebut dihasilkan dari sebuah function atau sebuah stored procedure di database, maka cari function atau stored procedure yang menghasilkan data salah tersebut. Kemudian telusuri kodingannya, bagaimana kodingan tersebut bisa sampai menghasilkan data yang salah. Pikirkan segala kemungkinan. perhatikan juga inputan ke function atau stored procedure tersebut, bisa saja inputan yang masuk ke function atau stored procedurenya juga sudah salah, telusuri inputan tersebut dikirim dari mana, jika inputan tersebut dikirim oleh funtion atau stored procedure yang lain, selidiki juga di function atau stored procedure tersebut, begitu seterusnya.

Ketiga. Perhatikan bagaimana cara user menggunakan aplikasi. Poin ini berkaitan dengan poin pertama. Kadang ada user yang memakai aplikasi dengan cara yang berbeda dari kebanyakan user lainnya. Ketika user tersebut menggunakan aplikasi dengan caranya yang unik, kodingan di aplikasi kita tidak bisa menangani kondisi unik tersebut.

Keempat. Setelah melihat data kemudian mempersempit ruang pencarian, lalu memperhatikan juga kebiasaan user, lakukan simulasi dengan membayangkan kejadiannya seperti apa, mulai dari bagaimana cara user memasukkan data, kemudian data masuk ke function atau stored procedure, pikirkan segala kemungkinan bagaimana data yang dikeluarkan oleh function atau stored procedure tersebut bisa jadi salah.

Kelima. Gunakan tool-tool debugging. Dengan menggunakan tool-tool debugging kita akan jauh lebih mudah dan cepat dalam melakukan trace bug.

Saya pernah menaklukan bug, bug itu dinamakan deadlock. Kadang ketika user melakukan simpan data obat yang telah mereka input, data tersebut tidak masuk semuanya tanpa ada pesan error. Misal dari 10 data obat yang diinput hanya 5 atau 7 data yang masuk. Ini adalah bug tersulit yang pernah saya hadapi. Semua poin yang saya tuliskan disini sudah saya lakukan selama 2 bulan tapi saya belum bisa menarik kesimpulan apa penyebabnya.

Pada waktu itu petunjuknya adalah bug tersebut lebih sering terjadi pada pagi sampai siang hari. Artinya bug ini lebih sering terjadi ketika tingkat aktifitas penggunaan aplikasi yang tinggi. Singkat cerita, saya mendapat ide untuk menangkapnya, yaitu dengan memasang profiler di server pada pagi hari sampai siang hari untuk memantau bug tersebut sambil saya meminta user di lapangan untuk segera melaporkan jika bug itu muncul.

Akhirnya ada laporan bug itu muncul, kemudian saya mencari data bug di profiler yang bugnya terjadi di sekitar waktu yang dilaporkan user, saya menemukan satu bug yang waktu kejadiannya hampir sama dengan waktu yang dilaporkan user. Pada waktu itu saya baru tahu nama bugnya adalah deadlock.

Kemudian saya mencari tahu di internet apa itu deadlock, lalu setelah tahu apa itu deadlock saya melakukan simulasi dengan data-data yang sudah ada di kepala saya dan akhirnya saya berhasil menarik kesimpulan bagaimana bug tersebut bisa terjadi, setelah itu saya melakukan pengujian dengan meminta bantuan 2 operator untuk melakukan input data obat pada pasien yang sama dan melakukan klik simpan berbarengan. Kami mengujinya beberapa kali. Alhamdulillah bugnya muncul terus. Data yang diinputkan salah satu operator tidak masuk semuanya walaupun tidak ada pesan error. Itu adalah hari dimana saya sangat gembira sekali melihat bug.

Berdasarkan penjelasan yang saya dapat di Stack Overflow deadlock itu seperti ini.

Resource A dan resource B digunakan oleh proses X and proses Y

  • X memulai menggunakan A.
  • X(pada saat ini belum selesai menggunakan A) dan Y mencoba untuk menggunakan B
  • Y menang dan akhirnya menggunakan B terlebih dahulu, kemudian X menunggu Y selesai karena mau menggunakan B
  • Belum selesai menggunakan B, sekarang Y perlu juga menggunakan A tapi A dikunci oleh X yang mana X sedang menunggu Y

Jadi X dan Y ini saling menunggu. Keadaan saling menunggu ini harus dihentikan karena kalau tidak dihentikan tidak akan pernah berakhir. Maka sistem operasi dengan suatu algoritma, memutuskan untuk menghentikan salah satu proses.

Untuk kasus yang saya alami, penyebab terjadinya deadlock adalah banyaknya trigger pada tabel-tabel ketika proses simpan data obat. Maka untuk memperbaikinya, saya mematikan trigger pada tabel-tabel yang dieksekusi ketika proses simpan dan memindahkan kodingan-kodingan di trigger ke stored procedure.

Cara yang saya tuliskan disini memang perlu latihan, terutama pada kemampuan melakukan simulasi dengan membayangkan dan mengkaitkan semua petunjuk yang didapat sampai akhirnya bisa menarik kesimpulan.

Bagikan artikel

Published inPemrograman

4 Comments

  1. Artikelnya membantu sekali untuk para programmer yang seringkali ketemu bug dan sulit mengatasinya. Apakah cara ini bisa digunakan diberbagai macam aplikasi? Atau hanya aplikasi tertentu saja?

    • admin admin

      Ini cara yang umum. Jadi bisa digunakan pada seluruh jenis aplikasi.

  2. asep asep

    mau tanya kang, maksud dari kata user yang sama dan melakukan klik simpan berbarengan

    • admin admin

      Salah, seharusnya pada pasien yang sama

Tinggalkan Balasan

WhatsApp chat