Non tutti gli aspetti non intenzionali o indesiderati del comportamento del software sono bug. Ciò che è importante è garantire che il software abbia una gamma di condizioni utili e documentate in cui è possibile fare affidamento per operare in modo utile. Si consideri, ad esempio, un programma che dovrebbe accettare due numeri, moltiplicarli e produrre i risultati e che emette un numero falso se il risultato è più 9,95 ma meno di 10,00, più di 99,95 ma meno di 100,00, ecc. Se il programma è stato scritto allo scopo di elaborare numeri il cui prodotto era compreso tra 3 e 7 e non sarà mai chiamato a processarne altri, il suo comportamento con 9.95 non lo renderebbe più utile per lo scopo previsto. Potrebbe, tuttavia, rendere il programma più adatto per altri scopi.
In una situazione come quella sopra, ci sarebbero due linee di azione ragionevoli:
-
Risolvi il problema, se così è pratico.
-
Specifica gli intervalli in cui l'output del programma sarebbe affidabile e afferma che il programma è adatto solo per l'uso su dati noti per produrre valori all'interno di intervalli validi.
L'approccio n. 1 eliminerebbe il bug. L'approccio n. 2 potrebbe rendere il progresso meno adatto per alcuni scopi rispetto a quello che altrimenti potrebbe essere, ma se non è necessario che i programmi gestiscano i valori problematici che potrebbero non essere un problema.
Anche se l'impossibilità di gestire correttamente i valori da 99.95 a 100.0 è il risultato di un errore di programmazione [ad es. decidendo di produrre due cifre a sinistra del punto decimale prima di arrotondare a un posto dopo, ottenendo così 00.00], dovrebbe essere considerato un bug solo se il programma sarebbe altrimenti specificato come producendo output significativo in questi casi. [Per inciso, il problema di cui sopra si è verificato nel codice printf Turbo C 2.00; in quel contesto, è chiaramente un bug, ma il codice che chiama il printf difettoso sarebbe bacato solo se potesse produrre uscite nelle gamme problematiche].