Therac-25!
Los desarrolladores del proyecto Therac-25 tenían bastante confianza en el momento entre una interfaz de usuario y un problema relacionado con la interfaz en una máquina de rayos X terapéutica.
No deberían haber sido.
Puede obtener más información sobre este famoso desastre de software de vida o muerte en:
http://www.youtube.com/watch?v=izGSOsAGIVQ
o
http://en.wikipedia.org/wiki/Therac-25
Su aplicación puede ser mucho menos sensible a fallas que los dispositivos médicos. Un método útil es calificar la exposición al riesgo como el producto de la probabilidad de ocurrencia y el costo de ocurrencia durante la vida del producto para todas las unidades que podrían producirse.
Si ha elegido construir su código para que dure (y parece que lo ha hecho), debe considerar la ley de Moore que puede eliminar fácilmente varios ceros cada pocos años a medida que las computadoras dentro o fuera de su sistema se vuelven más rápidas. Si envía miles de copias, corte más ceros. Si los usuarios realizan esta operación diariamente (o mensualmente) durante años, elimine algunos más. Si se usa donde está disponible la fibra de Google, ¿entonces qué? Si la basura de la interfaz de usuario se acumula a mediados de la operación de la GUI, ¿eso afecta a la carrera? ¿Está utilizando una biblioteca de código abierto o de Windows detrás de su GUI? ¿Pueden las actualizaciones afectar el tiempo?
Los semáforos, bloqueos, mutexes, sincronización de barreras se encuentran entre las formas de sincronizar actividades entre subprocesos. Potencialmente, si no los está utilizando, otra persona que mantiene su programa podría y luego, rápidamente, las suposiciones sobre las relaciones entre los hilos pueden cambiar y el cálculo sobre la condición de la carrera podría invalidarse.
Le recomiendo que sincronice explícitamente porque si bien es posible que nunca lo vea crear un problema, un cliente podría hacerlo. Además, incluso si su condición de carrera nunca ocurre, ¿qué sucede si usted o su organización son llamados a la corte para defender su código (como Toyota estuvo relacionado con el Prius hace unos años)? Cuanto más exhaustiva sea tu metodología, mejor te irá. Puede ser mejor decir "nos protegemos de este caso improbable como este ..." que decir "sabemos que nuestro código fallará, pero escribimos esta ecuación para mostrar que no sucederá en nuestra vida. Probablemente". "
Parece que el cálculo de probabilidad proviene de otra persona. ¿Conocen su código y los conoce lo suficiente como para confiar en que no se cometió ningún error? Si calculé una confiabilidad del 99.99997% para algo, también podría pensar en mis clases de estadísticas de la universidad y recordar que no siempre obtuve el 100%, y retrocedo un buen porcentaje en mis propias estimaciones de confiabilidad personal.