Programación defensiva – ¡Protégete!


¡Bienvenidos un día más a un nuevo rootie queridos amigos! Hoy vamos a profundizar en un tema del que ya he hablado varias veces de forma indirecta y del cual soy fiel seguidor y profeta, la programación defensiva.

¿Qué es la programación defensiva?

Entendemos la programación defensiva, como una forma de programar que nos garantiza el comportamiento de nuestro software. Esto se consigue a través de la aplicación de diferentes técnicas en nuestro código:

Reducir complejidad del código fuente

KISS! (Keep It Simple, Stupid) o ¡Hazlo sencillo, estúpido! Es una de las claves para reducir la complejidad del código y cuanto mas sencillo es el código, menos posibilidad de encontrar bugs. Esto puede ser problemático si buscamos que nuestro código sea capaz de mitigar cualquier clase de error. El querer controlar posibles fallos del código, tiene la contrapartida de que puede generar más bugs, pero claro, siempre puedes modularizar y KISS 😉

programacion defensiva kiss
KISS, buen grupo de hard rock, mejor principio de programación

Revisiones del código fuente (Code Review)

El proceso de code review es un proceso casi obligatorio hoy en día en la industria. El objetivo de las code reviews es normalmente doble:

  • Busca el encontrar errores que el programador no haya encontrado
  • Ofrece al autor del código feedback, normalmente de otro programador, con lo que ayuda a mejorar a ambos.

La code review ha de realizarse siempre por alguien distinto al autor original, ya que el conocimiento sobre el propio trabajo, algunas veces hace que nos sea imposible ver nuestros errores. Ademas la persona que efectúa la revision ha de ser extremadamente rigurosa y concisa en su feedback.

Pruebas de software

Aunque estamos en 2017 y el TDD esta ampliamente extendido, te encuentras con que hay gran cantidad de devs y empresas que, no es que no utilicen TDD ¡sino que ni siquiera tienen tests!.

El uso de test para buscar errores en nuestro código es una muy buena costumbre. Los test han de diseñarse siempre con el objetivo de probar el flujo esperado del software así como el de error. Respecto a que tipos de test, yo por experiencia propia recomiendo siempre como mínimo test unitarios. Recuerda que si hemos seguido el principio KISS, tendría que resultar muy fácil escribirlos.

Reutilización de código

Siempre que tengamos código existente que ha sido probado y estamos seguros que va a funcionar al 100% como esperamos, podremos reutilizarlo allá donde lo necesitemos. Esto nos ahorra el crear código duplicado y a posibilidad de introducir nuevos bugs en el código fuente.

Legacy code, el demonio

Querido lector, si no has tenido nunca la experiencia de abrir un proyecto y encontrarte código fuente de hace 8 años, sin documentar, y tres versiones por detras de la más actual, te envidio, mucho.

El problema al que nos enfrentamos con el código legado es que muchas veces al hacer pequeños cambios, puede tener consecuencias fatales para toda la aplicación. Esto puede ser por diferentes motivos, como uso de funciones discontinuadas, ausencia de nuevas funciones, etc.

Llegado el momento de enfrentarse a uno de los engendros del legacy code, es conveniente evaluar si el proyecto puede ser actualizado a una versión más moderna. Normalmente una actualización, requerirá un gran número de cambios en el código fuente, pero normalmente, es un gran beneficio. Estos cambios normalmente traerán aparejados un incremento en el rendimiento y un buen número de nuevas funcionalidades y mejoras.

Baja tolerancia contra errores potenciales

Ser consciente que el código puede contener errores de los que no estemos al corriente. Esto nos obligará a proteger nuestro código de lo que conocemos y ser proactivos respecto al mismo.

Y con esto terminamos nuestro rootie (express) de hoy. Esperamos que todos estos consejos os ayuden a mejorar vuestros proyectos.

Como siempre para cualquier duda, pregunta, comentario, soborno o amenaza, podéis usar los comentarios o en nuestras redes sociales Facebook y Twitter.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *