Mengikuti aturan Pareto, seorang programmer menghabiskan hanya 20% dari waktunya untuk hal-hal yang sangat berguna.
Saya menghabiskan 80% dari waktu saya debugging, memperbaiki hal-hal kecil untuk membuat semuanya berfungsi.
Apakah ada cara untuk mengurangi waktu debugging?
Jawaban:
Kode dalam Agda atau Coq . Setelah kode Anda dikompilasi, itu akan berfungsi. Jika terlalu hardcore, pilih bahasa dengan sistem tipe yang lebih lemah, misalnya, Haskell atau F #.
Tapi tetap saja, dalam kebanyakan kasus Anda akan jauh lebih produktif menghabiskan 20% dari waktu Anda untuk pengkodean dan 80% untuk pengujian dan debugging. 100% seminggu jauh lebih dari 20% dalam satu jam. Jika debugging adalah apa yang Anda butuhkan untuk menyelesaikan sesuatu, daripada debugging bukanlah buang-buang waktu dan Anda tidak perlu repot dengan "meningkatkan" proporsi ini.
sumber
Pengujian unit.
Setelah saya mulai menerapkan pengujian unit saya menemukan bahwa kode yang saya tulis menjadi lebih terstruktur. Saat itu lebih mudah untuk menghindari dan menemukan bug. Saya menghabiskan lebih sedikit waktu untuk debugging, tetapi lebih banyak waktu dengan menulis unit test.
Saya juga berpikir bahwa waktu yang diinvestasikan dalam unit test memiliki pengembalian investasi yang lebih baik daripada debugging. Setelah sesi debug saya baru saja memperbaiki kode. Bug yang sama dapat muncul beberapa minggu kemudian dan saya harus men-debug lagi. Jika saya menulis unit test bug didokumentasikan sebagai unit test dan kemudian bertindak sebagai uji regresi. Jika bug muncul lagi, unit test mengungkapkan ini kepada saya.
sumber
a + b
potongan kode (kecuali tes Anda mencakup seluruh rentang tipe data aritmatika Anda).sumber
Pengujian unit akan membantu semoga jika Anda memperkenalkan bug mereka akan rusak sebelum kode produksi Anda - tes unit yang ditulis dengan baik juga akan memberi tahu Anda apa yang rusak.
Itu akan membantu Anda, tetapi untuk 99,999% proyek Anda masih perlu melakukan debug dari waktu ke waktu. Hal terbaik yang dapat saya lakukan di sini adalah melakukan 4 hal:
sumber
Mulailah dengan menulis tes unit, dan cobalah untuk memiliki cakupan setinggi mungkin. Seseorang menyebutkan TDD, tapi saya akan pergi dengan BDD .
Pada akhirnya, Anda kemungkinan besar akan menghabiskan 80% untuk debug bug kompleks.
sumber
Bagaimana cara mengurangi waktu debugging? Tulis lebih sedikit kode.
Serius, selama Anda menulis kode, Anda harus melakukan debug. Tes unit dll sangat membantu, tetapi jangan berpikir Anda akan pernah menghilangkan kebutuhan untuk itu sama sekali.
sumber
Pahami apa dan mengapa sebelum Anda mulai menulis kode. Kemudian gunakan metodologi secara konsisten. Metodologi mana yang Anda pilih tidak sepenting penggunaan berulang metodologi secara konsisten. Jika Anda ingin hasil yang konsisten baik, Anda perlu melakukan pekerjaan yang baik secara konsisten dan memiliki "metode untuk kegilaan Anda" adalah langkah pertama untuk mendapatkan hasil ini. Saat Anda mengidentifikasi masalah, Anda dapat menyesuaikan metodologi sesuai kebutuhan dan seiring waktu Anda akan meningkatkan proses pengembangan, dan semoga lebih sedikit bug dan lebih banyak perkembangan baru yang bermakna.
sumber
Berikan kode Anda bacaan yang cermat sebelum Anda bahkan mengompilasinya. Bacaan yang sangat hati-hati untuk sintaks dan fungsionalitas. Ini bisa sangat informatif, dan juga merupakan indikator yang baik jika bagian kode terlalu rumit.
sumber
Sebagian besar jawaban tampaknya terfokus pada cara mengurangi jumlah masalah yang harus Anda debug dan itu sangat berharga. Namun, debugging akan selalu diperlukan sehingga berguna untuk mencari cara mempercepat debugging.
Ketahui cara menggunakan perangkat lunak kontrol versi Anda.
Tingkatkan pemahaman Anda tentang bahasa pemrograman yang Anda gunakan.
Bersikaplah logis
sumber
Menambahkan ke komentar untuk Unit Testing tetapi hanya sangat bagus jika kode Anda telah dipisahkan untuk mendukungnya (mis. MVC). Jika Anda tidak dapat mengimplementasikan MVC (atau yang serupa) (proyek lawas), pengujian unit tidak berfungsi sama sekali untuk UI Anda. Saya kemudian akan menambahkan pengujian UI otomatis (Microsoft Coded UI Tests, WaitN) karena ini akan mengurangi kesalahan pada bagian kode Anda.
Saya juga sangat merekomendasikan menjalankan alat analisis statis (mis. FxCop / Analisis Kode Microsoft, Resharper, JustCode untuk dunia MS). Ini dapat menemukan semua jenis masalah pengkodean umum yang dapat mengurangi tugas debugging konyol dan lebih fokus pada debugging logika bisnis.
sumber
Buat itu bekerja, lalu buatlah cepat, kemudian buatlah itu cantik. Sebagian besar bug berasal dari optimasi awal atau re-factoring pada baris kode yang benar-benar baik. Jika Anda pergi dengan orientasi objek jangan ulangi diri Anda sendiri, tetap sederhana dan selalu melakukan pemeriksaan kewajaran rentang nilai terutama jika metode Anda masih akan bekerja pada kendala. Ini tidak akan membantu Anda membuat lebih sedikit kesalahan tetapi kemungkinan akan membantu Anda menemukan bug lebih cepat dan karenanya debug membutuhkan waktu lebih sedikit.
sumber
Saya telah diberi banyak pemikiran untuk masalah ini baru-baru ini - jawabannya yang sederhana adalah baca Don Donan's The Design of Everyday Things; Tulis kode seperti Anda akan merancang suatu produk.
Untuk parafrase, desain yang baik meminimalkan kesalahan. Itu berarti, beberapa hal, sebagian besar sudah Anda lakukan (walaupun Anda mungkin tidak tahu persis mengapa ).
Fungsi -Nama secara intuitif. Ini secara resmi dikenal sebagai keterjangkauan. Artinya, sebuah tombol memungkinkan untuk ditekan, tuas memungkinkan untuk diaktifkan, pegangan untuk ditarik, dll.
-Membuat sulit untuk menulis kode yang buruk. Periksa input buruk dan lontarkan kesalahan lebih cepat daripada nanti, gunakan aplikasi hungarian bila perlu, dll. Ini disebut fungsi lockout.
-Gunakan abstraksi jika perlu. Memori jangka pendek lemah.
-Dokumentasi jelas penting, tetapi ini adalah yang paling tidak efektif untuk memastikan kode digunakan dengan benar. Singkatnya, produk yang dirancang dengan baik tidak memerlukan dokumentasi apa pun. (Cara paling jelas untuk melihat ini adalah dengan melihat contoh-contoh buruk: yaitu, pintu dengan pegangan yang seharusnya Anda dorong.)
Tes -Unit. Ini tidak benar-benar mencegah kesalahan, seperti memperjelas di mana bug berada, dan memberikan kewarasan.
Saya yakin saya kehilangan banyak prinsip lagi, tetapi intinya adalah, bacalah tentang merancang kesalahan.
sumber
Cara terbaik untuk mengurangi debugging, IMO, adalah dengan berkonsentrasi dan memperlambat ketika coding. Ini memaksa Anda untuk melihat kesalahan yang mungkin Anda lakukan!
sumber
Sementara saya benar-benar mendukung pengujian unit yang disarankan di atas, TDD atau BDD akan sangat berguna karena Anda harus terlebih dahulu memikirkan masalah dan solusinya.
Tetapi secara pribadi bagi saya, mengambil beberapa menit hanya untuk duduk dengan tenang dan memikirkan masalah dan bagaimana cara mengatasinya dan pro dan kontra dengan setiap pendekatan, melakukan keajaiban untuk kualitas kode saya dan membantu menjernihkan pikiran saya dari kekacauan.
Terkadang coretan cepat pada selembar kertas membantu Anda melihat potongan-potongan teka-teki yang lebih besar.
Saya menulis kode terburuk ketika saya menyelam lebih dulu dan memukul keyboard. Sedikit pemikiran dan kontemplasi membuat dunia berbeda.
PS. Maksud saya 5 mungkin sepuluh menit, bukan jam menulis spec besar.
sumber
Beberapa jawaban yang baik sudah, hanya beberapa makanan untuk meskipun selain apa yang dikatakan orang lain.
Belajar dari kesalahanmu. Jangan terus membuat yang sama berulang-ulang.
Pastikan untuk menutup kasus tepi saat pemrograman - itu adalah tempat di mana sering ada bug.
Perhatikan persyaratannya. Bahkan jika itu berfungsi tetapi tidak melakukan apa yang ditentukan oleh persyaratan, itu adalah bug.
Log pengecualian bisa sangat membantu ketika ada masalah enam bulan dari sekarang. Biasakan merekam pengecualian.
sumber
Dua pemikiran utama saya adalah 1) Menulis kode yang lebih baik yang akan gagal ketika Anda melakukan sesuatu yang tidak terduga 2) Menjadi lebih baik dalam debugging
Kode saya dikotori
Setiap kali saya mengeksekusi potongan kode tersebut pengecualian dilemparkan yang menyebabkan debugger berhenti yang memungkinkan saya kode dalam fitur-fitur baru atau menghindari persyaratan daripada bingung tentang apa yang terjadi / memiliki bug
Untuk menjadi lebih baik dalam debugging main-main dengan tumpukan panggilan, breakpoints (dengan kondisi), jendela langsung (juga dikenal sebagai jendela prompt atau repl), variabel 'menonton' dan apa pun.
sumber