Rabu, 02 November 2011

Teknik Debugging Dalam Membuat Program

Hallo… para pengunjung setia blog ini, pada artikel kali ini akan saya paparkan bagaimana teknik debugging dalam membuat program. Wah… apaan tuh debugging? kok ada istilah ge-debag ge-debug segala :-) Ya.. bagi para pengunjung yang telah lama menekuni dunia programming, tentu istilah ini sudah familiar. Bagi new comer, tentu bertanya-tanya dengan istilah ini.

Istilah debugging dalam programming, artinya adalah mencari kesalahan algoritma dalam program yang sedang dibuat. Lho… bagaimana kita tahu ada algoritma yang salah? Algoritma yang salah ini akan mengakibatkan hasil atau output yang salah atau tidak seperti yang diharapkan. Istilah kesalahan ini sering disebut ‘algoritmic error’.
Contoh sederhana dari algoritmic error ini adalah, misalkan kita akan membuat program untuk menjumlahkan dua buah bilangan bulat, katakanlah A dan B. Dan program yang dibuat adalah sebagai berikut (dalam Pascal):
01.program jumlahkan;
02.var a, b, hasil : integer;
03.begin
04.   write('Masukkan nilai A : ');
05.   readln(a);
06.   write('Masukkan nilai B : ');
07.   readln(b);
08.   hasil := a - b;
09.   write('Hasil penjumlahannya adalah : ',hasil);
10.end.
Apabila kita jalankan program di atas atau kita compile, maka tidak akan ada error yang muncul, dalam hal ini syntax error (error yang terkait dengan aturan penulisan program). Namun ketika dijalankan, dan misalkan kita masukkan nilai A = 5 dan B = 4, maka hasil yang muncul adalah 1 (bukannya 9). Nah… inilah yang dimaksud dengan algoritmic error, atau error yang disebabkan kesalahan dalam langkah penyelesaian masalah.
Contoh sederhana lain, tapi hal ini tidak ada kaitannya dengan program, yaitu tentang algoritma merebus mie instan :-) wah jadi laper nih…
Misalkan, diberikan algoritma untuk merebus mie instan sbb:
  1. Buka bungkus mie
  2. Siapkan panci dan taruh panci di atas kompor
  3. Masukkan mie ke dalam panci
  4. Nyalakan api kompor kira-kira 3 menit
  5. Masukkan air mentah 2 gelas
  6. Matikan kompor
  7. Taruh mie ke dalam mangkuk
Nah… bagaimana pendapat Anda tentang algoritma di atas? Ya… kita akan tetap mendapatkan output dari proses merebus mie, tapi tidak sesuai yang diharapkan, yaitu mienya gosong dan airnya masih mentah :-) Mengapa demikian? ya… hal ini karena ada langkah yang salah dalam merebus mie. Inilah contoh algoritmic error.
So… saya harap Anda sudah tahu maksud algoritmic error. Sekarang, bila Anda mendapatkan program yang Anda buat mengalami algoritmic error, apa yang harus dilakukan? Ya… langkah satu-satunya adalah mencari letak proses yang salah dalam algoritmanya. Nah… proses pencarian ini dinamakan debugging.
Mengapa disebut debugging? :-) Konon istilah tersebut  muncul  karena si penemu kata ini pada waktu itu juga sedang mencari kesalahan program, namun saking jengkelnya karena gak ketemu-ketemu, trus dia menyebutnya si ‘kutu’ atau ‘bug’. Kemudian istilah mencari si kutu program ini, sering disebut ‘debugging’.
Kalau kita mendapati syntax error, maka dapat dengan mudah dan cepat kita akan menemukannya. Hal ini karena biasanya akan muncul warning adanya penulisan yang salah dan biasanya akan disertai dengan nomor baris yang salah tersebut. Nah… kalau algoritmic error, proses pencariannya tidak mudah.
So… bagi para mahasiswaku atau pengunjung setia blog ini, bila program Anda dicompile tidak ada error, jangan bersenang-senang dahulu, karena tujuan proses compile itu hanya mencari ada tidaknya syntax error. Siapa tahu program Anda menyimpan si kutu :-)
OK… kita kembali ke laptop, eh salah… kembali ke teknik debugging :-)
Trus… sekarang bagaimana langkah debugging, bila program sudah jadi namun hasilnya salah? Ya… untuk proses ini, Anda harus mengeceknya step by step sesuai alur algoritma program yang Anda buat. Bagaimana cara mengeceknya? Kalau saya pribadi, atau yang sering saya lakukan adalah menampilkan output di setiap proses. Sedangkan proses setelah bagian yang sedang saya cek tersebut, saya nonaktifkan atau saya buat menjadi komentar.
Perhatikan contoh berikut ini. Contoh ini baru saja saya gunakan untuk menjelaskan teknik debugging ketika perkuliahan.
01.program cariKombinasi;
02.var n, m : integer;
03.    kombinasi : real;
04. 
05.function faktorial(x : integer) : real;
06.var i : integer;
07.    hasil : real;
08.begin
09.   hasil := 1;
10.   for i:=1 to x do
11.   begin
12.     hasil := hasil * i;
13.   end;
14.   faktorial := hasil;
15.end;
16. 
17.begin
18.   n := 3;
19.   m := 2;
20.   kombinasi := faktorial(n)/faktorial(n-m)*faktorial(m);
21.   write(kombinasi);
22.end.
Program di atas dibuat dengan tujuan untuk mencari hasil dari kombinasi n, m atau C(n, m). Dari contoh di atas, dipilih n = 3 dan m = 2. Menurut perhitungan kita, hasil yang benar dari kombinasi tersebut adalah 3. Namun apa yang terjadi bila program di atas dijalankan? Ya… dari sisi syntax error tidak ada, namun hasilnya adalah 12. Tentu hal ini salah.
Lantas… bagaimana mengetahui letak kesalahannya? Ya… untuk melakukan hal ini, kita harus mengecek terlebih dahulu apakah function faktorial() sudah berfungsi dengan baik atau belum. Untuk mengeceknya, ya… kita tambahkan saja perintah write(faktorial(n));
1.begin
2.   n := 3;
3.   m := 2;
4.   write(faktorial(n));
5.   { kombinasi := faktorial(n)/faktorial(n-m)*faktorial(m);
6.   write(kombinasi);}
7.end.
Oya… untuk baris perintah setelah write(faktorial(n)) ini hendaknya kita jadikan komentar dahulu supaya tidak ada interfensi dalam proses. Apabila dijalankan, maka akan muncul output 6. Ya… hasil ini benar karena kita menampilkan n! atau dalam hal ini 3!. Sehingga function faktorial() tidak ada masalah dan berfungsi dengan baik.
Selanjutnya akan kita cek untuk menghitung kombinasinya sendiri atau pada baris
1.kombinasi := faktorial(n)/faktorial(n-m)*faktorial(m);
Satu-satunya kemungkinan salah adalah di sini, karena proses inilah yang dilakukan tepat sebelum ditampilkan outputnya. Apabila kita perhatikan dengan benar, maka ada bagian yang salah yaitu pada pembagian. Ingat rumus mencari C(n, m). Rumus yang benar haruslah
1.kombinasi := faktorial(n)/(faktorial(n-m)*faktorial(m));
sehingga baris programnya menjadi
1.begin
2.   n := 3;
3.   m := 2;
4.   kombinasi := faktorial(n)/(faktorial(n-m)*faktorial(m));
5.   write(kombinasi);
6.end.
Nah… setelah diperbaiki, barulah program di atas akan menghasilkan output yang benar yaitu 3.
Sehingga kesimpulan dari teknik debug ini adalah ceklah output untuk setiap langkah proses dengan menampilkannya ke layar. Untuk menghindari interfensi dari baris program yang lain, hendaknya baris program di bawahnya atau selanjutnya, dibuat komentar (jangan dihapus) terlebih dahulu. Teknik ini bisa diterapkan untuk bahasa pemrograman yang lain.

Tidak ada komentar:

Poskan Komentar

ada saran ??