menu_superior

Vacuna tu software, utiliza el testing!!

Vacunas_testingHace unos días ha sido noticia el trágico caso de un niño que ha contraído la difteria. Que un niño padezca una enfermedad infecciosa es algo corriente, lo que le ha dado trascendencia al caso ha sido la combinación de 3 factores:

.- La difteria es una enfermedad practicamente erradicada de Europa Occidental.

.- El calendario de vacunación incluye la vacuna de la difteria y de otras muchas enfermedades que están practicamente desaparecidas.

.- Los padres, responsables últimos de la salud del menor, no le habían vacunado porque no “creían” en los efectos de las vacunas (dejo de lado la ironía que supone que la ciencia actua independientemente de que creas o no en ella…)

Sin entrar en el fondo de la cuestión respecto a responsabilidades ni cuestiones de salud pública -y posicionandome sin ningún genero de dudas a favor de la vacunación como medida preventiva- quiero escribir este post haciendo ese paralelismo entre dos medidas preventivas: el testing de software y la vacunación contra enfermedades.

Una medida preventiva es una técnica que nos permite evitar que algo ocurra o reducir significativamente su impacto. Obvio decir que esto de impedir que un evento negativo suceda es bueno porque evita un daño, aunque también hay que hacer constar que tiene que haber un balance positivo, es decir, las pérdidas en caso de que se de el evento son peores que los costes de evitarlo. Para que una medida preventiva sea eficiente tenemos que evaluar el impacto del daño. Si lo trasladamos a nuestro contexto, tanto los costes de las vacunas como los del testing se contraponen al coste y al daño de las enfermedades (medicamentos, hospitalización, contagios, bajas laborales, consecuencias sobre la salud e incluso la muerte) y de los defectos (mantenimientos correctivos, parches, horas de retrabajo, servicios caídos, clientes perdidos, sanciones e incluso el cierre de la empresa). Es fácil elegir, no? No tanto para los “antivacunas”.

A corto plazo

Es interesante resaltar el hecho de que no aplicar medidas preventivas es tan fácil porque en el cortísimo plazo no pasa nada. Si no me pongo la vacuna, seguramente esta tarde todo va a seguir igual, si no hago pruebas, mañana los desarrolladores van a seguir escribiendo código igual… Lo malo es que en ambos casos llegará el día que la enfermedad ataque y que el defecto se manifieste en producción, ese día habrá que ir contrarreloj para solucionar un problema que atacará sin avisar. Dos problemas en uno, porque además de tener que lidiar con una enfermedad o un defecto, nos enfrentaremos al agravante de que con la urgencia todo sale peor.

 Medio plazo

En el medio plazo tenemos la tranquilidad de no tener que estar pendientes de problemas que puedan surgir. Nuestra gestión y nuestra dedicación a determinadas tareas de soporte no son iguales si tenemos funcionando las medidas preventivas que si no las tenermos. Reducir o eliminar completamente este riesgo nos permite dedicarnos a construir y trabajar con cierta perspectiva, sin la urgencia de tener que solucionar un problema lo antes posible porque tenemos un servicio parado.

Claro, siempre pueden pasar cosas imprevistas! (por ahí nos vendrán los “NoEstimates”). Nada nos garantiza estar totalmente a salvo porque, en general, tanto el testing como la vacunación tienen una tasa de error, que es pequeña, que es poco probable, pero que existe y está ahí. Eso sí, los sucesos negativos que se den siempre serán menos frecuentes y menos graves que si no hubieramos utilizado medidas preventivas.

A largo plazo

Personalmente creo que en el largo plazo es donde más y mejores efectos tienen las medidas preventivas. Es como si el efecto beneficioso y la carencia de problemas se fuesen extendiendo y acumulando dando una cosecha de frutos muy deseables: si el efecto duradero de las vacunas elimina enfermedades terribles (viruela, polio, difteria, etc) en poblaciones enteras, el del testing también es importante, ya que podemos erradicar defectos, reducir su incidencia, incrementar significativamente la calidad del software, planear y calcular el coste de los equipos de trabajo (cargas de trabajo previsibles, sin urgencias derivadas de defectos en producción), sistemas confiables (sin defectos), servicios de altísima disponibilidad, satisfacción de los usuarios, etc.

, ,

Comments are closed.