No todos los aspectos no intencionales o indeseables del comportamiento del software son errores. Lo importante es garantizar que el software tenga una gama útil y documentada de condiciones en las que se pueda confiar para que funcione de manera útil. Considere, por ejemplo, un programa que debe aceptar dos números, multiplicarlos y generar los resultados, y que genera un número falso si el resultado es más de 9.95 pero menos de 10.00, más de 99.95 pero menos de 100.00, etc. Si el programa fue escrito con el propósito de procesar números cuyo producto estaba entre 3 y 7, y nunca se le pedirá que procese ningún otro, corregir su comportamiento con 9.95 no lo haría más útil para el propósito previsto. Sin embargo, podría hacer que el programa sea más adecuado para otros fines.
En una situación como la anterior, habría dos cursos de acción razonables:
Solucione el problema, si hacerlo es práctico.
Especifique rangos en los cuales la salida del programa sería confiable y establezca que el programa solo es adecuado para su uso en datos que se sabe que producen valores dentro de rangos válidos.
El enfoque n. ° 1 eliminaría el error. El Enfoque n. ° 2 puede hacer que el progreso sea menos adecuado para algunos propósitos de lo que podría ser de otra manera, pero si no hay necesidad de que los programas manejen los valores problemáticos, eso podría no ser un problema.
Incluso si la incapacidad para manejar los valores de 99.95 a 100.0 correctamente es el resultado de un error de programación [por ejemplo, decidir generar dos dígitos a la izquierda del punto decimal antes de redondear a un lugar después, dando así 00.00], solo debe considerarse un error si el programa se especificaría de otro modo como producir resultados significativos en tales casos. [Por cierto, el problema antes mencionado ocurrió en el código Turbof 2.00 printf; en ese contexto, es claramente un error, pero el código que llama a printf defectuoso solo tendría errores si pudiera producir salidas en los rangos problemáticos].