Ulasan David A. Wheeler tentang “Debugging” oleh David J. Agans


2 Maret 2004

Jarang sekali Anda menemukan yang klasik, tapi saya rasa saya telah menemukan klasik baru untuk pengembang perangkat lunak dan perangkat keras komputer. Itu milik David J. Agan
Debugging: 9 Aturan yang Sangat Diperlukan untuk Menemukan Masalah Perangkat Lunak dan Perangkat Keras yang Paling Sulit Dipahami sekalipun
(ISBN 0814471684). Buku ini menjelaskan dasar-dasar menemukan dan memperbaiki bug (setelah bug terdeteksi), bukan teknologi tertentu. Ini yang terbaik bagi pengembang yang masih pemula atau yang hanya cukup berpengalaman, namun bahkan para profesional lama pun akan menemukan pengingat berguna tentang hal-hal yang mereka tahu harus mereka lakukan tetapi mereka lupakan karena terburu-buru. Buku ini akan membantu Anda memperbaiki bug yang tidak dapat dihindari tersebut, terutama jika Anda bukan ahli dalam debugging. Sulit untuk menyimpan pengalaman; buku ini berfungsi dengan baik. Ini adalah buku yang saya harap akan berguna bertahun-tahun dari sekarang.

Keseluruhan buku ini berkisar pada “sembilan aturan”. Setelah pengenalan umum dan daftar peraturan, ada satu bab untuk setiap peraturan. Masing-masing bab ini menjelaskan aturan tersebut, menjelaskan mengapa aturan tersebut ditetapkan, dan mencakup beberapa “sub-aturan” yang menjelaskan cara menerapkan aturan tersebut. Yang paling penting, ada banyak “kisah perang” yang menyenangkan untuk dibaca dan ilustrasi yang bagus tentang bagaimana menerapkan aturan tersebut dalam praktik.

Karena keseluruhan buku ini berkisar pada sembilan aturan, mungkin ada baiknya untuk memahami buku ini dengan membaca sekilas aturan dan sub-aturannya:

  1. Pahami sistemnya: Baca manualnya, baca semuanya secara mendalam, ketahui dasar-dasarnya, ketahui peta jalannya, pahami alat Anda, dan cari detailnya.
  2. Membuatnya gagal: Lakukan lagi, mulai dari awal, rangsang kegagalan, jangan simulasikan kegagalan, temukan kondisi tidak terkendali yang membuatnya terputus-putus, catat semuanya dan temukan tanda-tanda bug yang terputus-putus, jangan terlalu percaya pada statistik, ketahuilah itu “itu” Bisa terjadi, dan jangan pernah membuang alat debugging.
  3. Berhentilah berpikir dan lihat (dapatkan data terlebih dahulu, jangan hanya melakukan perbaikan rumit berdasarkan tebakan): Lihat kegagalannya, lihat detailnya, bangun instrumentasinya, tambahkan instrumentasinya, jangan takut untuk mendalami, hati-hati terhadap Heisenberg, dan tebak saja untuk memfokuskan pencarian.
  4. Bagilah dan taklukkan: Persempit pencarian dengan perkiraan yang berurutan, dapatkan rentangnya, tentukan sisi bug mana yang Anda alami, gunakan pola pengujian yang mudah dikenali, mulai dengan yang buruk, perbaiki bug yang Anda ketahui, dan perbaiki kebisingannya terlebih dahulu.
  5. Ubah satu hal pada satu waktu: Pisahkan faktor kunci, pegang batang kuningan dengan kedua tangan (pahami apa yang salah sebelum memperbaikinya), ubah pengujian satu per satu, bandingkan dengan pengujian yang bagus, dan tentukan apa yang Anda ubah sejak terakhir kali pengujian berhasil.
  6. Simpan jejak audit: Tuliskan apa yang Anda lakukan dalam urutan apa dan apa yang terjadi sebagai hasilnya, pahami bahwa detail apa pun bisa menjadi hal yang penting, hubungkan kejadian-kejadian, pahami bahwa jalur audit untuk desain juga bagus untuk pengujian, dan tuliskan!
  7. Periksa stekernya: Pertanyakan asumsi Anda, mulai dari awal, dan uji alatnya.
  8. Dapatkan tampilan segar: Mintalah wawasan baru (menjelaskan masalahnya pada manekin mungkin bisa membantu!), memanfaatkan keahlian, mendengarkan suara pengalaman, mengetahui bahwa bantuan ada di sekitar Anda, jangan bangga, laporkan gejalanya (bukan teori), dan Sadarilah bahwa Anda tidak harus yakin.
  9. Jika Anda tidak memperbaikinya, itu tidak diperbaiki: Periksa apakah sudah benar-benar diperbaiki, periksa apakah memang perbaikan Anda yang memperbaikinya, ketahuilah bahwa tidak pernah hilang dengan sendirinya, perbaiki penyebabnya, dan perbaiki prosesnya.

Daftar ini sendiri terlihat kering, namun penjelasan rinci dan kisah perang membuat keseluruhan buku menjadi hidup. Banyak kisah perang yang membahas secara mendalam detail teknis; beberapa orang mungkin menganggap detailnya berlebihan, namun saya mendapati bahwa detailnya sangat baik dalam membantu prinsip-prinsip menjadi nyata dalam cara yang praktis. Banyak cerita perang yang membahas tentang teknologi yang sudah ketinggalan zaman, namun karena prinsipnya adalah inti permasalahannya, maka hal tersebut tidak menjadi masalah. Tidak semua cerita perang tentang komputasi; ada cerita lucu tentang pemasangan kabel rumah, misalnya. Namun jika Anda tidak tahu apa pun tentang perangkat keras dan perangkat lunak komputer, Anda tidak akan bisa mengikuti banyak contoh.

Setelah penjelasan rinci tentang peraturan, sisa buku ini memiliki satu cerita yang menunjukkan semua peraturan yang berlaku, serangkaian “latihan mudah untuk pembaca”, tip untuk meja bantuan, dan kata penutup.

Ada banyak poin bagus di sini. Salah satu yang paling menonjol adalah “berhenti berpikir dan melihat”. Terlalu banyak orang yang mencoba “memperbaiki” sesuatu berdasarkan dugaan, bukannya mengumpulkan dan mengamati data untuk membuktikan atau menyangkal hipotesis. Prinsip lain yang menonjol adalah “jika Anda tidak memperbaikinya, maka itu tidak diperbaiki;” ada beberapa vendor yang ingin saya beri saran itu. Keseluruhan diskusi tentang “rangsang kegagalan, jangan simulasikan kegagalan” tidak dijelaskan sejelas sebagian besar buku ini, namun ini adalah poin valid yang layak untuk dipahami.

Saya sangat mengapresiasi diskusi Agans tentang masalah-masalah yang sewaktu-waktu (khususnya dalam “Make it Fail”). Masalah yang terjadi secara berkala biasanya merupakan masalah yang paling sulit untuk diatasi, dan penulis memberikan saran langsung tentang cara mengatasinya. Yang aneh adalah meskipun dia menyebut Heisenberg, dia tidak pernah menyebut istilah itu
“Heisenbug”istilah jargon umum dalam pengembangan perangkat lunak (Heisenbug adalah bug yang menghilangkan atau mengubah perilakunya ketika seseorang mencoba menyelidiki atau mengisolasinya). Setidaknya sebuah catatan sudah sesuai.

Sampul belakang memuat sejumlah dukungan, termasuk satu dari seseorang yang disebutkan namanya Rob Malda. Tapi jangan khawatir, bukunya bagus kok :-).

Penting untuk dicatat bahwa ini adalah buku tentang dasar-dasar debugging, dan berbeda dari kebanyakan buku lain yang berhubungan dengan debugging. Ada banyak buku lain tentang debugging, seperti karya Richard Stallman dkk
Melakukan debug dengan GDB: Debugger Tingkat Sumber GNU. Namun teks-teks lain ini biasanya berkonsentrasi terutama pada teknologi tertentu dan/atau pada penjelasan perintah alat, bukan pada prinsip-prinsip debugging yang tidak lekang oleh waktu. Beberapa (seperti karya Norman Matloff

Panduan untuk Proses Debug yang Lebih Cepat dan Tidak Membuat Frustasi
) memiliki beberapa saran umum tentang debugging, tetapi tidak seperti buku Agans. Ada banyak buku tentang pengujian, seperti karya Boris Beizer Teknik Pengujian Perangkat Lunaknamun mereka cenderung menekankan cara membuat pengujian untuk mendeteksi bug, dan kurang menekankan cara memperbaiki bug setelah bug terdeteksi. Tentu saja, setelah Anda menemukan bug, Anda harus menambahkan pengujian untuk bug tersebut di rangkaian pengujian regresi Anda, tetapi pengujian (termasuk pengujian regresi) berada di luar cakupan buku Agans. Buku Agans berkonsentrasi pada gambaran besar untuk debugging; buku-buku lain ini saling melengkapi.

Men-debug memiliki situs web yang menyertainya di
http://www.debuggingrules.comtempat Anda dapat menemukan berbagai tambahan kecil dan tautan ke informasi terkait. Secara khusus, situs web ini memiliki poster lucu berisi sembilan peraturan yang dapat Anda unduh dan cetak.

Tidak ada buku yang sempurna, jadi inilah keluhan dan harapan saya:

  1. Sub-aturan sangat penting untuk memahami aturan, tetapi tidak ada “daftar induk” di buku atau situs web yang menampilkan semua aturan dan sub-aturan dalam satu halaman. Akhir bab tentang aturan tertentu merangkum sub-aturan untuk satu aturan tersebut, namun tentunya akan lebih mudah jika semuanya ada di satu tempat. Jadi, cetaklah daftar sub-aturan di atas setelah Anda membaca bukunya.

  2. Buku ini membuat saya mengharapkan saran yang lebih rinci tentang teknologi umum tertentu. Ini mungkin tidak adil, karena penulis mencoba memberikan nasihat abadi daripada tutorial “cara menggunakan alat X”. Namun akan sangat berguna untuk memberikan saran umum yang baik, saran spesifik, dan contoh pendekatan apa yang harus diambil untuk jenis alat yang umum (seperti debugger simbolik, probe logika digital, dll.), alat khusus yang banyak digunakan (seperti ddd on gdb), dan masalah umum. Bahkan setelah alat khusus tersebut hilang, saran tersebut dapat membantu Anda menggunakan alat tersebut di kemudian hari. Sedikit dari hal ini diisyaratkan di bagian “kenali alat Anda”, tapi saya ingin melihat lebih banyak lagi. Vendor sering kali bertanya-tanya tentang apa yang bisa dilakukan alat mereka, namun jarang menjelaskan kelemahan mereka atau bagaimana menerapkannya dalam konteks yang lebih luas.

  3. Mungkin diperlukan buku lain yang menggunakan aturan yang sama, namun memperluasnya untuk memecahkan masalah yang sewenang-wenang. Sejujurnya, aturan tersebut berlaku untuk banyak situasi di luar komputasi, namun cerita perang terlalu teknis untuk dipahami oleh orang yang bukan komputer.

Tapi seperti yang Anda tahu, menurut saya ini adalah buku yang bagus. Dalam arti tertentu, apa yang dikatakannya adalah “jelas”, tetapi hal ini hanya menjadi jelas jika semua dasar-dasarnya sudah jelas. Banyak tim olahraga mengetahui dasar-dasarnya, namun gagal menerapkannya secara konsisten – dan gagal karenanya. Para pemula perlu mempelajari dasar-dasarnya, dan para profesional perlu sesekali mengingatkannya; buku ini adalah cara yang baik untuk mempelajari atau mengingatkan mereka. Dapatkan buku ini.


titik potong
diposting

versi sebelumnya dari ulasan ini

pada tanggal 24 Februari 2004.

David A. Wheeler adalah pakar dalam pengembangan program aman dan analisis kuantitatif perangkat lunak sumber terbuka/Perangkat Lunak Bebas. Dia tinggal di Virginia Utara.

Sumber