Debugging adalah sebuah metode yang dilakukan oleh para pemrogram dan pengembang perangkat lunak untuk mencari dan mengurangi bug, atau kerusakan di dalam sebuah program komputer atau perangkat keras sehingga perangkat tersebut bekerja sesuai dengan harapan. Debugging cenderung lebih rumit ketika beberapa subsistem lainnya terikat dengan ketat dengannya, mengingat sebuah perubahan di satu sisi, mungkin dapat menyebabkan munculnya bug lain di dalam subsistem lainnya.
Bug dengan terjemahan langsung ke bahasa Indonesia adalah serangga atau kutu. Bug merupakan suatu kesalahan desain pada suatu perangkat keras komputer atau perangkat lunak komputer yang menyebabkan peralatan atau program itu tidak berfungsi semestinya. Bug umumnya lebih umum dalam dunia perangkat lunak dibandingkan dengan perangkat keras.
Kenapa dinamakan bug?
Tahun 1945 sewaktu ukuran komputer masih sebesar kamar, pihak militer Amerika Serikat menggunakan komputer yang bernama “Mark 1”. Suatu hari komputer ini tidak berfungsi dengan semestinya, setelah komputer itu diperiksa ternyata ada suatu bagian perangkat keras di mana terdapat serangga yang tersangkut. Setelah serangga itu diangkat dari perangkat keras, komputer dapat berfungsi dengan baik. Maka sejak saat itu kata bug lekat dengan masalah-masalah pada komputer. Debugging adalah proses menghilangkan bug dari suatu program.
Pengujian perangkat lunak adalah proses yang dapat direncanakan dan ditentukan secara sistematis. Desain test case dapat dilakukan, strategi dapat ditentukan, dan hasil dapat dievaluasi berdasarkan harapan-harapan yang ditentukan sebelumnya.
Debugging terjadi sebagai akibat dari pengujian yang berhasil. Jika test case mengungkap kesalahan, maka debugging adalah proses yang menghasilkan penghilangan kesalahan. Perekayasa perangkat lunak yang mengevaluasi hasil suatu pengujian sering dihadapkan pada indikasi “simtomatis” dari suatu masalah pernagkat lunak, yaitu bahwa manisfestasi eksternaldari kesalahan dan penyebab internal kesalahan dapat tidak memiliki hubungan yang jelas satu dengan lainnya. Proses mental yang dipahami secara buruk yang menghubungkan sebuah symptom dengan suatu penyebab disebut debugging.
Proses Debugging
Debugging bukan merupakan pengujian, tetapi selalu terjadi sebagai bagian akibat dari pengujian. Proses debungging dimulai dengan eksekusi terhadap suatu test case. Hasilnya dinilai, dan ditemukan kurangnya hubungan antara harapan dan yang sesungguhnya. Dalam banyak kasus, data yang tidak berkaitan merupakan gejala dari suatu penyebab pokok tetapi masih tersembunyi, sehingga perlu ada koreksi kesalahan.
Proses debugging akan selalu memiliki salah satu dari dua hasil akhir berikut:
- Penyebab akan ditemukan, dikoreksi, dan dihilangkan, atau
- Penyebab tidak akan ditemukan.
Dalam kasus yang terakhir, orang yang melakukan debugging mungkin mencurigai suatu penyebab, mendesainsuatu test case untuk membantu kecurigaannya, dan bekerja untuk koreksi kesalahan dengan gaya yang iterative.
Beberapa karakteristik bug memberi kunci :
- Gejala dan penyebab dapat jauh secara geografis, dimana gejala dapat muncul didalam satu bagian dari suatu program, sementara penyebab dapat ditempatkan pada suatu sisi yang terlepas jauh.
- Gejala dapat hilang (kadang-kadang) ketika kesalahan yang lain dibetulkan.
- Gejala dapat benar-benar disebabkan oleh sesuatu yang tidak salah (misalnya pembulatan yang tidak akurat).
- Simpton dapat disebabkan oleh kesalahan manusia yang tidak dapat dengan mudah ditelusuri.
- Gejala dapat merupakan hasil dari masalah timing, dan bukan dari masalah pemrosesan.
- Mungkin sulit untuk mereproduksi kondisi input secara akurat (misalnya aplikasi real time dimana pengurutan input tidak ditentukan).
- Gejala dapat sebentar-sebentar. Hal ini sangat umum pada system yang embedded yang merangkai perangkat lunak dan perangkat keras yang tidak mungkin dilepaskan.
- Gejala dapat berhubungan dengan penyebab yang didistribusikan melewati sejumlah tugas yang bekerja pada prosesor yang berbeda.
Selama debugging, kita menemukan kesalahan-kesalahan mulai dari gangguan yang halus (missal format output yang tidak betul) sampai katrastropis (misalnya kegagalan system yang menyebabkan kerusakan fisik atau ekonomis).
Sebagai akibat dari peningkatan keslahan, jumlah tekanan untuk menemukan kesalahan juga bertambah. Sering kali tekanan memaksa seorang pengembang perangkat lunak untuk membetulkan keslahan dan pada saat yang sama memunculkan lagi dua kesalahan baru.
Pertimbangan Psikologis
Sayangnya muncul banyak bukti bahwa kekuatan debugging adalah sifat bawaan manusia. Banyak orang yang cakap dalam hal ini, sementara banyak juga yang tidak. Menanggapi aspek manusia dari debugging. Shneiderman [SHN80] menyatakan :
Debugging merupakan salah satu dari berbagai bagian pemrograman yang membuat lebih frustasi. Debugging memiliki elemen pemecahan masalah atau pengganggu otak, yang bersama dengan penghindaran kesadaran bahwa Anda melakukan suatu kesalahan. Kekhawatiran yang meningkat dan keengganan untuk menerima, kesalahan akan meningkatkan kesulitan tugas. Sayangnya, ada keluhan yang sangat mendalam mengenai pembebasan dan pengurangan ketegangan ketika pada akhirnya bug ……… dikoreksi.
Meskipun mungkin sulit untuk mempelajari debugging, sejumlah pendekatan terhadap masalah tersebut dapat diusulkan. Kita akan melihat dalam sub bab selanjutnya.
Pendekatan-pendekatan Debugging
Tanpa memperhatikan pendekatan yang diambil, debugging memiliki satu sasaran yang diabaikan, untuk menemukan dan mengkoreksi penyebab kesalahan perangkat lunak. Sasaran tersebut direalisasi dengan suatu kombinasi evaluasi yang sistematis, intuisi, dan keberuntungan.
Bradley (BRA85) menggambarkan pendekatan Debugging dengan cara berikut :
Debugging adalah sebuah aplikasi langsung dari metodekeilmuan yang telah dikembangkan selama 2500 tahun. Dasar dari debugging adalah meletakkan sumber-sumber masalah (penyebab) dengan partisi biner melalui hipotesis kerja yang memperkirakan nilai-nilai baru yang akan diuji.
Ambillah contoh non-perangkat lunak sederhana, yaitu :
Lampu dirumah saya tidak bekerja. Bila tidak ada yang bekerja didalam rumah itu, penyebabnya tentu pada pemutus rangkaian utama atau sebab dari luar. Saya melihat sekeliling untuk melihat apakah lampu para tetangga juga mati. Saya memasukkan lampu yang dicurigai kedalam soket yang bekerja dan menyelidiki lampu rangkaian yang dicurigai. Begitulah berbagai pilihan hipotesa dan pengujian.
Secara umum, tiga kategoti pendekatan debugging dapat diusulkan (MYE79) :
- 1. Gaya yang kasar (Brute force)
Kategori debugging brute force mungkin merupakan yang paling umum dan metode yang paling efisien untuk mengisolasi penyebab kesalahan perangkat lunak. Kita mengaplikasikan metode debugging brute force bila semua yang lain telah gagal. Dengan menggunakan filosofi ”biarkan komputer menemukan kesalahan”, tempat sampah memori dipakai, penelusuran runtime dilakukan, dan program dibebani dengan statemen WRITE. Kita mengharapkan bahwa dimanapun didalam rawa informasi yang diproduksi, kita akan menemukan suatu kunci yang akan membawa kita kepada penyebab kesalahan. Meskipun banyaknya informasi yang dihasilkan pada akhirnya akan membawa kita meraih sukses, lebih sering dia menyebabkan kita menghambur-hamburkan usaha dan waktu. Kita harus memikirkannya terlebih dahulu.
- 2. Penelusuran balik (backtracking)
Backtracking adalah pendekatan debugging yang sangat umum yang dapat digunakan secara sukses didalam program yang kecil. Mulai pada sisi dimana suatu gejala diungkap, kode sumber ditelusuri balik (secara manual) samapai sisi penyebab ditemukan. Sayangnya, bila jumlah baris sumber bertambah, maka jumlah jalur balik potensial dapat sangat banyak.
- 3. Eliminasi penyebab
Cause elimination dimanisfestasikan oleh induksi atau deduksi serta mengawali konsep partisi biner. Data yang berhubungan dengan kejadian kesalahan dikumpulkan untuk mengisolasi penyebab potensial. Hipotesis penyebab dibuat dan data digunakan untuk membuktikan penolakan hipotesis tersebut. Sebagai alternatif, daftar semua penyebab yang mungkin dikembangkan dan dilakukan pengujian untuk mengeliminasi masing-masing kesalahan. Jika pengujian awal menunjukkan bahwa suatu hipotesis penyebab memberikan gambaran hasil yang jelas, maka data itu disaring sebagai usaha untuk mengisolasi bug.
Masing-masing pendekatan debugging tersebut dapat ditambah dengan piranti debugging. Kita dapat mengaplikasikan berbagai kompiler debugging yang luas, bantuan debugging yang dinamis (tracer), generator test case, ruang sisa memori dan peta cross-reference. Namun piranti bukanlah pengganti bagi evaluasi yang berhati-hati yang didasarkan atas dokumen desain perangkat lunak yang lengkap dan kode sumber yang jelas.
Sekali bug ditemukan, bug harus dibetulkan. Tetapi seperti telah kita catat, koreksi terhadap suatu bug dapat memunculkan kesalahan lain sehingga lebih banyak merugikan daripada menguntungkan.
Van Vleck (FAN89) mengusulkan tiga pertanyaan sederhana yang harus diajukan kepada perekayasa perangkat lunak sebelum melakukan koreksi yang menghilangkan penyebab suatu bug, yaitu :
- 1. Apakah penyebab bug direproduksi didalam bagian lain program tersebut?
Dalam berbagai situasi, kesalahan program disebabkan oleh sebuah contoh logika yang keliru yang dapat dibuat ulang ditempat lain. Pertimbangan eksplisit dari contoh logika tersebut akan menghasilkan penemuan kesalahan yang lain.
- 2. Apa ”bug selanjutnya,” yang akan dimunculkan oleh perbaikan yang akan dibuat?
Sebelum koreksi dibuat, kode sumber (atau lebih baik,desain) harus dievaluasi untuk memperkirakan pemasangan logika dan struktur data. Bila koreksi akan dilakukan pada bagian program yang akan dirangkai, maka harus ada perhatian khusus bila banyak perubahan dilakukan.
- 3. Apa yang dapat kita lakukan untuk menghindari bug ini didalam tempat pertama?
Pertanyaan ini merupakan langkah pertama untuk membangun pendekatan jaminan kualitas perangkat lunak statistik. Bila kita mengkoreksi proses dan produk, bug akan dihilangkan dari program yang ada dan dapat dieliminasi dari semua program selanjutnya.
ERROR HANDLING
1. Abstraksi
Error Handling adalah salah satu penanganan kesalahan (error) pada berbagai macam keadaan dalam pemrograman. Dengan adanya error handling ini maka setiap ada kesalahan , maka eksekusi program tidak akan dihentikan secara tiba-tiba, tetapi akan diteruskan ke baris program yang terdapat script penanganan kesalahan.
Dengan adanya Error Handling ini maka program akan semakin user friendly bagi penggunanya, dan akan mengatasi kesulitan bagi para programmer apabila ingin mendefinisikan suatu kejadian yang tidak diinginkan dieksekusi.
2. Pendahuluan
Pada saat membuat sebuah aplikasi web, penanganan error (error handling) merupakan hal yang sangat penting. Penanganan error yang standar di PHP sangat sederhana. Error dikirim ke browser berisi pesan error, nama file, baris kode ke berapa tempat terjadinya error. Tanpa penanganan error yang baik, tentunya pada saat terjadi error, error akan tampil di browser dan dilihat oleh semua pengguna. Hal ini bisa menimbulkan ancaman terhadap keamanan website. PHP telah menyediakan function function untuk penanganan error seperti dijelaskan di Error Handling and Logging.
3. Pembahasan
3.1 Penanganan Error Sederhana mengunakan function die()
Function die ( [string $message] ) berfungsi untuk menghentikan eksekusi baris kode berikutnya dan memberi output parameter optional $message. Contoh:
tanpa error handling
$connection = mysql_connect("localhost", "user", "password");
mysql_select_db("test");
$result = mysql_query("select * from nama_table");
while($row = mysql_fetch_array($result)){
echo $row['nama_field'];
}
Tanpa error handling seperti kode php diatas, pada saat tidak bisa melakukan koneksi ke database mysql, maka akan muncul pesan error seperti ini:
mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/var/run/mysql/mysql.sock' (2) in /home/ellyxc/public_html/tutorial/error/die.php on line 3
Warning: mysql_select_db() [function.mysql-select-db]: Can't connect to local MySQL server through socket '/var/run/mysql/mysql.sock' (2) in /home/ellyxc/public_html/tutorial/error/die.php on line 4
Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in /home/ellyxc/public_html/tutorial/error/die.php on line 4
Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/var/run/mysql/mysql.sock' (2) in /home/ellyxc/public_html/tutorial/error/die.php on line 5
Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/ellyxc/public_html/tutorial/error/die.php on line 5
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/ellyxc/public_html/tutorial/error/die.php on line 6
Tentu saja pengguna akan bingung melihat error di atas, dengan function die(), pesan error bisa diminimalisir seperti:
//dengan error handling
$connection = mysql_connect("localhost", "user", "password")
or die('Tidak bisa melalukan koneksi ke database');
mysql_select_db("test");
$result = mysql_query("select * from nama_table");
while($row = mysql_fetch_array($result)){
echo $row['nama_field'];
}
Pada saat tidak bisa melakukan koneksi ke database, kode di atas akan memberi output seperti ini
Tidak bisa melalukan koneksi ke database
3.2 Setting Error Reporting Level
PHP memberi kemampuan untuk menentukan error error apa saja yang ditampilkan menggunakan function error_reporting( [int $level ] ). Parameter $level bisa diisi dengan nilai nilai berikut:
Nilai
|
Konstanta
|
Deskripsi
|
1
|
E_ERROR
|
Fatal run-time errors. Error yang tidak bisa dihandel, seperti masalah alokasi memori. Eksekusi skrip berhenti.
|
2
|
E_WARNING
|
Run-time warnings (non-fatal errors). Eksekusi Skrip tidak berhenti.
|
4
|
E_PARSE
|
Compile-time parse errors. Error yang terjadi karena kesalahan penulisan kode php.
|
8
|
E_NOTICE
|
Run-time notices. Error yang mengindikasikan bahwa skrip bisa menimbulkan error yang lain.
|
256
|
E_USER_ERROR
|
Pesan error yang digenerate oleh user. Seperti E_ERROR, tapi digenerate menggunakan function trigger_error().
|
512
|
E_USER_WARNING
|
Pesan error yang digenerate oleh user. Seperti E_WARNING, tapi digenerate menggunakan function trigger_error().
|
1024
|
E_USER_NOTICE
|
Pesan error yang digenerate oleh user. Seperti E_NOTICE, tapi digenerate menggunakan function trigger_error().
|
2048
|
E_STRICT
|
Error yang memberikan sugesti perubahan pada kode Anda untuk memastikan interoperabilitas terbaik dan kompatibilitas kode php Anda.
|
30719
|
E_ALL
|
Menampilkan semua error kecuali E_STRICT.
|
Contoh penggunaan error_reporting() :
//menampilkan semua error
error_reporting(E_ALL);
//menampilkan semua error termasuk E_STRICT
error_reporting(E_ALL|E_STRICT);
//tidak menampilkan error
error_reporting(0);
3.3 Tidak Menampilkan Error
Dari pada menampilkan error yang tidak dimengerti oleh pengguna, terkadang lebih baik tidak menampilkan error sama sekali, tetapi hanya mencatat error yang terjadi ke dalam sebuah file. Untuk itu bisa gunakan kode di bawah.
error_reporting(E_ALL);
ini_set('display_errors', 'Off');
ini_set('log_errors', 'On');
ini_set('error_log', 'logs/error.log');
$connection = mysql_connect("localhost", "user", "password");
mysql_select_db("test");
$result = mysql_query("select * from nama_table");
while($row = mysql_fetch_array($result)){
echo $row['nama_field'];
}
Untuk tidak menampilkan error digunakan function ini_set ('display_errors', 'Off'); (baris ke-3). Di baris ke-5 untuk menyimpan error yang terjadi ke dalam file "logs/error.log". Pada saat terjadi error, file "logs/error.log" akan berisi data seperti ini :
[21-Nov-2010 11:57:56] PHP Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/var/run/mysql/mysql.sock' (2) in /home/ellyxc/public_html/tutorial/error/die.php on line 6
[21-Nov-2010 11:57:56] PHP Stack trace:
[21-Nov-2010 11:57:56] PHP 1. {main}() /home/ellyxc/public_html/tutorial/error/die.php:0
[21-Nov-2010 11:57:56] PHP 2. mysql_connect() /home/ellyxc/public_html/tutorial/error/die.php:6
Mengambil pilihan untuk tidak menampilkan error bisa membingungkan pengguna. Cara yang lebih baik adalah dengan membawa user ke halaman tertentu, untuk memberi tahu pengguna bahwa sedang terjadi error.
3.4 Membuat Custom Error Handler
Selain menyediakan penanganan error standar, PHP juga memberikan kemampuan untuk membuat sebuah function yang bertugas untuk menangani error yang terjadi yang disebut dengan Custom Error Handler. Sebuah Custom Error Handler memiliki format seperti ini
// error_funciton($error_level,$error_message, $error_file,$error_line,$error_context)
Contoh:
function customError($errorLevel,$errorMsg){
@session_start();
$_SESSION['error_msg'] = $errorMsg;
header("Location: error.php");
exit;
}
set_error_handler("customError");
error_reporting(E_ALL);
$connection = mysql_connect("localhost", "user", "password");
mysql_select_db("test");
$result = mysql_query("select * from nama_table");
while($row = mysql_fetch_array($result)){
echo $row['nama_field'];
}
Baris 2-7 merupakan contoh Custom Error Handler, pesan error disimpan ke dalam sebuah session, dan pengguna dibawa ke halaman "error.php" pada saat terjadi error. Di baris 8 digunakan function set_error_handler($handler); untuk menentukan Custom Error Handler yang digunakan pada saat terjadi error.
3.5 Men-generate atau Men-trigger Error
PHP memberikan kemampuan untuk mengenerate custom error message menggunakan function trigger_error(). Function ini bisa digunakan misalnya pada saat pengguna memasukkan karakter karakter ilegal, seperti memasukkan tag html. Contoh:
$input = "hurup tebal";
if(preg_match('/<(.+)>/', $input)){
trigger_error("anda tidak boleh memasukkan html tag");
}
Menggunakan trigger_error bersama Custom Error Handler
function customError($errorLevel,$errorMsg){
@session_start();
$_SESSION['error_msg'] = $errorMsg;
header("Location: error.php");
exit;
}
set_error_handler("customError", E_USER_WARNING);
$input = "hurup tebal";
if(preg_match('/<(.+)>/', $input)){
trigger_error("anda tidak boleh memasukkan html tag", E_USER_WARNING);
}
3.6 Mengirim Email Saat Terjadi Error
Bagi para programmer atau webmaster, mendapatkan email saat terjadi error sangat membantu untuk mengambil tindakan yang cepat dan bila diperlukan untuk memperbaiki kode yang ada. Untuk itu bisa menggunakan kode seperti:
function customError($errorLevel,$errorMsg){
echo "Error: [$errorLevel] $errstr
";
";
echo "Admin terlah diberi tahu";
error_log("Error: [$errorLevel] $errorMsg",1,
"admin@example.com","From: error@example.com");
}
set_error_handler("customError", E_USER_WARNING);
$input = "hurup tebal";
if(preg_match('/<(.+)>/', $input)){
trigger_error("anda tidak boleh memasukkan html tag", E_USER_WARNING);
}
4. Penutup
4.1 Kesimpulan
Error Handling sangat lah dibutuhkan oleh setiap program agar setiap terjadi kesalahan memiliki suatu penanganan khusus sehingga program tersebut menjadi user friendly, karena eksekusi program tidak akan dihentikan apabila terjadi suatu kesalahan melainkan eksekusi program akan diteruskan ke blok program error handling tersebut.
4.2 Saran
Bagi setiap programmer sebaiknya mempertimbangkan suatu blok error handling sebelum mulai membuat program. Karena hal ini sangat vital bagi proses eksekusi program tersebut. Jika programmer melupakan error handling maka dapat dipastikan bahwa program yang diciptakan tidak akan berjalan dengan sempurna, atau dengan kata lain program tersebut kurang dapat dijalankan dengan sempurna
Demikian lah pembahasan saya mengenai Error Handling dalam rangka menyelesaikan tugas Interaksi Manusia & Komputer (IMK) jurusan Sistem Komputer Universitas Gunadarma. Diharapkan pembahasan yang sedikit ini dapat dijadikan suatu pembelajaran dan bermanfaat bagi yang membacanya.
Sumber :
http://searchsoftwarequality.techtarget.com/definition/error-handling
http://www.php.net/manual/en/errorfunc.constants.php
http://www.w3schools.com/php/php_error.asp
2 komentar
komentarijin mengunduh materi untuk tambahan referensi pembelajaran, terima kasih
Replymakalah sudah share
Replybotol thinner