Qual è la differenza prevista ma non il comportamento desiderato e un bug del software

4

Recentemente ho chiesto questo domanda . Come commentato nella risposta da qualcuno che sembra uno sviluppatore numPy , questo comportamento non è chiaramente desiderato. Il problema pubblicato è stato chiuso affermando che si tratta di un comportamento previsto ma non di un bug. Inoltre ci sono piani per risolverlo.

Qual è la differenza tra un bug e un comportamento che è previsto ma non desiderato? Questi termini hanno definizioni precise e coerenti?

Per un'estrema sciocchezza, se un programma restituisce sempre 3 quando viene chiesto di calcolare 1 + 1, restituire 3 è certamente un comportamento previsto dal programma poiché ha sempre funzionato in questo modo, ma certamente non è un comportamento desiderato, quindi è è un bug o no?

Recentemente ho studiato filosofia e questa domanda mi ha colpito.

    
posta Community 27.01.2016 - 14:42
fonte

5 risposte

5

È noto come verruca .

Da un commento sul post originale su Stack Overflow,

To be clear, this is not desired behavior, although there are good (historical) reasons for it. We (numpy devs) have preliminary plans to deprecate it in a future release, and provide easier to understand functionality that works as you might expect. See http://github.com/numpy/numpy/pull/6256 for more details. -- Stephan

Ogni decisione di progettazione è un compromesso da qualche parte . Crea qualcosa di più semplice da qualche parte, e da qualche altra parte qualcosa potrebbe diventare più complicato.

Considera questo bit di JavaScript:

>>> '5' + 3 - 3
50
>>> '5' - 3 + 3
5

È un bug? No. È il comportamento desiderato ... eh ... Non voglio dire che le persone vogliono farlo funzionare in quel modo, ma questo è ciò che ottieni con 'questo è come è stato deciso + funziona. '

O in ruby che x?2:3 è un errore di sintassi (deve essere x ?2:3 - notare lo spazio). Perché? Poiché è stato deciso che le funzioni potrebbero terminare in un ? e quindi x?2:3 è ambiguo, uno spazio tra la variabile e la parte ? dell'espressione ternaria risolve il problema.

Oppure in PhP la decisione di imitare la funzione auto-increment di Perl su Le stringhe, ma prive della restrizione sul modello, portano a:

$foo = "3d8";
echo "$foo\n";
$foo++;
echo "$foo\n";
$foo++;
echo "$foo\n";
$foo++;
echo "$foo\n";

( ideone )
stampa:

3d8
3d9
3e0
4

E senza troppe difficoltà si potrebbe probabilmente trovare esempi di verruche di progettazione in librerie e linguaggi attraverso l'intero spettro di software che è stato realizzato non intenzionalmente con comportamento non intenzionale e forse indesiderato ma comunque atteso .

C'erano effettivamente (debabilmente) buone ragioni storiche le decisioni di progettazione per farlo funzionare in un certo modo. E il codice funziona in questo modo - non è un bug, funziona esattamente come previsto. Con il senno di poi, forse quelle decisioni non erano buone e portano a comportamenti indesiderati, ma il codice funziona come previsto - non c'è un bug lì, è una verruca.

Mentre ho elencato alcune verruche che posso mostrare e solleticare rapidamente, ci sono innumerevoli là fuori. Non ho davvero bisogno di più esempi. Sarei francamente sorpreso se si trovasse una lingua o una libreria che non contenesse una verruca.

    
risposta data 27.01.2016 - 15:38
fonte
1

Un "bug" è un termine informale per un difetto nel software. Di solito si riferisce a qualcosa di sbagliato nel codice. Se vuoi usare termini formali, dovresti usare parole come "errore" (un'azione umana o inazione che ha portato a un risultato errato), "difetto" o "difetto" (un passo, un processo o una definizione errati), e "fallimento" (un risultato errato). Un errore causerà un errore o un difetto che può manifestarsi come un errore. Questa risposta di dukeofgaming (insieme ad altre risposte in questa domanda) è una buona spiegazione della differenza tra difetti, guasti e bug.

Questi termini possono essere applicati a più di un semplice codice sorgente. Ad esempio, un errore commesso nei tuoi requisiti può manifestarsi come un difetto nel tuo progetto. Se un utente vede questo comportamento, può interpretarlo come un errore, anche se il test non lo fa. Il tuo codice software potrebbe essere un riflesso della tua comprensione delle tue esigenze, ma questa comprensione non è corretta. Questo suona molto simile a quello che è successo nella tua situazione - il software si comporta esattamente come gli sviluppatori lo intendevano, ma le loro intenzioni e le aspettative degli utenti non erano allineate.

    
risposta data 27.01.2016 - 15:17
fonte
1

La differenza è che "bug" implica che il software sta facendo qualcosa di sbagliato e che dovrebbe essere in grado di fare quella cosa meglio di quello che è attualmente.

La maggior parte dei comportamenti indesiderati che non considererei i bug rientrerebbero in una di queste categorie:

  • Un difetto intrinseco alla natura dell'applicazione e che semplicemente non può essere evitato. Il browser del tuo cellulare potrebbe impiegare molto tempo per caricare una pagina web quando hai un segnale cellulare molto debole. Può anche mostrare contenuti volgari, offensivi o semplicemente irritanti che non volevi vedere. In generale, questi non sono problemi che il browser può mai completamente risolvere.
  • Un compromesso con un altro obiettivo di progettazione. Molti linguaggi di programmazione consentono ai numeri in virgola mobile di avere un errore di arrotondamento, perché eseguire calcoli matematici con aritmetica di precisione arbitraria richiederebbe troppo prestazioni. Ci sono stati molti argomenti su quali errori di arrotondamento fanno e non si definiscono bug.
  • Un semplice errore nel design che, per qualsiasi motivo, non è più possibile cambiare.
  • Un difetto, un compromesso o un errore di progettazione nelle specifiche a cui un programma deve conformarsi. La maggior parte dei compilatori C ++ ti permetterà di compilare codice che è chiaramente rotto, perché altrimenti non sarebbero conformi allo standard C ++.

Non capisco appieno il problema di indicizzazione dell'array numpy a cui ti sei collegato, ma sembra che sia nella terza categoria.

    
risposta data 27.01.2016 - 15:43
fonte
0

Un bug potrebbe essere un comportamento che appare perché qualcuno, da qualche parte, commette un errore. Potrebbe essere il progettista dell'interfaccia utente che ha detto agli sviluppatori di implementare comportamenti errati, potrebbe essere uno sviluppatore che commette un errore o il compilatore.

D'altra parte, se si decidesse che l'azione per alcuni pulsanti non verrà implementata perché è troppo costoso e si richiede troppo per il guadagno, questo è certamente un comportamento indesiderato, ma è intenzionale, non un bug.

    
risposta data 27.01.2016 - 17:01
fonte
0

Un bug è quando il comportamento osservabile dall'utente differisce dal comportamento documentato. Un comportamento indesiderato è quando il comportamento osservabile dall'utente corrisponde correttamente al comportamento documentato, ma preferiresti avere un comportamento diverso.

  • "Bug": il sistema non fa ciò che promette
  • "Comportamento indesiderato": il sistema fa promesse stupide
risposta data 27.01.2016 - 18:24
fonte

Leggi altre domande sui tag