Non tutti gli aspetti involontari o indesiderati del comportamento del software sono bug. Ciò che è importante è garantire che il software abbia una gamma utile e documentata di condizioni in cui si può 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 genera un numero falso se il risultato è superiore a 9,95 ma inferiore a 10,00, superiore a 99,95 ma inferiore a 100,00, ecc. Se il programma fosse stato scritto allo scopo di elaborare numeri il cui prodotto era compreso tra 3 e 7 e non verrà mai chiamato a processarne altri, fissarne il 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 d'azione ragionevoli:
Risolvi il problema, se è così pratico.
Specificare intervalli in cui l'output del programma sarebbe affidabile e dichiarare che il programma è adatto solo per l'uso su dati che sono noti per produrre valori all'interno di intervalli validi.
L'approccio n. 1 eliminerebbe il bug. L'approccio n. 2 potrebbe rendere i progressi meno adatti per alcuni scopi di quanto potrebbe altrimenti essere, ma se non è necessario che i programmi gestiscano i valori problematici, ciò potrebbe non costituire un problema.
Anche se l'incapacità di gestire correttamente i valori da 99,95 a 100,0 è il risultato di un errore di programmazione [ad es. Decidere di emettere due cifre a sinistra del punto decimale prima di arrotondare a un punto dopo, ottenendo quindi 00,00], dovrebbe essere considerato solo un bug se il programma sarebbe altrimenti specificato come produrre output significativi in tali casi. [Per inciso, il suddetto problema si è verificato nel codice printf Turbo C 2.00; in quel contesto, è chiaramente un bug, ma il codice che chiama il printf difettoso sarebbe difettoso solo se potesse produrre output negli intervalli problematici].