Esiste un nome per un comportamento interno non corretto che non si manifesta come bug?

5

Per mettere questo contesto, ho il seguente scenario. Sto scrivendo un programma Common Lisp che funziona con stringhe e liste di caratteri.

In una certa funzione foo , il valore di una variabile suff è un elenco di caratteri. Più avanti nel codice, ho dimenticato che suff era una lista e l'ho trattata come una stringa, chiamando

(subseq suff 0 1)

Non ho notato l'errore, perché subseq funziona sia su stringhe che liste:

CL-USER> (subseq "abc" 0 1)
"a"

CL-USER> (subseq '(#\a #\b #\c) 0 1)
(#\a)

Quindi nel codice successivo ho pensato che stavo lavorando con le stringhe, mentre in realtà stavo spostando liste di caratteri.

Questi risultati erroneamente digitati sono stati infine formattati dalla funzione di output del programma utilizzando (concatenate 'string ... . Sono stato fortunato, perché concatenate produce felicemente una stringa quando gli vengono dati elenchi di caratteri come argomenti.

Ho scoperto questo errore solo aggiungendo altri test (sì, lo so, TDD, ma questo è un altro argomento) e testando foo direttamente.

Poiché il mio programma funzionava correttamente - al momento la mia funzione di output era l'unico codice che utilizzava i dati corrotti - Non posso dire che il programma nel suo insieme contenesse un bug anche se la funzione foo , presa separatamente , era bacato.

Esiste un nome speciale per descrivere un comportamento interno errato che non si manifesta esternamente come bug?

    
posta Giorgio 30.11.2014 - 23:25
fonte

4 risposte

12

Un bug è un bug anche se nessuno lo ha trovato.

Secondo questo articolo di Wikipedia :

A software bug is an error, flaw, failure, or fault in a computer program or system that causes it to produce an incorrect or unexpected result, or to behave in unintended ways.

Il comportamento non era quello che intendevi, quindi è un bug. Puoi chiamarlo un bug latente , un bug dormiente , ecc.

Some bugs have only a subtle effect on the program's functionality, and may thus lie undetected for a long time.

Secondo questo articolo, il bug di cui parli potrebbe essere classificato come "bug di risorse ", che significa:

Using an otherwise valid instruction on the wrong data type

In conclusione, ciò che non si è ancora manifestato esternamente, è in realtà un bug dormiente , in attesa che una situazione specifica si manifesti, di solito in un ambiente di produzione e durante un fine settimana.

    
risposta data 01.12.2014 - 00:09
fonte
6

Li ho sempre sentiti chiamare "bug latenti".

Su tutti i team su cui ho lavorato, è buona norma identificare i bug latenti e correggerli prima che qualcuno li subisca.

Nella situazione che descrivi, può essere o non essere un problema, se la lingua sta solo lavorando attorno alla supervisione. Ma se il modo in cui funziona, causa un problema di prestazioni perché rompe le cose e riassemblandole a lungo, allora è un comportamento indesiderato, ed è un gioco leale da segnalare come un bug, anche se l'output esplicito è corretto.

    
risposta data 01.12.2014 - 03:51
fonte
3

Stai descrivendo un semantico errore. Uno che non è stato catturato dalla tua lingua e non ha causato problemi con la corretta esecuzione del software.

Ogni volta che scrivi codice, stai scrivendo per molti segmenti di pubblico che devono essere soddisfatti. Hai soddisfatto la tua lingua e il tuo utente. Non sei riuscito a soddisfare lo sviluppatore di manutenzione.

La semantica riguarda il significato. Dimenticando di trattare suff come una lista hai scritto un codice il cui significato è difficile da capire. Il fatto che il risultato finale sia identico non è più corretto se si ottiene la risposta corretta in un test di matematica dimenticando due volte un negativo. La maggior parte dei professori ti segnerà per questo perché stanno cercando un significato nella tua risposta, non nella fortuna.

Chiunque guardi il tuo codice più tardi (incluso te) si sentirà allo stesso modo. Il codice che funziona ma non ha senso è un tipo speciale di frustrante.

Sfortunatamente se cerchi degli errori semantici troverai soprattutto quelli che i linguaggi di programmazione catturano per te. Come hai scoperto, non tutti i tipi di errori semantici possono essere rilevati automaticamente.

Se hai violato intenzionalmente la semantica, solo per creare qualcosa che funzioni, allora potrebbe essere facilmente chiamato un kludge . Infatti, chiunque leggendo il tuo codice e non conoscendo il tuo intento potrebbe giustamente chiamarlo uno.

    
risposta data 01.12.2014 - 06:13
fonte
-2

Sarebbe un errore logico. Vedi l'articolo wiki per ulteriori informazioni.

    
risposta data 01.12.2014 - 00:07
fonte

Leggi altre domande sui tag