Diterbitkan: 16 September 2024
Kontributor: Camilo Quiroz-Vazquez

Apa itu debugging?

Debugging adalah proses menemukan, mengisolasi dan menyelesaikan kesalahan pengkodean yang dikenal sebagai bug dalam program perangkat lunak. Debugging membantu mengungkap penyebab kesalahan pengkodean, mencegah masalah fungsi perangkat lunak, dan meningkatkan kinerja perangkat lunak secara keseluruhan.

Kesalahan pengkodean seperti kesalahan logika, kesalahan waktu proses, kesalahan sintaksis, dan kesalahan semantik dapat menyebabkan kerusakan, output yang salah atau tidak akurat, kerentanan keamanan, dan kehilangan data. Tidak seperti pengujian perangkat lunak, yang memungkinkan pengembang untuk menyelidiki efek dari kesalahan ini dalam kode sumber program, debugging mencari akar masalah dan perbaikan kesalahan ini.  

Melalui proses debugging, pengembang perangkat lunak melakukan analisis akar masalah untuk memastikan bug yang ditemukan dalam program komputer diperbaiki dan tidak terjadi lagi. Bug dapat berdampak negatif pada stabilitas perangkat lunak, keandalan, dan pengalaman pengguna. Alat bantu dan strategi debugging membantu mengoptimalkan proses debugging.

Proses debugging

Debugging biasanya melibatkan enam langkah:

- Mereproduksi kondisi
- Menemukan bug
- Menemukan akar masalah
- Memperbaiki bug
- Menguji untuk memvalidasi perbaikan
- Mendokumentasikan prosesnya

Langkah 1: Mereproduksi kondisi
 

Proses debugging memerlukan kekhususan; para insinyur tidak dapat mengandalkan deskripsi masalah dari tangan kedua untuk mendiagnosisnya secara akurat. Oleh karena itu, langkah pertama dalam proses debugging adalah mereplikasi kondisi yang menyebabkan bug muncul. Mereproduksi bug memungkinkan programmer dan insinyur untuk mengamati kesalahan secara langsung dan mengumpulkan data kontekstual untuk sisa proses debugging.

Langkah 2: Menemukan bug
 

Langkah selanjutnya adalah menentukan sumber bug seakurat mungkin dengan meneliti kode secara menyeluruh dan meninjau log yang tersedia. Pada langkah ini, pengembang biasanya mengandalkan alat debugging yang memudahkan mereka untuk menelusuri potongan-potongan kode yang besar, daripada bekerja secara manual.

Langkah 3: Menentukan akar masalahnya
 

Pengembang menentukan apa yang menyebabkan bug dengan memeriksa logika dan alur kode dan bagaimana berbagai komponen kode berinteraksi dalam kondisi tertentu di mana bug terjadi.

Langkah 4: Memperbaiki bug
 

Langkah ini biasanya melibatkan pemecahan masalah dan merevisi kode untuk memperbaiki masalah serta mengkompilasi ulang dan menjalankan kembali perangkat lunak untuk memastikan bug telah diperbaiki. Revisi ini mungkin melibatkan beberapa iterasi karena upaya pertama dapat gagal atau secara tidak sengaja memunculkan bug baru. 

Sebagian besar pengembang menggunakan sistem kontrol versi untuk melacak perubahan, sehingga mereka dapat dengan mudah mengembalikan modifikasi yang tidak menyelesaikan masalah atau membuat masalah baru. 

Langkah 5: Menguji untuk memvalidasi perbaikan
 

Pengujian yang dijalankan setelah perbaikan bug meliputi:

  • Pengujian unit, yang menguji segmen kode individual yang diubah untuk memperbaiki bug
  • Pengujian integrasi, yang menguji seluruh modul yang berisi bug yang diperbaiki
  • Pengujian sistem, yang menguji seluruh sistem di mana modul yang diubah berjalan
  • Pengujian regresi, yang memastikan bahwa kode yang diperbaiki tidak memengaruhi kinerja aplikasi, yaitu, aplikasi tidak mengalami kemunduran karena perbaikan bug.

Langkah 6: Mendokumentasikan prosesnya
 

Sebagai langkah terakhir, pengembang mencatat perincian proses perbaikan, termasuk apa yang menyebabkan bug, bagaimana cara memperbaikinya, dan informasi lain yang relevan. Dokumentasi adalah alat yang berharga bagi programmer untuk referensi ketika bug serupa terjadi di masa depan.

Contoh debugging

Memahami jenis bug yang dihadapi suatu sistem memungkinkan para insinyur dan pengembang perangkat lunak menemukan cara yang tepat untuk memperbaiki kode yang rusak saat kesalahan muncul. Contoh kesalahan umum yang memerlukan debugging meliputi:

Kesalahan semantik
 

Sepotong kode yang melanggar aturan bahasa pengkodean menyebabkan kesalahan semantik. Tidak seperti kesalahan logis, yang menghasilkan output yang salah, kesalahan semantik tidak akan menghasilkan output yang berarti.

Kesalahan sintaksis
 

Kesalahan ini terjadi saat pengembang melewatkan elemen kode seperti tanda kurung, koma, atau kesalahan ketik lainnya. Tidak seperti bahasa manusia tertulis di mana kalimat dengan kesalahan ketik masih dapat dipahami, bagian kode yang hilang langsung menyebabkan kesalahan.

Kesalahan logis
 

Jenis bug ini mencakup sintaks yang secara teknis benar tetapi memiliki arah yang salah yang menyebabkan output yang tidak diinginkan. Karena sintaksnya benar, kesalahan ini bisa sulit dideteksi. Ketika sistem tidak langsung crash, lokasi persis dari kode yang salah dapat memakan waktu untuk ditemukan.

Kesalahan waktu proses
 

Kesalahan ini terjadi ketika aplikasi sedang berjalan atau memulai. Kesalahan waktu proses terkadang dapat diperbaiki dengan menyegarkan, memulai ulang, atau menginstal ulang aplikasi. Di lain waktu, hal ini dapat menjadi sinyal dari program yang membutuhkan lebih banyak memori atau jenis kesalahan lain seperti kesalahan logika.

Jenis debugging

Proses debugging bisa menantang dan menguras tenaga. Memahami berbagai pendekatan untuk proses debugging dapat membuat pengelolaan tugas lebih efektif.

Backtracking
 

Dalam pendekatan ini, pengembang bekerja mundur dari titik kesalahan terdeteksi untuk menemukan asal bug. Secara khusus, mereka menelusuri kembali langkah-langkah yang diambil program dengan kode sumber yang bermasalah untuk melihat di mana letak kesalahannya. Backtracking dapat efektif bila digunakan bersama debugger.   

Eliminasi penyebab
 

Teknik debugging yang berbasis hipotesis mengharuskan tim untuk berspekulasi tentang penyebab kesalahan dan menguji setiap kemungkinan secara independen. Pendekatan ini bekerja paling baik apabila tim familier dengan kode dan keadaan seputar bug tersebut.

Membagi dan menaklukkan
 

Ketika melakukan debugging basis kode yang besar, tim dapat membagi baris kode menjadi beberapa segmen—fungsi, modul, metode kelas, atau divisi logis lainnya yang dapat diuji—dan menguji masing-masing secara terpisah untuk menemukan kesalahannya. Ketika segmen masalah diidentifikasi, segmen tersebut dapat dibagi lebih lanjut dan diuji sampai sumber bug teridentifikasi.

Mencetak dan mencatat debug
 

Strategi debugging print dan log melibatkan penambahan pernyataan print atau "log" pada kode untuk menampilkan nilai variabel, tumpukan panggilan, alur eksekusi, dan informasi lain yang relevan. Pendekatan ini sangat berguna untuk melakukan debugging sistem secara bersamaan atau terdistribusi di mana urutan eksekusi dapat memengaruhi perilaku program.

Debugging bebek karet
 

Dalam pendekatan ini, pengembang “menjelaskan atau menjabarkan” kode, baris demi baris, ke benda mati apa pun. Iden pokoknya adalah bahwa dengan mencoba menjelaskan kode dengan lantang, pengembang dapat lebih memahami logikanya (atau kekurangannya) dan menemukan bug dengan lebih mudah.

Debugging otomatis
 

Proses debug otomatis bergantung pada analitik, kecerdasan buatan (AI) , dan algoritma machine learning untuk mengotomatiskan satu atau beberapa langkah proses debug. Alat bantu debugging yang didukung AI dapat menelusuri kumpulan kode yang besar dengan lebih cepat untuk mengidentifikasi kesalahan atau mempersempit bagian kode yang kemudian dapat diperiksa secara lebih menyeluruh oleh pengembang.

Sistem otomatis dapat mereplikasi baris kode dan mengotomatiskan pengujian untuk memverifikasi bahwa sistem bekerja sebagaimana dimaksud. Otomatisasi memainkan peran besar dalam integrasi berkelanjutan (CI) dan pengiriman berkelanjutan (CD), dua pendekatan yang mempercepat pengujian dan penerapan kode baru.

Debugging brute force  

Biasanya diterapkan ketika metode lain gagal, debugging brute force melibatkan penelusuran seluruh basis kode, baris demi baris untuk mengidentifikasi sumber masalah. Pendekatan yang memakan waktu ini juga dapat berguna untuk melakukan debugging program kecil ketika insinyur atau programmer yang melakukan debugging tidak terbiasa dengan basis kode yang ada.

 

Alat debugging

Debugger adalah alat bantu dan API canggih yang mengoptimalkan pengembangan perangkat lunak dengan menemukan kesalahan pengodean dalam sistem operasi atau proses pengembangan aplikasi. Debugger mewakili bisnis yang besar dan berkembang. Dengan lingkungan aplikasi dan program komputer dan seluler yang terus berkembang, tidak mengherankan bahwa pasar debugger global diproyeksikan akan tumbuh secara signifikan pada akhir dekade1 .

Perusahaan menginvestasikan jutaan dalam pengembangan alat debugging canggih (seperti chatbot AI yang dapat men-debug kode)2  dan peneliti universitas menciptakan alat yang dapat men-debug video game secara mandiri3 dan men-debug bahasa pemrograman khusus domain4.

Alat dan teknologi bisa sangat bervariasi dalam kemampuannya, tetapi pada dasarnya, semuanya menawarkan antarmuka baris perintah yang membantu organisasi menemukan dan memperbaiki masalah bug. Sebagian besar juga menawarkan fitur debugging jarak jauh dan tutorial yang membuat perangkat lunak tersebut lebih mudah digunakan oleh para pemula.

Contoh alat debugging meliputi:

Lingkungan pengembangan terintegrasi (IDE)
 

IDE menawarkan pemrogram komputer fitur yang komprehensif untuk pengembangan perangkat lunak. Banyak IDE seperti Visual Studio, Eclipse, dan PyCharm hadir dengan "mode debug." Alat debugging bawaan ini memungkinkan pengembang untuk menjalankan kode baris demi baris (langkah debugging), menghentikan eksekusi program pada titik-titik tertentu (breakpoint), dan memeriksa keadaan variabel dan memori kapan saja, di antara kemampuan lainnya. 

IDE juga tersedia sebagai plug-in sumber terbuka yang kompatibel dengan berbagai bahasa pemrograman seperti Java, Python, JavaScript, dan TypeScript serta bahasa skrip seperti PHP.

Debugger mandiri
 

Debugger mandiri seperti GNU Debugger (GDB) menawarkan fitur debugging tingkat lanjut termasuk breakpoint bersyarat dan titik pantau. Debugger seperti ini juga memfasilitasi reverse debugging, yaitu ketika programmer menjalankan program mundur. Debugger mandiri cenderung lebih tangguh dan serbaguna daripada debugger yang dibangun ke dalam IDE atau developer tools lainnya, tetapi juga memiliki kurva pembelajaran yang lebih curam bagi pengguna dan membutuhkan lebih banyak keahlian teknis. 

Utilitas pencatatan
 

Alat-alat ini menyediakan cara untuk mencatat status program di berbagai titik dalam kode. Catatan kemudian dapat dianalisis untuk menemukan anomali atau pola bermasalah. Pencatatan berguna untuk mengatasi masalah bug yang terjadi di lingkungan produksi, di mana debugging interaktif mungkin tidak dapat dilakukan. 

Penganalisis kode statis
 

Alat analisis kode statis menganalisis kode tanpa menjalankannya, mencari potensi kesalahan dan memperbaiki bug serta penyimpangan dari standar pengkodean. Alih-alih berfokus pada sintaksis (seperti yang dilakukan oleh interpreter dan kompiler), alat-alat ini menganalisis semantik kode sumber, sehingga membantu pengembang mendeteksi kesalahan pemrograman yang umum dan menerapkan gaya pengkodean yang konsisten. 

Alat analisis dinamis
 

Pada dasarnya kebalikan dari penganalisis kode statis, alat analisis dinamis memantau perangkat lunak saat berjalan untuk mendeteksi masalah seperti kebocoran sumber daya atau masalah konkurensi. Alat ini membantu tim pengembangan menangkap bug yang mungkin terlewatkan oleh analisis statis, seperti kebocoran memori atau buffer yang meluap.

Profiler kinerja
 

Profiler kinerja memungkinkan pengembang mengidentifikasi hambatan kinerja dalam kode mereka. Sistem ini dapat mengukur penggunaan CPU, penggunaan memori, dan operasi IO, sehingga dapat membantu menemukan operasi yang lambat dan tidak efisien.

Debugging vs. pengujian

Pengujian dan debugging adalah proses pelengkap dalam pengembangan kode baru. Meskipun hasilnya berbeda, pengujian dan debugging digunakan untuk menghasilkan kode yang bebas dari kesalahan.

Pengujian memungkinkan pengembang perangkat lunak untuk memahami apa yang terjadi pada sistem ketika bug terjadi. Pengujian ini membantu pengembang mengetahui kapan sebuah sistem mengalami kegagalan dan dampak yang mungkin ditimbulkan oleh kegagalan tersebut terhadap sebuah perangkat lunak. Pengujian otomatis memungkinkan pengembang untuk menjalankan pengujian berkelanjutan pada kode baru untuk mendapatkan insight tentang berbagai skenario. Pengujian adalah bagian penting dalam pengembangan perangkat lunak, tetapi tidak menjelaskan mengapa suatu kesalahan terjadi.

Strategi dan alat debugging adalah apa yang digunakan pengembang untuk menemukan akar masalah kesalahan, memperbaikinya, dan mendokumentasikannya untuk mencegah kesalahan tersebut terulang kembali. Ketika digunakan bersama-sama, debugging dan pengujian membantu tim membangun pendekatan yang efisien untuk mengembangkan kode dan menciptakan produk piranti lunak yang lebih baik.

Solusi terkait
IBM Instana Observability

Platform Instana Observability menyediakan data kinerja waktu nyata, lengkap dengan semua konteks, untuk semua tim Anda. Visibilitas full-stack otomatis, granularitas 1 detik, dan 3 detik untuk mengirim notifikasi memungkinkan identifikasi cepat untuk mencegah dan memperbaiki masalah.

Jelajahi IBM Instana Observability Minta demo IBM Instana
IBM Turbonomic

Platform pengoptimalan biaya hybrid cloud IBM Turbonomic memungkinkan Anda untuk terus mengotomatisasi tindakan penting secara real time yang secara proaktif memberikan penggunaan sumber daya komputasi, penyimpanan, dan jaringan yang paling efisien untuk aplikasi Anda di setiap lapis tumpukan. 

Jelajahi IBM Turbonomic Coba Turbonomic secara gratis
IBM Cloud Pak untuk AIOps

Dapatkan visibilitas ke data dan dependensi di seluruh lingkungan TI dengan alat yang didukung AI yang membantu mengatasi manajemen dan remediasi insiden.

Jelajahi IBM Cloud Pak for AIOPs Coba tur mandiri
Ambil langkah selanjutnya

IBM Debug for z/OS menawarkan debugging dan cakupan kode untuk aplikasi z/OS yang ditulis dalam bahasa COBOL, PL/I, C/C++, dan Assembler.

IBM Debug for z/OS
Catatan kaki

1 "Global software debugging market analysis [2023-2030," Benzinga, 5 September 2022
2 "Google’s Bard AI chatbot can now generate and debug code," TechCrunch+, 12 April 2023
3 "Autonomously debugging video games." University of Southern California-Viterbi School of Engineering, 5 April 2023
4 "An easier way to get bugs out of programming languages," MIT News, 7 April 2023