Estaría tan a la defensiva como tú necesitas estar. Un poco ambiguo, supongo que sí, pero intentaré explicarlo.
Cuando corrige un método, si ese método tiene parámetros de entrada, debe tomar la decisión sobre lo que espera que sean esos parámetros. En situaciones y lugares dentro de una aplicación, esto será diferente. Por ejemplo, si un método o fragmento de código está aceptando datos de una entrada del usuario, entonces querrá cubrir toda la base del código y manejar cualquier entrada en consecuencia, ya sea a través de un mensaje de error o alguna forma agradable de mostrar datos inaceptables.
Si el método es un ídem API expuesto. No puede controlar lo que está entrando, por lo que debe esperar tratar de cubrir todos los aspectos y programar en consecuencia.
Para los métodos que se producen dentro del motor central de su proyecto, aquí tiene que tomar una decisión. ¿Supongo que los datos que están llegando han sido previamente seleccionados y validados antes de que lleguen o debo realizar las verificaciones necesarias? Supongo que esto depende del nivel conceptual del método y si este es un lugar aceptable para verificar. Entonces, lo que podría considerar es:
1) ¿Es este el único lugar donde tendré que hacer esta verificación? ¿Será necesario verificar esta variable en muchos lugares diferentes para esta condición? Si es así, ¿puedo hacer la verificación una vez más arriba en la cadena y luego asumir la validez después?
2) ¿Se espera que otros componentes del sistema funcionen con los métodos e interfaces que escribo? Si es así, puede controlar mediante declaraciones de afirmación de depuración, excepciones de depuración, comentarios de métodos y arquitectura general del sistema el resultado que necesita, o los datos necesitarán verificaciones establecidas.
3) ¿Cuáles son los resultados de la falla en este punto del código? ¿Causará que todo falle? ¿Se detectará algún error en otro lugar y ese error se detectará al menos?
4) ¿Tiene sentido poner un cheque aquí? A veces, verificar un dato posible de datos corruptos, aunque ayudar a resolver el problema en ese punto y no un error puede ayudar a ocultarlo. En ese momento, podría pasar horas persiguiendo un problema diferente solo para descubrir que el problema real se debió a una verificación válida de los datos que se encuentran en la cadena de eventos en cascada a la que se informó el usuario / desarrollador.
En general, soy un programador defensivo, sin embargo, también creo que con una prueba exhaustiva de TDD y de unidades apropiadas, puede poner los controles en el código en los niveles requeridos y tener la seguridad de que está funcionando como debería una vez que llegue a las secciones de nivel inferior .