Monday, November 30, 2020

Arqueología de Software - Parte 1

El mantenimiento de software y sus desafíos

En el poco tiempo que vengo trabajando en la industria del software, he pasado más tiempo en la extensión y mantenimiento de sistemas existentes (Brownfield Projects) que construyendo sistemas nuevos (Greenfield Projects). Consultando con varios colegas descubro que enfrentan una situación similar. Quizás, este fenómeno podría explicarse con lo que se afirma en el libro Software Architecture in Practice:

La comunidad de desarrollo de software se está enfrentando al hecho de que aproximadamente el 80 por ciento del costo total de un sistema de software típico ocurre después del despliegue inicial. Un corolario de esta estadística es que la mayoría de los sistemas en los que trabaja la gente está en esta fase. Muchos programadores y diseñadores de software nunca llegan a trabajar en nuevos desarrollos; funcionan bajo las restricciones de la arquitectura existente y el cuerpo de código existente.

En base a lo anterior, parece que estamos casi condenados a mantener sistemas existentes. Un escenario común que debemos enfrentar los developers es cuando nos asignan un proyecto para mantener un sistema del que no sabemos nada y con características como:

  1. De miles de líneas de código
  2. Sin documentación de diseño (u obsoleta)
  3. Los creadores (diseñadores/desarrolladores) ya no están presentes

Sin duda, encarar un escenario como este representa un desafío de investigación inicial para entender el sistema. Y es aquí donde viene al rescate la Arqueología de Software. Una disciplina que propone un proceso para recuperar los detalles esenciales para razonar, arreglar y adaptar el sistema existente. Ya que hablamos de arqueología de software ¿que relación tiene esta con la ciencia arqueológica tradicional?

Relación con la arqueología tradicional

Para entender la relación entre la arqueología de software y la ciencia arqueológica tradicional tenemos que entender la definición de esta última:

La arqueología es el estudio de las sociedades humanas del pasado a partir de la recuperación y análisis de sus restos materiales (artefactos útiles y basura) con el objetivo de conocer cómo vivían.

Fuente: Arqueólogos - el lenguaje de los siglos

Según la definición anterior, se desprende que un arqueólogo es netamente un investigador, por tanto, cumple las etapas de un proceso de investigación, buscando información para generar nuevo conocimiento. Es por esto que la ciencia arqueológica tradicional nos ofrece una buena analogía para describir las actividades que un developer realiza cuando investiga el software que desarrollaron otras personas.


Arqueología de software como proceso de investigación de sistemas pobremente documentados

El mantenimiento de software implica actividades orientadas a la modificación o cambio del mismo. El cambio tiene como característica fundamental el hecho de que primero se necesita una comprensión del objeto que se ha de cambiar, para poder hacer efectiva la modificación. Por esto, adoptar la arqueología de software como práctica para encarar el mantenimiento de sistemas que carecen de documentación puede orientarnos en la comprensión de su estructura y comportamiento. 


¿Y cómo se logra esta comprensión a través de la arqueología de software? La idea es seguir un proceso en el cual se analizan diferentes artefactos de software (código fuente, bases de datos, interfaces de usuario, etc.) a través de técnicas y herramientas de ingeniería inversa para obtener modelos que nos permitan entender la estructura y comportamiento de un sistema, así como también los procesos de negocio a los cuales da soporte dentro de la organización.


Con todo este contexto ya podemos explorar las fases, técnicas y herramientas de la arqueología de software, lo cual veremos en un siguiente artículo.

Webgrafía

Bibliografía

  • Working with Legacy Systems. A Practical Guide to the Systems we Inherit and Maintain - Robert Annett.
  • Hunt, A., & Thomas, D. (2002). Software archaeology. IEEE Software, 19(2), 20-22.


 ¡Gracias por llegar hasta aquí! 


No comments:

Post a Comment

Cuando el código funciona, pero no tiene tests: ¿y ahora qué?

Seguramente te ha pasado alguna vez. Te dan acceso al repositorio de un nuevo proyecto. Lo abres con curiosidad, esperas encontrar una estru...