La arqueología del software o arqueología del código fuente es el estudio de implementaciones de software heredado mal documentadas o no documentadas , como parte del mantenimiento del software . [1] [2] La arqueología del software, llamada así por analogía con la arqueología , [3] incluye la ingeniería inversa de módulos de software y la aplicación de una variedad de herramientas y procesos para extraer y comprender la estructura del programa y recuperar información de diseño. [1] [4] La arqueología del software puede revelar procesos de equipo disfuncionales que han producido módulos de software mal diseñados o incluso sin usar, y en algunos casos se puede encontrar código deliberadamente ofuscador . [5] El término ha estado en uso durante décadas. [6]
La arqueología del software ha seguido siendo un tema de discusión en conferencias de ingeniería de software más recientes. [7]
Un taller sobre arqueología de software en la conferencia OOPSLA (Programación orientada a objetos, sistemas, lenguajes y aplicaciones) de 2001 identificó las siguientes técnicas de arqueología de software, algunas de las cuales son específicas de la programación orientada a objetos : [8]
En términos más generales, Andy Hunt y Dave Thomas destacan la importancia del control de versiones , la gestión de dependencias , las herramientas de indexación de texto como GLIMPSE y SWISH-E y "[dibujar] un mapa a medida que comienzas a explorar". [8]
Al igual que la verdadera arqueología, la arqueología del software implica un trabajo de investigación para comprender los procesos de pensamiento de los predecesores. [8] En el taller OOPSLA, Ward Cunningham sugirió una técnica de análisis de firma sinóptica que daba una "sensación" general de un programa al mostrar solo la puntuación, como punto y coma y llaves . [9] En la misma línea, Cunningham ha sugerido ver los programas en una fuente de 2 puntos para comprender la estructura general. [10] Otra técnica identificada en el taller fue el uso de herramientas de programación orientada a aspectos como AspectJ para introducir sistemáticamente código de seguimiento sin editar directamente el programa heredado. [8]
Las técnicas de análisis temporal y de redes pueden revelar los patrones de actividad colaborativa de los desarrolladores de software heredado, lo que a su vez puede arrojar luz sobre las fortalezas y debilidades de los artefactos de software producidos. [11]
Michael Rozlog, de Embarcadero Technologies, ha descrito la arqueología de software como un proceso de seis pasos que permite a los programadores responder a preguntas como "¿Qué acabo de heredar?" y "¿Dónde están las secciones del código que dan miedo?" [12]. Estos pasos, similares a los identificados en el taller OOPSLA, incluyen el uso de la visualización para obtener una representación visual del diseño del programa, el uso de métricas de software para buscar violaciones de diseño y estilo, el uso de pruebas unitarias y creación de perfiles para buscar errores y cuellos de botella en el rendimiento, y el ensamblaje de la información de diseño recuperada por el proceso. [12] La arqueología de software también puede ser un servicio proporcionado a los programadores por consultores externos. [13]
La profesión de " programador-arqueólogo " ocupa un lugar destacado en la novela de ciencia ficción de Vernor Vinge de 1999 , A Deepness in the Sky . [14]
una documentación precisa o acceso a personas con conocimientos, su último recurso puede ser analizar el código fuente del sistema heredado... Este esfuerzo se conoce a menudo como arqueología del software.