En ocasiones, especialmente cuando el trabajo diario nos abruma, podemos llegar a pensar que la atención al detalle en nuestro oficio no tiene tanta importancia. A fin de cuentas, ¿qué podría pasar si no testeo bien esta parte del código que se me resiste? ¿Y si doy por buena esta prueba funcional aunque la aplicación no hace lo que debe a la perfección? Al fin y al cabo, hace “prácticamente” lo mismo y seguro que en la próxima entrega lo corrigen…
Es muy posible que algunos de nosotros hayamos pensado así en alguna ocasión, pero debemos ser conscientes de lo relevante que puede llegar a ser hacer nuestro trabajo de forma correcta. Os voy a poner algunos ejemplos reales de defectos en el software que no fueron detectados, por la causa que fuera, y que se pudieron evitar con la ayuda de un buen equipo de calidad:
- La sonda atmosférica de la NASA “Mars Climate Orbiter” se destruyó al entrar en la atmosfera marciana debido a un error de cálculo. Debía orbitar a 150 kilómetros pero se situó a 57. El defecto se encontraba en las unidades de medida que se utilizaron en el software de los propulsores, que realizaba los cálculos en libras de fuerza (sistema anglosajón) y el resto del software utilizaba Newtons (sistema métrico). Unas buenas pruebas de integración hubiesen ahorrado a la NASA la friolera de 125 millones de dólares.
- En 2010 millones de videoconsolas Playstation 3 se vieron afectadas por un “sucedáneo” del efecto 2000. El reloj interno de ciertos modelos “pensaba” que el 2010 era año bisiesto y tomó el día 1 de marzo como 29 de febrero. Esto provocó una cadena de fallos en varias funcionalidades como el acceso al juego on-line y la pérdida de algunos datos guardados. Las pérdidas ocasionadas por la mala imagen dada, podían haberse evitado con una buena revisión del firmware.
- En la década de los 80, un modelo de acelerador lineal (Therac-25) empleado en hospitales para tratar tumores, fue causante de al menos cinco fallecimientos. La máquina emitía radiación de alta energía sobre células cancerosas sin dañar el tejido circundante. Los operarios, con el tiempo y la práctica, conseguían gran velocidad tecleando la secuencia de comandos para iniciar un tratamiento. Pero debido a un fallo de programación, si durante este proceso se efectuaba una corrección de cálculo en menos de ocho segundos, la máquina podía emitir 100 veces más energía de la requerida.
- El cohete Mariner 1, se desvió de su trayectoria de vuelo poco después de su lanzamiento. El control de la misión se vio obligado a destruir el cohete pasados 5 minutos desde el despegue. Al codificar una fórmula manuscrita, uno de los programadores se saltó un simple guión sobre una expresión. El cohete modificó su trayectoria para compensar el error creado por la falta de este, hasta sacarlo de la trayectoria prevista.
Hay muchos más casos similares, causantes de la pérdida de vidas humanas y daños económicos elevados.
Quizá alguno de vosotros estáis pensando: yo trabajo para una compañía de [seguros/banca/telecomunicaciones/etc] y un defecto no detectado no puede causar unos problemas tan graves como los que acabamos de leer. Lamento contradeciros, las pérdidas económicas de un software defectuoso pueden ser muy cuantiosas, arruinando la imagen de nuestro cliente y, por supuesto, la de nuestra empresa.
Recordad siempre que somos “la última línea de defensa” frente al software defectuoso, evitemos que el cliente y el usuario se vean afectados por un descuido.
Si quieres conocer más sobre nuestras soluciones de calidad de software, visita nuestra web.
Jorge Moya
Senior Test Engineer | SOGETI España
Pingback: Una experiencia en la universidad | QA:news
Hola Ignacio, gracias por tu comentario.
El problema de la mala elección del entorno de pruebas puede hacer que toda nuestra labor de Testing sea en balde. Si bien existen métodos para extrapolar las configuraciones entre entornos (un buen Capacity Planning), las necesidades de cada proyecto nos obligan en muchas ocasiones a centrarnos en un entorno que no es propiamente de pruebas.
Estas diferencias son mucho más acusadas en pruebas de prestaciones, donde realmente necesitamos saber la capacidad de la arquitectura hardware. En algunos de los clientes para los que he trabajado, se opta por realizar las ejecuciones en Producción directamente pero tenemos el problema del uso de datos; habitualmente no se realizan operaciones de alta o modificación para evitar generar información errónea.
Hay que buscar un equilibrio entre el cómo, el por qué y el dónde, y dependerá del objetivo general de la prueba y de, como bien comentas en tu blog, las posibilidades que nos brinde el cliente.
Un saludo,
Jorge Moya
Me gustaMe gusta
Quizás el peor caso fue http://pesadillaalfondodelapantalla.blogspot.com.es/2016/04/chernobyl-o-por-que-no-hacer.html
Me gustaMe gusta