Nie wszystkie niezamierzone lub niepożądane aspekty zachowania oprogramowania są błędami. Ważne jest, aby upewnić się, że oprogramowanie ma użyteczny i udokumentowany zakres warunków, w których można polegać na działaniu w użyteczny sposób. Rozważmy na przykład program, który ma przyjąć dwie liczby, pomnożyć je i wyprowadzić wyniki, i który wypisuje fałszywą liczbę, jeśli wynik wynosi więcej 9,95, ale mniej niż 10,00, więcej niż 99,95, ale mniej niż 100,00 itd. Jeśli program został napisany w celu przetwarzania liczb, których iloczyn był między 3 a 7, i nigdy nie będzie wzywany do przetwarzania innych, ustawienie jego zachowania na 9,95 nie uczyni go bardziej użytecznym dla zamierzonego celu. Może to jednak sprawić, że program będzie bardziej odpowiedni do innych celów.
W takiej sytuacji istnieją dwa rozsądne sposoby działania:
Napraw problem, jeśli jest to praktyczne.
Podaj zakresy, w których dane wyjściowe programu będą wiarygodne, i stwierdz, że program nadaje się tylko do użytku z danymi, o których wiadomo, że generują wartości z prawidłowych zakresów.
Podejście nr 1 wyeliminowałoby błąd. Podejście nr 2 może sprawić, że postęp będzie mniej odpowiedni do niektórych celów, niż w innym przypadku, ale jeśli programy nie będą obsługiwały problematycznych wartości, może to nie stanowić problemu.
Nawet jeśli niezdolność do prawidłowego obsługiwania wartości od 99,95 do 100,0 jest wynikiem błędu programistycznego [np. Decyzja o wypisaniu dwóch cyfr po lewej stronie przecinka dziesiętnego przed zaokrągleniem do jednego miejsca po tym, co daje 00.00], należy to uznać jedynie za błąd, jeśli program w innym przypadku zostałby określony jako produkujący znaczące dane wyjściowe w takich przypadkach. [Nawiasem mówiąc, wyżej wspomniany problem wystąpił w kodzie printf Turbo C 2.00; w tym kontekście jest to oczywiście błąd, ale kod wywołujący wadliwy printf byłby błędny tylko, gdyby mógł generować dane wyjściowe w problematycznych zakresach].