Articulo de referencia

Podredumbre del software

La degradación del software ( también conocida como deterioro de bits , deterioro del código , erosión del software o entropía del software ) es la degradación, el deterioro o l...

La degradación del software ( también conocida como deterioro de bits , deterioro del código , erosión del software o entropía del software ) es la degradación, el deterioro o la pérdida del uso o el rendimiento del software con el paso del tiempo.

The Jargon File , un compendio de la jerga hacker, define "bit rot" como una explicación jocosa para la degradación de un programa de software con el tiempo, incluso si "nada ha cambiado"; la idea detrás de esto es casi como si los bits que componen el programa estuvieran sujetos a desintegración radiactiva. [ 1 ]

Causas

Diversos factores son responsables del deterioro del software, entre ellos los cambios en el entorno en el que opera, la degradación de la compatibilidad entre las partes del propio software y la aparición de errores en código no utilizado o poco utilizado.

Cambio ambiental

Grabación de pantalla de un error introducido en Blender 2.9 como resultado de cambios en los controladores de AMD , que provocaba destellos de luz y una representación incorrecta de las normales de la superficie . Fue necesario actualizar el código de Blender para adaptarlo a estos cambios y solucionar el error.

Cuando se producen cambios en el entorno del programa, especialmente cambios que el diseñador no previó, el software puede dejar de funcionar como se concibió originalmente. Por ejemplo, muchos de los primeros diseñadores de videojuegos utilizaban la velocidad del reloj de la CPU como temporizador en sus juegos. [ 2 ] Sin embargo, los relojes de las CPU más recientes eran más rápidos, por lo que la velocidad del juego aumentó en consecuencia, lo que provocó que los juegos fueran menos utilizables con el tiempo.

Una vez

Existen cambios en el entorno que no están relacionados con el diseñador del programa, sino con sus usuarios. Inicialmente, un usuario podía poner el sistema en funcionamiento y hacerlo funcionar sin problemas durante un tiempo. Pero, cuando el sistema deja de funcionar correctamente o los usuarios desean acceder a los controles de configuración, no pueden repetir ese paso inicial debido al contexto diferente y a la falta de información (contraseña perdida, instrucciones faltantes o simplemente una interfaz de usuario difícil de manejar que se configuró inicialmente por ensayo y error). El arquitecto de la información Jonas Söderström ha denominado a este concepto « una vez restaurable » [ 3 ] y lo define como «la cualidad en un sistema técnico que impide que un usuario restaure el sistema una vez que ha fallado».

Código no utilizado

Las partes del código que se usan con poca frecuencia, como los filtros de documentos o las interfaces diseñadas para ser utilizadas por otros programas, pueden contener errores que pasan desapercibidos. Con los cambios en los requisitos del usuario y otros factores externos, este código puede ejecutarse posteriormente, lo que expone los errores y hace que el software parezca menos funcional.

Código que se actualiza con poca frecuencia

El mantenimiento habitual del software y los sistemas también puede provocar su deterioro. En particular, cuando un programa contiene varias partes que funcionan de forma independiente , no tener en cuenta cómo los cambios en una parte afectan a las demás pueden introducir errores.

En algunos casos, esto puede manifestarse en modificaciones de las bibliotecas que utiliza el software, lo que afecta negativamente al mismo. Si la versión anterior de una biblioteca que antes funcionaba con el software ya no se puede usar debido a conflictos con otro software o a fallos de seguridad detectados en dicha versión, es posible que ya no exista una versión viable de la biblioteca necesaria para el programa.

conectividad en línea

El software comercial moderno suele conectarse a un servidor en línea para la verificación de licencias y el acceso a la información. Si el servicio en línea que alimenta el software se interrumpe, este podría dejar de funcionar. [ 4 ] [ 5 ]

Desde finales de la década de 2010, la mayoría de los sitios web utilizan conexiones HTTPS seguras . Sin embargo, esto requiere claves de cifrado llamadas certificados raíz , las cuales tienen fechas de vencimiento. Una vez que los certificados caducan, el dispositivo pierde la conectividad con la mayoría de los sitios web a menos que las claves se actualicen continuamente. [ 6 ]

Otro problema es que en marzo de 2021 se dejaron de usar los antiguos estándares de cifrado TLS 1.0 y TLS 1.1 . [ 7 ] Esto significa que los sistemas operativos, navegadores y otros programas en línea que no admiten al menos TLS 1.2 no pueden conectarse a la mayoría de los sitios web, ni siquiera para descargar parches o actualizar el navegador, si estos están disponibles. A esto se le conoce a veces como el «apocalipsis de TLS».

Entre los productos que no pueden conectarse a la mayoría de los sitios web se incluyen los PowerMac, los sistemas Unix antiguos y las versiones de Microsoft Windows anteriores a Server 2008/Windows 7 (al menos sin usar un navegador de terceros). El navegador Internet Explorer 8 de Server 2008/Windows 7 admite TLS 1.2, pero está deshabilitado de forma predeterminada. [ 8 ]

Clasificación

El deterioro del software se suele clasificar como "deterioro latente" o "deterioro activo".

Pudrición latente

El software que no se utiliza actualmente se vuelve gradualmente inutilizable a medida que el resto de la aplicación cambia. Los cambios en los requisitos del usuario y en el entorno del software también contribuyen a este deterioro.

podredumbre activa

El software que se modifica continuamente puede perder su integridad con el tiempo si no se aplican procesos de mitigación adecuados de forma constante. Sin embargo, gran parte del software requiere cambios continuos para cumplir con nuevos requisitos y corregir errores, y rediseñarlo cada vez que se realiza un cambio rara vez es práctico. Esto crea lo que es esencialmente un proceso evolutivo para el programa, lo que provoca que se aleje del diseño original. Como consecuencia de esto y de un entorno cambiante, las suposiciones de los diseñadores originales pueden quedar invalidadas, introduciendo así errores.

En la práctica, se puede priorizar la incorporación de nuevas funcionalidades sobre la actualización de la documentación ; sin embargo, sin documentación, es posible que se pierda información específica sobre ciertas partes del programa. En cierta medida, esto se puede mitigar siguiendo las mejores prácticas actuales en convenciones de codificación .

El deterioro del software activo disminuye una vez que una aplicación se acerca al final de su vida útil comercial y cesa su desarrollo. Los usuarios suelen aprender a sortear los errores restantes y el comportamiento del software se vuelve consistente, ya que nada cambia.

Ejemplos

Ejemplo de programa de IA

Muchos programas fundamentales de los inicios de la investigación en IA han sufrido un deterioro irreparable del software. Por ejemplo, el programa original SHRDLU (un programa pionero de comprensión del lenguaje natural ) no se puede ejecutar en ningún ordenador o simulador informático actual, ya que se desarrolló cuando LISP y PLANNER aún estaban en fase de desarrollo y, por lo tanto, utiliza macros y bibliotecas de software no estándar que ya no existen.

Ejemplo de foro en línea bifurcado

Supongamos que un administrador crea un foro utilizando software de código abierto y luego lo modifica sustancialmente añadiendo nuevas funciones y opciones. Este proceso requiere modificaciones extensas al código existente y se desvía de la funcionalidad original de dicho software.

A partir de aquí, existen varias formas en que el deterioro del software puede afectar al sistema:

  • El administrador puede realizar cambios accidentalmente que entren en conflicto entre sí o con el software original, lo que puede provocar que el foro funcione de forma inesperada o deje de funcionar por completo. Esto lo deja en una situación muy difícil: al haberse desviado tanto del código original, será complicado obtener soporte técnico y asistencia para reactivar el foro.
  • Es posible que se descubra una vulnerabilidad de seguridad en el código fuente original del foro, lo que requeriría un parche de seguridad. Sin embargo, debido a que el administrador ha modificado el código extensamente, es posible que el parche no sea directamente aplicable a su código, lo que obligaría al administrador a reescribir la actualización.
  • El administrador que realizó las modificaciones podría dejar su puesto, dejando al nuevo administrador con un foro complejo y muy modificado, sin documentación completa. Sin comprender del todo las modificaciones, al nuevo administrador le resulta difícil realizar cambios sin generar conflictos y errores. Además, la documentación del sistema original podría no estar disponible o, peor aún, ser engañosa debido a sutiles diferencias en los requisitos funcionales.

Ejemplo de wiki

Supongamos que un administrador web instala la última versión de MediaWiki , el software que impulsa wikis como Wikipedia, y luego no aplica ninguna actualización. Con el tiempo, es probable que el proveedor de alojamiento web actualice sus versiones del lenguaje de programación (como PHP ) y la base de datos (como MariaDB ) sin consultar al administrador web. Después de un tiempo prolongado, esto terminará por dañar sitios web complejos que no se hayan actualizado, ya que las últimas versiones de PHP y MariaDB incluirán cambios incompatibles al dejar obsoletas ciertas funciones integradas , rompiendo la compatibilidad con versiones anteriores y causando errores fatales . Otros problemas que pueden surgir con el software de un sitio web sin actualizar incluyen vulnerabilidades de seguridad y spam .

Refactorización

La refactorización es un método para abordar el problema del deterioro del software. Se describe como el proceso de reescribir el código existente para mejorar su estructura sin afectar su comportamiento externo. [ 9 ] Esto incluye eliminar el código obsoleto y reescribir las secciones que se han modificado extensamente y ya no funcionan de manera eficiente. Se debe tener cuidado de no cambiar el comportamiento externo del software, ya que esto podría introducir incompatibilidades y, por lo tanto, contribuir al deterioro del software. Algunos principios de diseño a considerar en la refactorización son mantener la estructura jerárquica del código e implementar la abstracción para simplificar y generalizar las estructuras del código. [ 10 ]

entropía del software

La entropía del software describe la tendencia de las reparaciones y modificaciones de un sistema de software a provocar que este pierda gradualmente su estructura o aumente su complejidad. [ 11 ] Manny Lehman utilizó el término entropía en 1974 para describir la complejidad de un sistema de software y establecer una analogía con la segunda ley de la termodinámica . Las leyes de evolución del software de Lehman establecen que un sistema de software complejo requerirá modificaciones continuas para mantener su relevancia en el entorno que lo rodea, y que dichas modificaciones aumentarán la entropía del sistema a menos que se realice un trabajo específico para reducirla. [ 12 ]

Ivar Jacobson et al. en 1992 describieron la entropía del software de manera similar y argumentaron que este aumento en el desorden a medida que se modifica un sistema siempre terminaría haciendo que un sistema de software no sea rentable de mantener, aunque el tiempo hasta que eso suceda depende en gran medida de su diseño inicial y puede extenderse mediante la refactorización. [ 13 ]

En 1999, Andrew Hunt y David Thomas utilizan la reparación de ventanas rotas como metáfora para evitar la entropía del software en el desarrollo de software. [ 14 ]

Véase también

Referencias

  1. Raymond, Eric. "Bit rot" . The Jargon File . Archivado del original el 7 de mayo de 2025. Recuperado el 3 de marzo de 2013 .
  2. Salemi, Joe (28 de enero de 1992). PC Magazine . Ziff Davis, Inc. pág. 286. 
  3. Jonas Söderström. "Onceability: The consequences of technology rot" . Archivado del original el 3 de junio de 2021.
  4. Amadeo, Ron (31 de octubre de 2016). "La historia (actualizada) de Android" . Ars Technica . Consultado el 31 de octubre de 2021 .
  5. "Adobe CS2 ya está disponible gratis, más o menos" . Mobile Magazine. 14 de enero de 2013. Archivado del original el 18 de enero de 2013. Consultado el 20 de enero de 2013 .
  6. Paul Wagenseil (24 de diciembre de 2020). "Apocalipsis postergado: estos dispositivos Android ya no se desconectarán el próximo otoño" . Tom's Guide . Consultado el 16 de marzo de 2023 .
  7. "RFC ft-ietf-tls-oldversions-deprecate: Desaprobando TLS 1.0 y TLS 1.1" . IETF Datatracker . 23 de marzo de 2021. Consultado el 16 de marzo de 2023 .
  8. "Windows 7 añade compatibilidad con TLSv1.1 y TLSv1.2 - IEInternals - Página principal - Blogs de MSDN" . Archivado del original el 26/12/2013.
  9. Fowler, Martin (11 de octubre de 2007). "¿Qué es la refactorización?" . Consultado el 22 de noviembre de 2007 .
  10. ^ Suryanarayana, Girish, Ganesh Samarthyam y Tushar Sharma. Refactorización para olores de diseño de software: gestión de la deuda técnica / Girish Suryanarayana, Ganesh Samarthyam, Tushar Sharma. 1ª edición. Waltham, Massachusetts; Morgan Kaufmann, 2015. Imprimir.
  11. ^ Tripatía, Priyadarshi; Naik, Kshirasagar (2014). Evolución y mantenimiento del software: el enfoque de un profesional . Hoboken, Nueva Jersey: Wiley. pag. 376.ISBN  978-0-470-60341-3.
  12. Lehman, MM; Belady, LA (1985), Evolución de programas: procesos de cambio de software , Academic Press, pp. 143–144 , ISBN  9780124424401
  13. ^ Jacobson, Ivar; Christerson, Magnus; Jonsson, Patrik; Övergaard, Gunnar (1992), Ingeniería de software orientada a objetos: un enfoque basado en casos de uso , ACM Press. Addison – Wesley, págs. 70-72 , ISBN  0-201-54435-0
  14. Hunt, Andrew; Thomas, David (1999), El programador pragmático , Addison Wesley, págs. 4–6 , ISBN  0-201-61622-X