¿Por qué los programas informáticos desarrollan fallas simplemente ejecutándose durante un cierto período de tiempo, si el hardware de la computadora permanece sin cambios y sin estropear? ¿Por qué comienzan a funcionar normalmente después de realizar una reinstalación?

Uno de los hechos simples del software de computadora es que cuando se trata de cientos, miles o incluso millones de líneas de código, se vuelve difícil e incluso imposible garantizar que cada posible ruta de ejecución esté libre de fallas. Incluso los sistemas operativos UNIX muy estables pueden contener fallas de software. Es posible que tenga un programa que funcione el 99.99% de las veces, pero que se ejecute incorrectamente cuando se pase un cierto valor al programa. Con programas suficientemente grandes, garantizar cada escenario de ejecución posible se vuelve cada vez más difícil con el aumento de tamaño. Una razón para esto es el hecho de que el tiempo / dinero no es suficiente para realizar un trabajo de prueba tan completo como uno quisiera realizar. Este es un hecho simple del mundo de los negocios. Se estima que los programas generales como MS-Windows tienen una densidad de defectos de 2.0 por 1000 líneas de código. Uno de los programas de software más limpios es el software utilizado en el transbordador espacial. Tiene una relación de densidad de defectos estimada de 0.1 fallas por 1000 líneas de código. También se debe tener en cuenta que la NASA estima que el costo de este código es de $ 1,000 por línea de código, lo cual es muy costoso.
Dicho esto, las computadoras tienden a experimentar más problemas cuanto más tiempo transcurre entre reinicios. He trabajado para varias preocupaciones en las que es política reciclar los servidores UNIX y Windows cada 30 días.

El problema siempre estuvo ahí, pero las condiciones para su aparición aún no se han puesto en marcha . Es por eso que ejecutamos “pruebas de remojo”. Esto implica ejecutar la aplicación durante un período prolongado de tiempo determinado por su ventana de operación / mantenimiento aceptable típica. Radu Hambasan cubre muy bien la mayoría de las posibles razones para que una aplicación falle repentinamente después de un período de tiempo. En mi experiencia, esto normalmente es causado por algún recurso que se agota. En Java, el más común de los cuales es la memoria debido a sesiones u objetos asignados incorrectamente. En otros casos, puede ser tan simple como quedarse sin espacio en disco.

Secundo la respuesta de Radu Hambasan.

Además, una de las razones podría deberse a que se actualizaron algunas dependencias o se corrompieron los datos de aplicación (caché y archivos temporales).

Crea archivos fragmentados. En mi opinión, quien desarrolla el software tiene que manejar esto bien. Pero veo que en muchos casos no se maneja bien …

El software utiliza el recurso informático, crea registros o archivos en el sistema y tampoco se realiza una limpieza en segundo plano, lo que conduce a gliches.
El programador sabio piensa en un escenario de 360 ​​° y lo maneja mejor.

Esto puede suceder por muchas razones:

  • Confían en algunos paquetes recibidos a través de la red. Tal vez no manejan los paquetes corruptos correctamente.
  • Tienen un contador interno que sigue aumentando y en algún momento se desborda.
  • Errores de asignación de memoria. (Si hay una pérdida de memoria y el programa sigue pidiendo memoria, en algún momento el sistema se quedará sin memoria).
  • Están utilizando algún tipo de caché / historial y eso se corrompe.
  • Puede ocurrir alguna condición de carrera muy rara.

Si la falla no se basó en hardware, después de la reinstalación / reinicio, los cachés / contadores / memoria se liberarán y estarán listos para ser utilizados nuevamente.

Tenga en cuenta que una computadora, cualquier computadora, tiene básicamente dos cosas: un programa y un estado, y que la aplicación del programa al estado, para generar el siguiente estado, es determinista. Por lo tanto, si ejecutar el programa dos veces le da resultados diferentes, solo puede significar que los estados en los que se ejecutó el programa fueron realmente diferentes. Esto puede significar memoria, disco, software, cualquier cosa.

Supongo que la respuesta ya se ha cubierto. Sin embargo, me gustaría dar un ejemplo. Tomemos una aplicación de Windows que utiliza un recurso particular que inicia un servicio en segundo plano. Cada vez que se cierra la aplicación, si el desarrollador no puede finalizar el servicio, existe la posibilidad de que se ejecuten varias instancias cada vez que se abre la aplicación. Esto eventualmente consume la memoria / caché, etc. En realidad, esto es algo básico para un virus también …

debido a los archivos de volcado creados,
si lo ha notado, entonces no todos los programas lo hacen porque están diseñados para manejar esos archivos adicionales.