Mengapa tidak menggunakan kata bug alih-alih pengecualian? [Tutup]


18

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.


Saya harap detail teknis yang saya sebutkan membantu menjelaskan perbedaan pengecualian vs bug. Pertanyaan yang bagus BTW, +1
Jeremy Thompson


1
Saya sebenarnya tidak tahu bagaimana Anda bisa membingungkan mereka, karena mereka adalah hal yang sangat berbeda. Pengecualian adalah kasus yang ditangani oleh kode, yang mengindikasikan beberapa jenis kesalahan. Biasanya, kesalahan dari jenis yang tidak jelas, tidak bisa dijelaskan, dan semacamnya. - Sementara bug ... bug secara definisi tidak ditangani oleh kode itu sendiri. Mereka bahkan bukan kesalahan, mereka menunjukkan kurangnya logika di mana seharusnya tidak.
tvCa

1
@NiklasRtz: Mengapa hadiah besar? Banyak orang akan menjawab terlepas.
ThePopMachine

@ThePopMachine Karena saya suka hadiah besar untuk pertanyaan orang lain mungkin menganggapnya menarik. Saya menyusun ulang pertanyaan "populer" saya dan menjawab sebanyak mungkin. Saya mendapat banyak bantuan dari pertanyaan dan jawaban yang baik dan menyenangkan. Saya juga menyiapkan pertanyaan baru tentang penanganan kesalahan dan kode kesalahan untuk programmer ini..yang tidak spesifik bagaimana menulis kode tetapi bagaimana menangani kesalahan dalam cara yang terbatas dan mudah-mudahan standar untuk contoh untuk webapps yang dapat mengembalikan sejumlah terbatas kode kesalahan, seberapa baik tunarungu baik dan penamaan bagian kode.
Niklas

Jawaban:


93

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 IOExceptiondan beberapa kode kesalahan yang funky, maka itu adalah bug. Tetapi pengecualian itu sendiri tidak.


1
Anda benar bahkan ketika saya melihat bagaimana saya melakukannya: jika suatu metode gagal mendapatkan nama kota terdekat (Los Angeles), itu menangkap pengecualian dan mengembalikan nama wilayah administratif yang lebih besar (misalnya California) tetapi karena itu berlaku untuk setiap koordinat, tempat tanpa kota dekat bukanlah bug, itu pengecualian. Apa kamu setuju?
Niklas

1
@Nicke: Ya, saya setuju dengan itu.
Dean Harding

1
Menghadirkan IOException dan kode kesalahan tidak selalu berupa bug. Ini diagnostik. Saya sering melakukan itu untuk skrip pribadi, di mana kegagalan berarti saya hanya memasukkan argumen yang salah.
Thomas Eding

23

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.


1
Heh, kami menjawab pada waktu yang hampir bersamaan, dan pada dasarnya contoh yang sama juga :-)
Dean Harding

5
@DeanHarding Pikiran besar sama saja, ya? : D

1
Sementara saya setuju dengan kalimat pertama Anda, saya harus tidak setuju dengan kalimat terakhir Anda. The bug komputer pertama (meskipun diragukan kebenarannya) itu, pada kenyataannya, ngengat terjebak di antara titik-titik relay. Bagaimana perbedaan hard drive yang berbeda?
Scott Whitlock

1
@ScottWhitlock Saya kira "bug" memiliki lebih dari satu definisi. Saya selalu menganggap itu berarti kesalahan yang disebabkan oleh manusia: en.wikipedia.org/wiki/Software_bug

1
@ScottWhitlock: dan konon programmer akan mengatakan "bukan salahku, pasti bug", yang menjadi bumerang sebagai "bug" berarti kesalahan perangkat lunak. Saat ini, kegagalan perangkat keras tidak akan disebut bug, meskipun bug dapat menyebabkan kegagalan perangkat keras.
jmoreno

20

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.


+1 untuk mendefinisikan istilah Anda. Secara umum, orang harus melakukan itu lebih sering!
yfeldblum

Ini jelas merupakan jawaban yang paling jelas. sangat jelas dan ringkas. Kerja bagus!
Locke

5

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.


3

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.


2

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.


2

Anda mungkin secara sah mengajukan pengecualian, Anda diharapkan tidak akan pernah memperkenalkan bug dengan sengaja.


ini berbunyi lebih seperti komentar, lihat Bagaimana Menjawab
nyamuk

1
Brevity tidak berarti bahwa itu bukan jawaban yang menyoroti perbedaan antara dua hal.
Alan B

1

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.


1

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.


0

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.