Mempelajari dan Meningkatkan Kemahiran Menyahpepijat Anda

Pengaturcara menghabiskan peratusan masa yang tinggi untuk membuat debug daripada menulis kod. Anda mungkin mempunyai latihan dalam mempelajari bahasa atau kerangka kerja - tetapi bagaimana anda belajar untuk memperbaiki kecacatan pada perisian anda?

Apabila anda jatuh cinta dengan pengaturcaraan (atau sekurang-kurangnya memutuskan bahawa ia adalah kerjaya yang baik), anda mungkin menganggapnya sebagai usaha kreatif. Anda akan merancang perisian yang hebat, menulis kod, dan poof! - Ia berfungsi dengan sempurna pada kali pertama.

Yeah. Betul.

Di dunia nyata, anda menghabiskan banyak masa kod penyahpepijatan daripada menulis perkara baru. Saya yakin saya dapat menggali peratusan masa pembangun yang tidak jelas yang dikhaskan untuk memperbaiki kecacatan daripada membuat fungsi baru, tetapi saya ragu anda perlu mendengar nombornya. Anda dapat dengan mudah menggambarkan hari yang anda habiskan untuk mencari Bug From Hell, dan kesannya pada jadual projek anda.

Sekarang, ada banyak cara yang dapat dilakukan oleh pengaturcara untuk mempelajari kemahiran perisian baru, sama ada membaca buku, menghadiri persidangan teknologi, atau mengunjungi laman web seperti JavaWorld.com. (Saya agak senang anda melakukan yang terakhir.) Namun, ini biasanya memusatkan perhatian pada alat, seperti bahasa atau kerangka kerja, dan bukan pada teknik meta, seperti "Bagaimana mencari bug itu dalam dua jam dan bukannya dua hari." Bahasa mungkin datang dan pergi, begitu juga dengan debug IDE, tetapi kemampuan untuk mengetahui di mana batu yang disembunyikan bug anda adalah bahasa yang akan kekal bersama anda selamanya.

Sebilangan besar kemahiran belajar membuat debug adalah, tentu saja, pengalaman. Itu mungkin pengalaman anda sendiri, atau kesempatan untuk menjadi Belalang di Kaki Pengaturcara Master. Saya juga mengesyaki bahawa ada orang yang mempunyai bakat semula jadi untuk menyelesaikan masalah (sama-sama relevan dengan memperbaiki kereta yang rosak sebagai aplikasi yang tidak berfungsi), dan mereka yang tanpa itu hanya boleh cemburu.

Walau bagaimanapun, beberapa perkara ini dapat dipelajari. Sebagai contoh, seorang pengaturcara utama kenalan saya mempunyai aksioma: Sekiranya anda sudah lama mencari bug dan tidak dapat menemuinya, dia berkata, "Anda mencari di tempat yang salah." Kedengaran jelas, tetapi pastinya benar ... dan berapa kerap anda membuang masa melihat modul XYZ ketika masalahnya berada di tempat lain sepenuhnya?

Saya meminta beberapa pembangun untuk mengetahui cara mereka belajar atau meningkatkan kemahiran penyahpepijatan mereka. Sebilangan besar mengejutkan mereka bercakap tentang penguasaan debugger IDE atau beberapa kepakaran alat lain, tetapi kebanyakan yang saya ingin tahu adalah nasihat mereka untuk meningkatkan kemampuan seseorang untuk memperbaiki kesalahan. Berikut adalah ringkasan jawapan mereka.

  1. Berdisiplin. Penyahpepijatan adalah satu proses, kata seorang pembangun, bukan rangkaian peristiwa rawak. Jangan ubah tombol secara rawak; ikuti proses pelaksanaan kod. Sama seperti memperbaiki mesin pemotong rumput, katanya. Adakah bahagian A mendapat input yang diperlukannya? Bagaimana dengan output? Sekiranya tidak, teruskan.
  2. Untuk meningkatkan kemahiran anda, nyahpepijat kod orang lain daripada kod anda sendiri. Akan lebih mudah untuk melihat kesalahan pada anggapan orang lain daripada melihat kesalahan anda sendiri. Anda mungkin melakukannya sebagai sebahagian daripada tinjauan kod cross-peer dan debugging cross-peer. Anda akan mengembangkan kemampuan untuk mengenali penyebab umum kecacatan dengan lebih cepat, berjanji kepada satu pembangun, dan mengajar anda untuk mengenali (dan meninggalkan) amalan pembangunan buruk anda sendiri.
  3. Berpura-pura anda penyusun. Cari dan betulkan sebanyak mungkin kesalahan sebelum menekan butang Kompilasi. Walaupun kebanyakan IDE moden merangkumi debugers bersepadu (seperti Visual Studio Intellisense), anda akan belajar lebih sedikit daripada automasi mereka daripada yang anda lakukan daripada secara sedar memeriksa prosesnya. (Dengan cara yang sama anda tidak akan belajar mengeja dengan betul dengan bergantung pada pemeriksa ejaan untuk melakukan semua pekerjaan.)
  4. Belajar untuk memperbaiki bug seawal proses pembangunan yang anda boleh. Itu mungkin bermaksud sesuatu yang diformalkan, seperti pengembangan berdasarkan ujian. Itu juga bermaksud meluangkan masa untuk menyahpepijat reka bentuk anda dan bukannya menggunakan pengkodan.
  5. Menyahpepijat paling mudah apabila anda dapat memegang keseluruhan sistem di kepala anda. Jangan membuat kesalahan hanya memusatkan perhatian pada satu bahagian aplikasi sahaja. Perhatikan hubungan antara modul. Baca kod pada pelbagai tahap pengabstrakan, dinasihatkan kepada seorang pengaturcara. "Mencari bug adalah bahagian yang paling sukar, dan memerlukan pemahaman yang jelas tentang apa yang dilakukan oleh beberapa kod," katanya.
  6. Sebahagian daripada nasihat yang sama, saya fikir, adalah cadangan orang lain: dapatkan pemahaman yang baik mengenai sistem satu tahap dari yang anda sedang kerjakan. "Sekiranya anda melakukan penyahpepijatan program sistem C tahap, ini berguna untuk mengetahui beberapa pemasangan dan sesuatu mengenai OS," jelas seorang jurutera utama perisian sistem. "Sekiranya anda menyahpepijat aplikasi J2EE, ada baiknya mengetahui sesuatu tentang jalinan Java, RMI dan GC." Dalam banyak kes, dia menunjukkan, mesej ralat berasal dari tahap satu ke bawah. "Sekiranya anda dapat memahami apa maksudnya, ini akan membantu anda mengetahui apa yang salah pada tahap pengabstrakan anda," jelasnya.

Beberapa pembangun juga mencadangkan sumber tambahan. Di antaranya adalah buku David Agan, Debugging, yang menjanjikan sembilan peraturan yang sangat diperlukan, dan Mengapa Program Gagal: Panduan untuk Debugging Sistematik, yang akan dilancarkan dalam edisi kedua. Pembangun yang mengesyorkan yang terakhir mengatakan bahawa ia mengajar pendekatan sistematik untuk melakukan debug dengan banyak contoh langsung. Yang lain mencadangkan karangan dalam talian, Sepuluh kemahiran penguji perisian yang sangat berkesan.

Saya suka semua jawapan itu, tetapi saya rasa ada banyak hikmah untuk dikongsi. Bagaimana anda memperoleh kemahiran debugging? Bagaimanakah anda telah menolong orang lain untuk memperbaikinya?

Kisah ini, "Belajar dan Meningkatkan Kemahiran Menyahpepijat Anda" pada asalnya diterbitkan oleh JavaWorld.