Jika kita menyebut pengecualian sebagai bug, mengapa tidak menyebutnya bug di tempat pertama alih-alih pengecualian?
Jika dalam kode itu disebut pengecualian dan segera setelah itu terjadi itu disebut bug. Lalu mengapa tidak menyebutnya bug sejak awal?
Terima kasih atas jawaban atau komentar.
Jawaban:
Ya cukup sederhana: tidak semua pengecualian adalah bug (dan juga, tidak semua bug memanifestasikan dirinya sebagai pengecualian).
Sebagai contoh pengecualian yang bukan bug, jika Anda membaca file dari drive USB dan seseorang menarik drive keluar dari soket. Itu akan menimbulkan pengecualian (dalam kebanyakan bahasa yang mendukung pengecualian, yaitu). Tapi itu bukan bug dalam kode.
Sebaliknya, bug mungkin memanifestasikan dirinya sebagai kesalahan perhitungan atau sesuatu. Anda masih mendapatkan jawaban, itu bukan jawaban yang tepat.
Karena itu, pengecualian yang membuat jalan sampai ke puncak tumpukan kemungkinan adalah bug. Dalam contoh USB saya di atas, Anda seharusnya dapat menangkap pengecualian itu dan menyajikan kesalahan yang bagus kepada pengguna yang mengatakan "Kami tidak dapat membaca dari file karena tidak lagi terhubung." atau sesuatu. Jika Anda baru saja memberi mereka
IOException
dan beberapa kode kesalahan yang funky, maka itu adalah bug. Tetapi pengecualian itu sendiri tidak.sumber
Polos dan sederhana, pengecualian bukanlah bug (selalu)!
Pengecualian dilemparkan (atau seharusnya) ketika sesuatu yang luar biasa terjadi. Jika ada masalah dengan hard drive saya dan file tidak dapat ditulis, itu bukan bug. Itu adalah kegagalan perangkat keras.
Bug pada umumnya merupakan hasil pemrograman yang buruk. Jika suatu aplikasi melakukan sesuatu yang tidak diharapkan sebagai akibat dari kesalahan pemrograman, itu adalah bug.
sumber
Mereka bukan hal yang sama.
Sebuah bug adalah perilaku yang tidak diinginkan dari sebuah software: perangkat lunak tidak melakukan apa yang seharusnya dilakukan. Bug dapat hidup di semua tingkat pengembangan perangkat lunak, mulai dari kesalahan ketik biasa hingga kesalahan logis hingga spesifikasi fungsional yang tidak memadai.
Sebuah pengecualian , sebaliknya, dapat mengacu ke kondisi yang tidak biasa dari sebuah program, menyimpang dari operasi normal, atau, lebih khusus, dengan konstruksi bahasa yang digunakan untuk sinyal dan menangani kondisi seperti itu.
Fakta bahwa pengecualian terjadi dapat menjadi tanda bug, tetapi seringkali tidak. Misalnya, aplikasi yang seharusnya mengunduh dokumen dari URL dan memprosesnya secara lokal mungkin mengeluarkan pengecualian ketika server jauh turun: aplikasi menyimpang dari operasi normal (tidak dapat mengunduh dan memproses dokumen), tetapi jika itu menangani pengecualian dengan benar dan pulih, maka tidak ada bug.
Sebaliknya, keberadaan bug tidak selalu memanifestasikan dirinya sebagai pengecualian. Aplikasi mungkin secara diam-diam membuang data yang Anda masukkan alih-alih menyimpannya di basis datanya; tidak terkecuali terlempar, tetapi masih berupa bug.
sumber
Pengecualian dan bug sama sekali tidak terkait. Tentu, terkadang Anda melempar pengecualian dan itu berarti bug. Tetapi kadang-kadang itu hanya berarti keadaan luar biasa, tidak biasa, yang belum tentu bug dalam program sama sekali. Terutama dalam bahasa pengecualian-senang seperti Jawa, di mana setiap operasi standar dan anjingnya melemparkan sekitar lima pengecualian yang berbeda-misalnya, membuka file gagal, membaca file gagal, dll.
sumber
Pengecualian tidak selalu terkait bug. Anggap saja sebagai sesuatu yang bisa salah dengan apa yang Anda lakukan.
Contoh yang muncul di pikiran adalah InetAddress.getByName () yang digunakan untuk menyelesaikan nama domain. Jika sesuatu terjadi dan UnknownHostException dilemparkan, itu bukan masalah kode.
sumber
Bug perangkat lunak adalah istilah umum yang digunakan untuk menggambarkan kesalahan, cacat, kesalahan, kegagalan, atau kesalahan dalam program atau sistem komputer yang menghasilkan hasil yang salah atau tidak terduga, atau menyebabkannya berperilaku dengan cara yang tidak disengaja. Bahkan mungkin merupakan kesalahan pengejaan pada label.
Pengecualian berbeda dengan bug. Setiap jenis pengecualian (pelanggaran akses, stack overflow, dan sebagainya) dapat dinaikkan ke debugger sebagai pengecualian "peluang pertama" atau "peluang kedua". Pengecualian kesempatan pertama adalah, menurut definisi, non-fatal kecuali mereka tidak ditangani dengan benar dengan penangan kesalahan, di mana mereka dibangkitkan lagi sebagai pengecualian kesempatan kedua (yang hanya dapat ditangani oleh debugger).
Jika tidak ada debugger yang menangani pengecualian kesempatan kedua, aplikasi dimatikan.
sumber
Anda mungkin secara sah mengajukan pengecualian, Anda diharapkan tidak akan pernah memperkenalkan bug dengan sengaja.
sumber
Semua pengecualian bukan bug. Ini bisa menjadi topik perdebatan bahwa semua bug adalah pengecualian atau tidak.
Kita dapat mengatakan pengecualian adalah peristiwa yang bukan bagian dari aliran aplikasi normal atau yang diharapkan. Peristiwa ini dapat independen dari bagaimana kode ditulis di mana bug pada dasarnya adalah hasil dari kode yang buruk (seperti perhitungan yang salah).
Berikut adalah contoh bagaimana tidak menangani pengecualian bisa menjadi bug.
Mari kita anggap ada program yang menulis beberapa data ke perangkat penyimpanan eksternal. Saat menulis perangkat penyimpanan eksternal dicabut, jatuh atau mungkin dihancurkan (untuk alasan apa pun). Sekarang ini adalah kasus yang luar biasa, sekarang terlepas dari bahasa pemrograman mendukung penanganan yang luar biasa atau tidak jika program crash atau kelakuan buruk karena peristiwa ini, itu adalah bug. (Pengguna akhir mungkin tidak tahu apa yang terjadi. Ini juga sangat tidak menyenangkan) . Tetapi jika program membatalkan proses dengan anggun, beri tahu pengguna (dengan kata lain menangani pengecualian) ini jelas bukan bug.
Bahasa pemrograman try catch machanism pada dasarnya adalah alat untuk memudahkan jalan keluar kita untuk menangani peristiwa tak terduga.
sumber
Sinopsis : Pengecualian adalah bukti dari hasil buruk, bug adalah (beberapa) penyebab hasil buruk. Masalahnya (harus dipecahkan) bukan pengecualian, masalahnya adalah apa yang menyebabkan pengecualian.
Resoning: Sebuah bug adalah cacat dalam desain atau pelaksanaan suatu produk (tidak terbatas pada perangkat lunak). Misalnya, tidak menggunakan relai yang diberi peringkat dengan benar (waktu / sensitivitas / keandalan / kapasitas) baik karena spesifikasi yang salah atau kesalahan build sederhana. Sebuah pengecualian adalah dunia nyata / run time penyimpangan dari prediksi (berani saya katakan 'diharapkan'?) Perilaku, misalnya, hilangnya kontrol kendaraan saat mengemudi.
Jelas, bug dapat menyebabkan pengecualian seperti contoh di 1) dapat mengarah ke contoh di 2). Tetapi tidak semua pengecualian akan disebabkan oleh bug, misalnya, kehilangan kendali atas kendaraan karena operator mengalami stroke.
sumber
Karena pertanyaan ini telah dibuka kembali untuk hadiah, izinkan saya menyebutkan artikel CUJ saya dari tahun 2003 berjudul "Pengecualian atau Bug?", Yang tampaknya menjawab pertanyaan OP persis.
Pada dasarnya, artikel ini mendefinisikan istilah "bug" dan "pengecualian" (memberikan contoh), dan mengusulkan strategi untuk menangani masing-masing.
Artikel ini mengusulkan untuk tidak "menangani" bug tetapi menandai mereka dengan pernyataan. Sebaliknya, pengecualian sejati membutuhkan penanganan melalui kode (mungkin pengecualian melempar / menangkap).
Poin utama adalah bahwa bug memerlukan strategi yang berlawanan dari pengecualian.
Artikel tersebut tersedia sekarang dari Dr.Dobb di: http://www.drdobbs.com/an-exception-or-a-bug/184401686
sumber