Articulo de referencia

Envejecimiento del software

En ingeniería de software , el envejecimiento del software es la tendencia del software a fallar o causar una falla del sistema después de ejecutarse continuamente durante un ti...

En ingeniería de software , el envejecimiento del software es la tendencia del software a fallar o causar una falla del sistema después de ejecutarse continuamente durante un tiempo determinado, o debido a cambios continuos en los sistemas que rodean al software. El envejecimiento del software tiene varias causas, incluida la incapacidad del software antiguo para adaptarse a las necesidades cambiantes o las plataformas tecnológicas cambiantes, y la tendencia de los parches de software a introducir más errores. A medida que el software envejece, se vuelve menos adecuado para su propósito y eventualmente dejará de funcionar como debería. Reiniciar o reinstalar el software puede actuar como una solución a corto plazo. [1] Un método de gestión de fallas proactiva para lidiar con el incidente del envejecimiento del software es el rejuvenecimiento del software . Este método puede clasificarse como una técnica de diversidad de entorno que generalmente se implementa a través de agentes de rejuvenecimiento de software (SRA).

El fenómeno fue identificado por primera vez por David Parnas , en un ensayo que exploraba qué hacer al respecto: [2]

"Los programas, al igual que las personas, envejecen. No podemos evitar el envejecimiento, pero podemos comprender sus causas, tomar medidas para limitar sus efectos, revertir temporalmente parte del daño que ha causado y prepararnos para el día en que el software ya no sea viable". [3]

Desde un punto de vista académico e industrial, el fenómeno del envejecimiento del software ha aumentado. Las investigaciones recientes se han centrado en aclarar sus causas y efectos. [4] La hinchazón y la fuga de memoria , junto con la corrupción de datos y los bloqueos de archivos no publicados son causas particulares del envejecimiento del software.

Gestión proactiva del envejecimiento del software

Envejecimiento del software

Los fallos de software son una causa más probable de interrupciones no planificadas del sistema en comparación con los fallos de hardware. [5] [6] Esto se debe a que el software exhibe con el tiempo una tasa de fallos cada vez mayor debido a la corrupción de datos, la acumulación de errores numéricos y el consumo ilimitado de recursos. En el software ampliamente utilizado y especializado, una acción común para solucionar un problema es reiniciar porque el envejecimiento se produce debido a la complejidad del software que nunca está libre de errores. Es casi imposible verificar por completo que un software esté libre de errores. Incluso el software de alto perfil como Windows y macOS debe recibir actualizaciones continuas para mejorar el rendimiento y corregir errores. El desarrollo de software tiende a estar impulsado por la necesidad de cumplir con los plazos de lanzamiento en lugar de garantizar la confiabilidad a largo plazo. [7] Diseñar software que pueda ser inmune al envejecimiento es difícil. No todo el software envejecerá al mismo ritmo, ya que algunos usuarios usan el sistema con mayor intensidad que otros. [8]

Rejuvenecimiento

Para evitar fallos o degradaciones, se puede emplear el rejuvenecimiento del software de forma proactiva, ya que el envejecimiento inevitable conduce a fallos en los sistemas de software. Esta técnica proactiva se identificó como una solución rentable durante la investigación en los Laboratorios AT&T Bell sobre software tolerante a fallos en la década de 1990. [9] El rejuvenecimiento del software funciona eliminando las condiciones de error acumuladas y liberando recursos del sistema, por ejemplo, vaciando las tablas del núcleo del sistema operativo, utilizando la recolección de basura, reinicializando las estructuras de datos internas y, quizás el método de rejuvenecimiento más conocido es reiniciar el sistema.

Existen técnicas simples y técnicas complejas para lograr el rejuvenecimiento. El método con el que la mayoría de las personas están familiarizadas es el reinicio del hardware o software . Un ejemplo más técnico sería el método de rejuvenecimiento del software del servidor web Apache. Apache implementa una forma de rejuvenecimiento al matar y recrear procesos después de atender una cierta cantidad de solicitudes. [10] Otra técnica es reiniciar las máquinas virtuales que se ejecutan en un entorno de computación en la nube . [11]

La corporación multinacional de telecomunicaciones AT&T ha implementado un rejuvenecimiento del software en el sistema de recolección de datos de facturación en tiempo real en Estados Unidos para la mayoría de las centrales telefónicas. [12]

Algunos sistemas que han empleado métodos de rejuvenecimiento de software incluyen: [13]

  1. Sistemas de procesamiento de transacciones
  2. Servidores web
  3. Sistemas de naves espaciales

El Simposio Internacional IEEE sobre Ingeniería de Confiabilidad de Software (ISSRE) organizó el quinto Taller Internacional Anual sobre Envejecimiento y Rejuvenecimiento de Software (woSAR) en 2013. Los temas incluyeron:

  • Diseño, implementación y evaluación de mecanismos de rejuvenecimiento.
  • Modelado, análisis e implementación de la programación de rejuvenecimiento.
  • Evaluación comparativa de rejuvenecimiento de software

Fugas de memoria

Algunos lenguajes de programación , como C y C++ , permiten al programador asignar memoria de montón . Además, es posible que se requiera que el programador libere la memoria cuando esta ya no sea necesaria. La liberación de la memoria es necesaria porque algunos sistemas operativos (OS) no realizan la recolección de basura cuando finaliza un proceso . Con el tiempo, es probable que esto consuma cada vez más memoria, lo que eventualmente hará que la computadora se quede sin memoria. [14] En condiciones de poca memoria, la computadora generalmente funciona más lento debido al intenso intercambio y la agitación . Cuando esto sucede, las aplicaciones se vuelven lentas o incluso no responden. Si la computadora se queda sin memoria y espacio de intercambio, el sistema operativo podría reiniciarse automáticamente o, peor aún, bloquearse. [15]

Los programas escritos en lenguajes de programación que utilizan un recolector de basura (por ejemplo, Java ) son menos propensos a sufrir fugas de memoria, ya que el recolector de basura liberará la memoria a la que ya no se hace referencia. Sin embargo, esto no significa que sea imposible escribir código que produzca fugas de memoria en dichos lenguajes.

En ocasiones, los componentes críticos del propio sistema operativo pueden ser una fuente de fugas de memoria. En Microsoft Windows , por ejemplo, el uso de memoria de un complemento del Explorador de Windows puede agotar la memoria disponible hasta el punto de dejar inutilizable todo el equipo. Puede ser necesario reiniciarlo . [16]

Implementación

Dos métodos para implementar el rejuvenecimiento son:

  1. Rejuvenecimiento basado en el tiempo
  2. Rejuvenecimiento basado en predicciones

Hinchazón de la memoria

La recolección de basura es una forma de administración automática de memoria mediante la cual el sistema recupera automáticamente la memoria no utilizada. Por ejemplo, .NET Framework administra la asignación y liberación de memoria para el software que se ejecuta en él. Pero el seguimiento automático de estos objetos lleva tiempo y no es perfecto.

Los servicios web basados ​​en .NET administran varios tipos lógicos de memoria, como la pila, el montón no administrado y el administrado (espacio libre). A medida que la memoria física se llena, el sistema operativo escribe en el disco partes de ella que rara vez se usan, de modo que pueda reasignarlas a otra aplicación, un proceso conocido como paginación o intercambio. Pero si la memoria necesita usarse, debe volver a cargarse desde el disco. Si varias aplicaciones realizan grandes demandas, el sistema operativo puede pasar gran parte de su tiempo simplemente moviendo datos entre la memoria principal y el disco, un proceso conocido como destrucción de disco . [17] Dado que el recolector de basura tiene que examinar todas las asignaciones para decidir cuáles están en uso, puede exacerbar esta destrucción. Como resultado, el intercambio extenso puede llevar a ciclos de recolección de basura que se extienden desde milisegundos a decenas de segundos. Esto da como resultado problemas de usabilidad.

Véase también

Referencias

  1. ^ Shereshevsky, M.; Crowell, J.; Cukic, B.; Gandikota, V.; Yan Liu (2003). "Envejecimiento del software y multifractalidad de los recursos de memoria". Conferencia internacional de 2003 sobre sistemas y redes confiables, 2003. Actas . págs.  721– 730. doi :10.1109/DSN.2003.1209987. ISBN . 978-0-7695-1952-4. Número de identificación del sujeto  18697750.
  2. ^ Parnas, DL (1994). "Envejecimiento del software". Actas de la 16.ª Conferencia internacional sobre ingeniería del software . pp.  279– 287. doi :10.1109/ICSE.1994.296790. ISBN 978-0-8186-5855-6.S2CID 790287  .
  3. ^ "Software Aging | the morning paper". 14 de octubre de 2014. Consultado el 12 de febrero de 2024 .
  4. ^ Grottke, Michael; Matias, Rivalino; Trivedi, Kishor S. (2008). "Los fundamentos del envejecimiento del software". Talleres de la Conferencia Internacional IEEE sobre Ingeniería de Confiabilidad del Software de 2008 (ISSRE WKSP) . pp.  1– 6. doi :10.1109/ISSREW.2008.5355512. ISBN 978-1-4244-3416-9.S2CID 11527276  .
  5. ^ "Avena: -".
  6. ^ Garg, S.; Van Moorsel, A.; Vaidyanathan, K.; Trivedi, KS (1998). "Una metodología para la detección y estimación del envejecimiento del software". Actas del Noveno Simposio Internacional sobre Ingeniería de Confiabilidad del Software (Cat. N.° 98TB100257). págs.  283– 292. doi :10.1109/ISSRE.1998.730892. ISBN 978-0-8186-8991-8.S2CID8696313  .
  7. ^ Castelli, V.; Harper, RE; Heidelberger, P.; Hunter, SW; Trivedi, KS; Vaidyanathan, K.; Zeggert, WP (1 de marzo de 2001). "Gestión proactiva del envejecimiento del software". IBM Journal of Research and Development . 45 (2): 311– 332. CiteSeerX 10.1.1.28.7273 . doi :10.1147/rd.452.0311. ISSN  0018-8646. 
  8. ^ Gross, KC; Bhardwaj, V.; Bickford, R. (2003). "Detección proactiva de mecanismos de envejecimiento del software en computadoras críticas para el rendimiento". 27.° Taller anual de ingeniería de software Goddard/IEEE de la NASA, 2002. Actas . pp.  17– 23. doi :10.1109/SEW.2002.1199445. ISBN . 978-0-7695-1855-8. Número de identificación del sujeto  17167955.
  9. ^ Cotroneo, D., Natella, R., Pietrantuono, R. y Russo, S. 2014. Una encuesta sobre el envejecimiento y el rejuvenecimiento del software. ACM J. Emerg. Technol. Comput. Syst. 10, 1, artículo 8 (enero de 2014), 34 páginas.
  10. ^ Trivedi, KS y Vaidyanathan, K. 2007. Envejecimiento y rejuvenecimiento del software. Enciclopedia Wiley de Ciencias de la Computación e Ingeniería.
  11. ^ Bruneo, Darío; Distéfano, Salvatore; Longo, Francisco; Puliafito, Antonio; Scarpa, Marco (2013). "Rejuvenecimiento del software basado en cargas de trabajo en sistemas en la nube". Transacciones IEEE en computadoras . 62 (6): 1072– 1085. doi :10.1109/TC.2013.30. S2CID  23981532.
  12. ^ Trivedi, Kishor S.; Vaidyanathan, Kalyanaraman (1 de enero de 2004). Reis, Ricardo (ed.). Rejuvenecimiento del software: modelado y análisis . IFIP Federación Internacional de Procesamiento de la Información. Springer US. págs.  151– 182. doi :10.1007/1-4020-8159-6_6. ISBN. 978-1-4020-8158-3.
  13. ^ Lei Li; Vaidyanathan, K.; Trivedi, KS (2002). "Un enfoque para la estimación del envejecimiento del software en un servidor web". Actas del Simposio Internacional sobre Ingeniería de Software Empírica . pp.  91– 100. doi :10.1109/ISESE.2002.1166929. ISBN 978-0-7695-1796-4. Número de identificación del sujeto  8170010.
  14. ^ "Descripción general de las fugas de memoria". msdn.microsoft.com . Consultado el 4 de noviembre de 2015 .
  15. ^ Martin Brown; Ken Milberg (16 de noviembre de 2010). "Optimización del rendimiento de la memoria de AIX 7, parte 3, Ajuste de la configuración del espacio de intercambio". IBM .
  16. ^ "Cómo prevenir pérdidas de memoria en aplicaciones de Windows (Windows)". msdn.microsoft.com . Consultado el 4 de noviembre de 2015 .
  17. ^ SR, Chaitra; Basu, Anirban (2012). "Rejuvenecimiento del software en servicios web". Revista internacional de aplicaciones informáticas . 54 (8): 31– 35. Bibcode :2012IJCA...54h..31S. doi : 10.5120/8589-2340 .

Lectura adicional

  • R. Matias Jr. y PJ Freitas Filho, "Un estudio experimental sobre el envejecimiento y rejuvenecimiento del software en servidores web", Actas de la 30ª Conferencia Anual Internacional de Software y Aplicaciones Informáticas (COMPSAC'06), Vol. 01, págs. 189 – 196, 2006.
  • M. Grottke, R. Matias Jr. y KS Trivedi, "Los fundamentos del envejecimiento del software", Taller sobre envejecimiento y rejuvenecimiento del software (WoSAR/ISSRE), 2008.
  • R. Matias Jr, P. Barbetta, K. Trivedi, P. Freitas Filho "Pruebas de degradación acelerada aplicadas a experimentos de envejecimiento de software", IEEE Transactions on Reliability 59(1): 102–114,2010.
  • M. Grottke, L. Li, K. Vaidyanathan y KS Trivedi, "Análisis del envejecimiento del software en un servidor web", IEEE Transactions on Reliability, vol. 55, núm. 3, págs. 411–420, 2006.
  • M. Grottke, K. Trivedi, "Combatir errores: eliminar, reintentar, replicar y rejuvenecer", IEEE Computer 40(2): 107–109, 2007.
  • Más artículos en Actas del Taller sobre Envejecimiento y Rejuvenecimiento de Software (WoSAR'08,'10, '11, '12, '13, '14) en IEEE Xplore.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Software_aging&oldid=1252828853"