Sabtu, 24 April 2021

Tips Debugging: Kasus: Memeriksa Palindrome Lewat Fungsi Dalam Bahasa Python (Belajar Komputer)

Ada beberapa tips yang bermanfaat utnk memeriksa program yang salah (debugging) antara lain: 

1. Biasanya bugs ada pada: 

  • salah urutan memasukkan data pada fungsi
  • salah ketik (huruf kecil dan besar, strip dll) 
  • variabel awal nggak diproses. 
  • perintah== dan = yang berbeda fungsi
  • antara membandingkan kedua list atau membandingkan objek dalam list L1==L2 dan id(L1) dan id(L2)
  •  Pengaruh built in function
  • pengaruh () pada objek yang akan diproses.

Cek nama variabel atau kebiasaan lain yang sering kamu lakukan. 

2. Analisa kenapa program yang dihasilkan seperti itu

3. Bugs datang pada tempat yang tidak terduga

4. Membuat dokumentasi yang rapi dan menjelaskan pada orang lain

5. Periksa satu persatu kode, jangan baca commentnya saja

6. Kalau sudah jenuh, tinggalkan dulu- usahakan kerjakan pada waktu awal agar kode tetap selesai pada waktunya.

Contoh: 

Kode memeriksa palindrome lewat fungsi. Fungsi di bawah ini dibuat untuk memeriksa apakah list palindrom (x) sudah betul (dalam def isPal(x)). Catatan: fungsi temp.reverse hanya bekerja pada list, bukan pada string. 

Ketika di run, kode ini seperti tidak ada kesalahan padahal masih ada. Misalnya ketika kita memasukkan input bukan palindrom yang sederhana yaitu a , b.  ternyata gagal. 

Dari mana kita harus  memulai debugging? 

Coba pakai metoda bisection search, cari kesalahan dari bagian tengah. Kita cek def silly. Bagian tengah: if isPal(result): (ini perintah singkat dari if isPal(result) = True, kebalikan dari if not isPal(result): ).  Kalau mau lihat result yang dibuat def isPal, kita bisa pakai perintah print(result) setelah element di append. Sekarang coba run lagi. 

ternyata jawaban dari [a,b] masih 'yes', berarti kesalahan mungkin terjadi pada kode di atasnya.

Kita cek def isPal.  Sesudah dibalik, kita lihat apakah kode usdah benar. di bawah if temp==x kita tambahkan print(temp, x).  ternyata kode nggak bisa dibalik, nilai temp dan x masih sama. Nah mungkin masalahnya di perintah temp.reverse. Perintah ini mengerjakan reverse tapi tidak mengubah atau atau memproses data yang diinginkan. (biasanya pada python memang harus menggunakan ()).Lihat di : https://www.geeksforgeeks.org/is-python-call-by-reference-or-call-by-value/

Ketika kita pakai temp.reverse(), ternyata temp dan x jadi berubah keduanya (harusnya x nggak berubah).  Jadi temp harus dikopi dari x agar x nya tidak berubah, kalau bukan copy, list temp dan x dianggap 1 list dan langsung berubah ketika salah satu dirubah. sehingga temp= x[:]. 

Nah mestinya kodenya sudah benar (kalau nggak ada salah ketik atau bugs di komputer. 

Cara lain memeriksa Palindrome: https://www.geeksforgeeks.org/python-program-check-string-palindrome-not/

Referensi: 

John V. Guttag, Introduction to Computation and Programming Using Python with Application to Understanding Data, chapter 6, testing & debugging

Tidak ada komentar:

Posting Komentar