Perché non usare la parola bug anziché l'eccezione? [chiuso]

18

Se ci riferiamo alle eccezioni come bug, perché non chiamarlo solo un bug al posto di un'eccezione?

Se nel codice è chiamato eccezione e non appena si verifica viene chiamato un bug. Allora perché non chiamarlo un bug, in primo luogo?

Grazie per qualsiasi risposta o commento.

    
posta Niklas Rosencrantz 05.11.2011 - 01:48
fonte

10 risposte

93

Beh, è piuttosto semplice: non tutte le eccezioni sono bug (e allo stesso modo, non tutti i bug si manifestano come eccezioni).

Come esempio di un'eccezione che non è un bug, se stai leggendo un file da un'unità USB e qualcuno estrae l'unità dal socket. Questo farà sorgere un'eccezione (nella maggior parte delle lingue che supportano le eccezioni, ovvero). Ma non è un bug nel codice.

Al contrario, un bug potrebbe manifestarsi come errore di calcolo o qualcosa del genere. Hai ancora una risposta, non è quella giusta.

Detto questo, un'eccezione che si fa strada fino in cima allo stack probabilmente è un bug. Nel mio esempio USB sopra, dovresti essere in grado di catturare quell'eccezione e presentare un errore piacevole all'utente dicendo "Non siamo riusciti a leggere dal file perché non è più connesso". o qualcosa. Se li presenti solo con IOException e qualche codice di errore funky, allora questo è un bug. Ma l'eccezione in sé non lo è.

    
risposta data 05.11.2011 - 01:56
fonte
23

Semplice e semplice, un'eccezione non è (sempre) un bug!

Un'eccezione viene lanciata (o dovrebbe essere) quando accade qualcosa di eccezionale. Se c'è un problema con il mio disco rigido e un file non può essere scritto, non è un bug. Questo è un fallimento dell'hardware.

Un bug è generalmente il risultato di una cattiva programmazione. Se un'applicazione fa qualcosa che non è previsto a causa di un errore di programmazione, si tratta di un bug.

    
risposta data 05.11.2011 - 01:56
fonte
20

Non sono la stessa cosa.

Un bug è un comportamento non voluto di un pezzo di software: il software non fa ciò che dovrebbe fare. I bug possono vivere a tutti i livelli di sviluppo del software, da semplici vecchi errori di battitura a errori logici fino a specifiche funzionali inadeguate.

Un'emissione , al contrario, può riferirsi a una condizione insolita di un programma, deviante dal normale funzionamento o, più specificamente, al costrutto del linguaggio utilizzato per segnalare e gestire tali condizioni.

Il fatto che si verifichi un'eccezione può essere un segno di un bug, ma spesso non lo è. Ad esempio, un'applicazione che dovrebbe scaricare un documento da un URL ed elaborarlo localmente potrebbe generare un'eccezione quando il server remoto è inattivo: l'applicazione si discosta dal normale funzionamento (non può scaricare ed elaborare il documento), ma se gestisce correttamente l'eccezione e recupera, quindi non ci sono errori.

Al contrario, la presenza di un bug non si manifesta necessariamente come eccezione. Un'applicazione può scartare silenziosamente i dati inseriti invece di memorizzarli nel suo database; non viene lanciata alcuna eccezione, ma è ancora un bug.

    
risposta data 05.11.2011 - 13:01
fonte
5

Le eccezioni e i bug non sono affatto correlati. Certo, a volte si lancia un'eccezione e significa un bug. Ma a volte significa solo una circostanza eccezionale, insolita, che non è necessariamente un bug nel programma. Soprattutto in un linguaggio eccezionalmente felice come Java, in cui ogni operazione standard e il suo cane generano cinque diverse eccezioni, ad esempio l'apertura del file non riuscita, la lettura del file non riuscita, ecc.

    
risposta data 05.11.2011 - 01:58
fonte
3

Le eccezioni non sono sempre legate agli errori. Pensala come qualcosa che potrebbe andare storto in quello che stai facendo.

Un esempio che viene in mente è InetAddress.getByName () che viene utilizzato per risolvere un nome di dominio. Se succede qualcosa e viene lanciata una UnknownHostException, in realtà non è un problema di codice.

    
risposta data 05.11.2011 - 01:57
fonte
2

Un bug del software è il termine comune usato per descrivere un errore, un difetto, un errore, un errore o un errore in un programma o sistema che produce un risultato errato o inaspettato o lo induce a comportarsi in modi non previsti. Potrebbe anche essere un errore di ortografia su un'etichetta.

Le eccezioni sono diverse dai bug. Ogni tipo di eccezione (violazione di accesso, overflow dello stack e così via) può essere generato a un debugger come un'eccezione di "prima possibilità" o di "seconda possibilità". Le prime eccezioni di probabilità sono, per definizione, non fatali, a meno che non vengano gestite correttamente con un gestore di errori, a quel punto vengono nuovamente generate come un'eccezione di seconda possibilità (che solo un debugger può gestire).

Se nessun debugger gestisce una seconda eccezione, l'applicazione viene chiusa.

    
risposta data 05.11.2011 - 03:04
fonte
2

Potresti legittimamente sollevare un'eccezione tu stesso, si spera che non introduca mai un bug di proposito.

    
risposta data 10.12.2014 - 10:38
fonte
1

Tutte le eccezioni non sono bug. Può essere un argomento di discussione che tutti i bug sono eccezioni o meno.

Possiamo dire che le eccezioni sono gli eventi che non fanno parte del flusso normale o previsto dell'applicazione. Questi eventi possono essere indipendenti da come il codice viene scritto dove un bug è essenzialmente il risultato di un codice errato (come un calcolo errato).

Ecco un esempio di come la gestione di un'eccezione può essere un bug.

Supponiamo che esista un programma che scrive alcuni dati su un dispositivo di archiviazione esterno. Durante la scrittura del dispositivo di archiviazione esterno è stato scollegato, si è schiantato o potrebbe essere distrutto (per quale motivo mai). Ora questo è un caso eccezionale, ora, indipendentemente dal fatto che il linguaggio di programmazione supporti una gestione eccezionale o no se il programma si blocca o si comporta male a causa di questo evento, è un bug. (L'utente finale potrebbe non aver idea di cosa è successo. È anche molto spiacevole) . Ma se il programma interrompe il processo con garbo, avvisare l'utente (in altre parole gestire l'eccezione) questo non è chiaramente un bug.

Il try catch di machanism che fornisce linguaggi di programmazione è essenzialmente uno strumento per facilitare la nostra uscita per gestire eventi imprevisti.

    
risposta data 10.12.2014 - 10:36
fonte
1

Sinossi : le eccezioni sono la prova di esiti negativi, i bug sono (alcune delle) cause di cattivi risultati. Il problema (da risolvere) non è l'eccezione, il problema è ciò che ha causato l'eccezione.

Resoning: Un bug è un difetto nella progettazione o nell'implementazione di un prodotto (non limitato al software). Ad esempio, non utilizzare un relè con rating appropriato (tempo / sensibilità / affidabilità / capacità) a causa di specifiche errate o di un semplice errore di compilazione. Un'eccezione è una deviazione del mondo reale / tempo di esecuzione dal comportamento previsto (oserei dire "previsto"?), Ad esempio la perdita di controllo di un veicolo durante la guida.

Chiaramente, un bug può causare un'eccezione come nell'esempio in 1) potrebbe portare all'esempio in 2). Ma non tutte le eccezioni sarebbero causate da bug, ad esempio la perdita di controllo di un veicolo perché l'operatore ha avuto un ictus.

    
risposta data 10.12.2014 - 16:50
fonte
0

Da quando questa domanda è stata riaperta per una taglia, vorrei menzionare il mio articolo CUJ del 2003 intitolato "An Exception or a Bug?", che sembra rispondere esattamente alla domanda dell'OP.

Fondamentalmente, l'articolo definisce i termini "bug" ed "eccezione" (fornendo esempi) e propone strategie per affrontare ciascuno di essi.

L'articolo propone di non "gestire" bug ma invece di contrassegnarli con asserzioni. Al contrario, le vere eccezioni richiedono la gestione attraverso il codice (possibilmente lanciando / catturando eccezioni).

Il punto principale è che i bug richiedono la strategia esatta opposta delle eccezioni.

L'articolo di cui sopra è disponibile ora da Dr.Dobb's all'indirizzo: link

    
risposta data 09.12.2014 - 20:26
fonte