Mempelajari dan Meningkatkan Keterampilan Debugging Anda

Pemrogram menghabiskan persentase waktu yang tinggi untuk men-debug daripada menulis kode. Anda mungkin memiliki beberapa pelatihan dalam mempelajari bahasa atau kerangka kerja - tetapi bagaimana Anda belajar untuk memperbaiki cacat pada perangkat lunak Anda?

Ketika Anda jatuh cinta dengan pemrograman (atau setidaknya memutuskan itu adalah karier yang bermanfaat), Anda mungkin menganggapnya sebagai upaya kreatif. Anda akan mendesain perangkat lunak hebat, menulis kodenya, dan poof! —Itu akan bekerja dengan sempurna untuk pertama kalinya.

Ya. Baik.

Di dunia nyata, Anda menghabiskan banyak waktu untuk men-debug kode daripada menulis hal baru. Saya yakin saya bisa menggali beberapa persentase waktu pengembang yang tidak jelas yang dikhususkan untuk memperbaiki cacat daripada membuat fungsionalitas baru, tetapi saya ragu Anda perlu mendengar nomornya. Anda dapat dengan mudah membayangkan hari-hari yang Anda habiskan untuk mencari Bug From Hell, dan efeknya pada jadwal proyek Anda.

Sekarang, ada banyak cara bagi programmer untuk mempelajari keterampilan perangkat lunak baru, baik itu membaca buku, menghadiri konferensi teknologi, atau mengunjungi situs seperti JavaWorld.com. (Saya agak senang Anda melakukan yang terakhir.) Namun, ini biasanya berfokus pada alat, seperti bahasa atau kerangka kerja, dan bukan pada teknik-meta, seperti "Bagaimana menemukan bug itu dalam dua jam, bukan dua hari." Bahasa mungkin datang dan pergi, dan begitu juga dengan debugger IDE, tetapi kemampuan untuk membedakan di mana bug Anda bersembunyi adalah salah satu yang akan tetap bersama Anda selamanya.

Sebagian besar keterampilan belajar men-debug, tentu saja, adalah pengalaman. Itu mungkin pengalaman Anda sendiri, atau kesempatan untuk menjadi Belalang di Kaki Programmer Magister. Saya juga curiga bahwa beberapa orang memiliki bakat bawaan untuk memecahkan masalah (sama-sama relevan dengan memperbaiki mobil yang rusak sebagai aplikasi yang berperilaku buruk), dan kita yang tanpa itu hanya bisa cemburu.

Namun, beberapa di antaranya bisa dipelajari. Misalnya, salah satu pemrogram utama kenalan saya memiliki aksioma: Jika Anda telah mencari bug untuk waktu yang (relatif) lama dan tidak dapat menemukannya, dia berkata, "Anda mencari di tempat yang salah." Terdengar jelas, tapi pasti benar ... dan seberapa sering Anda membuang waktu mencari di modul XYZ ketika masalahnya ada di tempat lain?

Saya bertanya kepada beberapa pengembang tentang cara mereka mempelajari atau meningkatkan keterampilan debugging mereka. Sejumlah mengejutkan dari mereka berbicara tentang penguasaan debugger IDE atau beberapa keahlian alat lainnya, tetapi sebagian besar yang ingin saya ketahui adalah saran mereka untuk meningkatkan kemampuan seseorang untuk memperbaiki kesalahan. Berikut ringkasan singkat dari tanggapan mereka.

  1. Disiplin. Debugging adalah sebuah proses, kata salah satu pengembang, bukan serangkaian kejadian acak. Jangan mengubah kenop secara acak; ikuti proses eksekusi kode. Persis seperti memperbaiki mesin pemotong rumput, katanya. Apakah bagian A mendapatkan masukan yang dibutuhkan? Bagaimana dengan keluarannya? Jika tidak apa-apa, lanjutkan.
  2. Untuk meningkatkan keterampilan Anda, debug kode orang lain daripada milik Anda sendiri. Akan lebih mudah untuk melihat kesalahan dalam asumsi orang lain daripada melihat kesalahan Anda sendiri. Anda dapat melakukan ini sebagai bagian dari tinjauan kode lintas-peer dan debugging lintas-peer. Anda akan mengembangkan kemampuan untuk mengenali penyebab umum kerusakan lebih cepat, menjanjikan seorang pengembang, dan mengajari Anda untuk mengenali (dan meninggalkan) praktik pengembangan buruk Anda sendiri.
  3. Anggaplah Anda kompilernya. Temukan dan perbaiki kesalahan sebanyak yang Anda bisa sebelum menekan tombol Kompilasi. Sementara sebagian besar IDE modern menyertakan debugger terintegrasi (seperti Visual Studio's Intellisense), Anda akan belajar lebih sedikit dari otomatisasi mereka daripada Anda akan secara sadar memeriksa prosesnya. (Dengan cara yang sama Anda tidak akan pernah belajar mengeja dengan benar dengan mengandalkan pemeriksa ejaan untuk melakukan semua pekerjaan.)
  4. Belajar untuk memperbaiki bug sedini mungkin dalam proses pengembangan. Itu mungkin berarti sesuatu yang diformalkan, seperti pengembangan yang digerakkan oleh pengujian. Itu juga berarti mencurahkan waktu untuk men-debug desain Anda alih-alih beralih ke pengkodean.
  5. Debugging paling mudah jika Anda dapat menahan seluruh sistem di kepala Anda. Jangan membuat kesalahan dengan berfokus hanya pada satu bagian aplikasi. Perhatikan keterkaitan antar modul. Bacalah kode pada berbagai tingkat abstraksi, saran seorang programmer. "Menemukan bug adalah bagian tersulit, dan dibutuhkan pemahaman yang jelas tentang apa yang dilakukan beberapa bagian kode," katanya.
  6. Bagian dari nasihat yang sama, menurut saya, adalah saran orang lain: dapatkan pemahaman yang baik tentang sistem satu tingkat di bawah dari apa yang Anda kerjakan. "Jika Anda men-debug program level C sistem, ada baiknya mengetahui beberapa perakitan dan sesuatu tentang OS," jelas seorang insinyur utama perangkat lunak sistem. "Jika Anda men-debug aplikasi J2EE, ada baiknya mengetahui sesuatu tentang thread Java, RMI, dan GC." Dalam banyak kasus, dia menunjukkan, pesan kesalahan datang dari yang satu tingkat ke bawah. "Jika Anda dapat memahami apa artinya, itu akan membantu Anda mengetahui apa yang salah pada tingkat abstraksi Anda," jelasnya.

Beberapa pengembang juga merekomendasikan sumber daya tambahan. Diantaranya adalah buku David Agan, Debugging, yang menjanjikan sembilan aturan yang sangat diperlukan, dan Why Programs Fail: A Guide to Systematic Debugging, yang akan dirilis dalam edisi kedua. Pengembang yang merekomendasikan yang terakhir mengatakan itu mengajarkan pendekatan sistematis untuk debugging dengan banyak contoh langsung. Yang lain menyarankan esai online, Sepuluh keterampilan penguji perangkat lunak yang sangat efektif.

Saya suka semua jawaban itu, tetapi saya curiga ada lebih banyak hikmat yang bisa dibagikan. Bagaimana Anda mendapatkan keterampilan debugging? Bagaimana Anda membantu orang lain meningkatkan kemampuan mereka?

Artikel, "Belajar dan Meningkatkan Keterampilan Debugging" ini awalnya diterbitkan oleh JavaWorld.