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?