¿Cuáles son los peores casos de falla de ingeniería de software?

Es una pregunta interesante, ya que está solicitando específicamente ejemplos de fallas de ingeniería de software , que son diferentes a errores de software simples o fallas de software .

Para el peor de los casos, todavía iría con un error famoso: el Therac-25. Este era un dispositivo de radioterapia, diseñado para destruir tumores sin dañar el tejido circundante. El Therac-25 tenía dos modos: baja potencia y alta potencia. En versiones anteriores del dispositivo, los enclavamientos de hardware evitaban que se administrara la dosis de radiación incorrecta. En el modelo 25, estos enclavamientos de hardware fueron reemplazados por enclavamientos de software. Los ingenieros no se dieron cuenta de que los enclavamientos del software contenían un error de condición de carrera que podía causar que el paciente recibiera 100 veces la dosis de radiación deseada. Esto sucedió en seis ocasiones, y tres pacientes murieron como resultado directo.

La investigación subsiguiente culpó a las malas prácticas de diseño y desarrollo de software como la causa principal de la falla. Si bien los errores de codificación específicos tuvieron la culpa, la comisión concluyó que los errores de codificación fueron el resultado de malas prácticas por parte del equipo de ingeniería en general. Específicamente, la falla en el diseño de un entorno comprobable, la falta de revisiones de código adecuadas y la falta de respuesta a los informes del campo. Aquí hay una buena reseña de los hallazgos de la comisión: http://sunnyday.mit.edu/papers/t…

Una observación interesante para los probadores de software: la condición que causó la falla ocurrió como resultado de una entrada de usuario no estándar en el teclado. En otras palabras, un probador de caja negra promedio, que ejecuta un conjunto de casos ad hoc, probablemente habría encontrado el error y salvado vidas.

El impacto de las fallas de Therac-25 todavía se puede ver hoy en la industria del software. Es el caso de estudio estándar sobre la importancia de probar y manejar sistemas críticos de seguridad.