Perché non usare la parola bug invece dell'eccezione? [chiuso]


18

Se ci riferiamo alle eccezioni come bug, perché non chiamarlo un bug in primo luogo anziché un'eccezione?

Se nel codice si chiama 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.


Spero che i dettagli tecnici che menziono aiutino a chiarire la distinzione tra un'eccezione e un bug. Grande domanda a proposito, +1
Jeremy Thompson,


1
In realtà non so come potresti confonderli, in quanto sono cose molto diverse. Le eccezioni sono i casi gestiti dal codice, che indicano un tipo di errore. Tipicamente, errori di tipo vago, non esattamente spiegabili, e simili. - Mentre i bug ... un bug è per definizione non gestito dal codice stesso. Non sono nemmeno errori, indicano mancanza di logica dove non dovrebbe essere.
tvCa

1
@NiklasRtz: Perché l'enorme ricompensa? Tonnellate di persone avrebbero risposto a prescindere.
ThePopMachine,

@ThePopMachine Perché mi piacciono i doni enormi per domande che altre persone potrebbero trovare interessanti. Ricerco le mie domande "popolari" e rispondo il più possibile. Ho avuto molto aiuto dalle domande e risposte buone e divertenti. Sto anche preparando una nuova domanda sulla gestione degli errori e sui codici di errore per questi programmatori ... che non è specifico su come scrivere il codice ma su come gestire gli errori in un modo limitato e, si spera, standardizzato, ad esempio per le webapp che possono restituire un numero limitato di codici di errore, come i sordi sono buoni e denominazione delle parti di codice.
Niklas,

Risposte:


93

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

Ad esempio di un'eccezione che non è un bug, se stai leggendo un file da un'unità USB e qualcuno estrae l'unità dal socket. Ciò solleverà un'eccezione (nella maggior parte delle lingue che supportano le eccezioni, cioè). Ma non è un bug nel codice.

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

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


1
Hai ragione anche quando guardo come lo faccio: se un metodo non riesce a ottenere il nome della città più vicina (Los Angeles), rileva un'eccezione e restituisce il nome dell'area amministrativa più grande (ad esempio la California) ma poiché si applica per ogni coordinata, un luogo senza città vicine non è un bug, è un'eccezione. Sei d'accordo?
Niklas,

1
@Nicke: Sì, sono d'accordo.
Dean Harding,

1
Presentare una IOException e un codice di errore non è sempre un bug. È una diagnosi. Lo faccio spesso per gli script personali, in cui il fallimento significa che ho appena inserito argomenti errati.
Thomas Eding,

23

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

Viene generata (o dovrebbe esserlo) un'eccezione quando accade qualcosa di eccezionale. Se c'è un problema con il mio disco rigido e non è possibile scrivere un file, non si tratta di un bug. Questo è un errore 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.


1
Heh, abbiamo risposto quasi nello stesso momento, e sostanzialmente anche con lo stesso esempio :-)
Dean Harding,

5
@DeanHarding Le grandi menti pensano allo stesso modo, sì? : D

1
Mentre sono d'accordo con la tua prima frase, non sono d'accordo con la tua ultima frase. Il primo bug del computer (sebbene apocrifo) era, in effetti, una falena intrappolata tra le punte di una staffetta. In che modo un disco rigido non funzionante è diverso?
Scott Whitlock,

1
@ScottWhitlock Immagino che "bug" abbia più di una definizione. Ho sempre pensato che significasse errori causati dagli umani: en.wikipedia.org/wiki/Software_bug

1
@ScottWhitlock: e presumibilmente i programmatori direbbero che "non è colpa mia, deve essere un errore", che è fallito perché "errore" è diventato un errore del software. Oggi, un errore hardware non verrebbe definito un bug, sebbene un errore possa causare un errore hardware.
jmoreno,

20

Non sono la stessa cosa.

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

Un'eccezione , al contrario, può riferirsi sia una condizione insolita di un programma, deviando dal funzionamento normale, o, più precisamente, al costrutto 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 è presente alcun bug.

Al contrario, la presenza di un bug non si manifesta necessariamente come un'eccezione. Un'applicazione potrebbe eliminare silenziosamente i dati immessi anziché archiviarli nel suo database; nessuna eccezione viene generata, ma è ancora un bug.


+1 per la definizione dei termini. In generale, le persone dovrebbero farlo più spesso!
yfeldblum,

Questa è sicuramente la risposta più chiara. molto chiaro e conciso. Ottimo lavoro!
Locke,

5

Eccezioni e bug non sono affatto correlati. Certo, a volte lanci 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 felice come l'eccezione come Java, dove ogni operazione standard e il suo cane generano circa cinque diverse eccezioni, ad esempio l'apertura del file non è riuscita, la lettura del file non è riuscita, ecc.


3

Le eccezioni non sono sempre correlate ai bug. Pensalo come qualcosa che potrebbe andare storto con 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 non si tratta in realtà di un problema di codice.


2

Un bug del software è il termine comune utilizzato per descrivere un errore, un difetto, un errore, un errore o un errore in un programma per computer o in un sistema che produce un risultato errato o imprevisto o fa sì che si comporti in modo involontario. 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 inoltrata a un debugger come eccezione "prima possibilità" o "seconda possibilità". Le eccezioni della prima possibilità sono, per definizione, non fatali a meno che non vengano gestite correttamente con un gestore degli errori, a quel punto vengono nuovamente sollevate come un'eccezione di seconda possibilità (che solo un debugger può gestire).

Se nessun debugger gestisce un'eccezione di seconda possibilità, l'applicazione viene chiusa.


2

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


questo sembra più un commento, vedi Come rispondere
moscerino

1
La brevità non significa che non sia una risposta che evidenzi la differenza tra le due cose.
Alan B,

1

Tutte le eccezioni non sono bug. Può essere un argomento di dibattito sul fatto che tutti i bug siano o meno eccezioni.

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

Ecco un esempio di come non gestire 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 qualsiasi motivo). Questo è un caso eccezionale, indipendentemente dal fatto che il linguaggio di programmazione supporti una gestione eccezionale o meno se il programma si arresta in modo anomalo o si comporta in modo anomalo a causa di questo evento, si tratta di un bug (l'utente finale potrebbe non avere idea di cosa sia successo. È anche molto spiacevole) . Ma se il programma interrompe il processo con garbo, avvisare l'utente (in altre parole gestire l'eccezione) questo chiaramente non è un bug.

Il tentativo di catturare il machanismo che i linguaggi di programmazione forniscono è essenzialmente uno strumento per facilitare la nostra via d'uscita per gestire eventi imprevisti.


1

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

Risonanza: un bug è un difetto nella progettazione o implementazione di un prodotto (non limitato al software). Ad esempio, non utilizzare un relè correttamente classificato (tempo / sensibilità / affidabilità / capacità) a causa di specifiche errate o semplice errore di costruzione. Un'eccezione è un mondo reale / scostamento fase di esecuzione da predetto (oserei dire 'aspetta'?) Il comportamento, ad esempio, la perdita di controllo di un veicolo durante la guida.

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


0

Dato che 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 del PO.

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

L'articolo propone di non "gestire" i bug ma di segnalarli con affermazioni. Al contrario, le vere eccezioni richiedono la gestione tramite codice (possibilmente lanciando / catturando eccezioni).

Il punto principale è che i bug richiedono l'esatta strategia opposta rispetto alle eccezioni.

L'articolo di cui sopra è ora disponibile da Dr.Dobb presso: http://www.drdobbs.com/an-exception-or-a-bug/184401686

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.