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]
Técnicas
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]
- Lenguajes de programación para crear informes estáticos y filtrar resultados de diagnóstico
- Documentación continua en páginas HTML o Wikis
- Herramientas de análisis de firmas sinópticas, análisis estadístico y visualización de software
- Herramientas de ingeniería inversa
- Seguimiento a nivel de sistema operativo mediante truss o strace
- Motores de búsqueda y herramientas para buscar palabras clave en archivos fuente
- Exploración de archivos IDE
- Marcos de pruebas unitarias como JUnit y CppUnit
- Generación de documentación API utilizando herramientas como Javadoc y doxygen
- Depuradores
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]
En la cultura popular
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]
Véase también
- Recuperación de la arquitectura del software
- Refactorización de código
- Retrocomputación
- Fragilidad del software
- Podredumbre del software
- Entropía del software
- Abandonware
Referencias
- ^ ab Robles, Gregorio; Gonzalez-Barahona, Jesus M.; Herraiz, Israel (2005). "Un enfoque empírico a la arqueología del software" (PDF) . Actas de la Conferencia Internacional sobre Mantenimiento de Software .
- ^ Ambler, Scott W. "Agile Legacy System Analysis and Integration Modeling". agilemodeling.com . Consultado el 20 de agosto de 2010. Sin
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.
- ^ Moyer, Bryon (4 de marzo de 2009). "Arqueología del software: modernización de sistemas antiguos" (PDF) . Embedded Technology Journal .
- ^ Hopkins, Richard; Jenkins, Kevin (2008). "5. El mítico Metaman". Devorando al elefante de la TI: pasando del desarrollo de terrenos verdes al desarrollo de terrenos industriales abandonados . Addison-Wesley. pág. 93. ISBN 978-0-13-713012-2.
- ^ Spinellis, Diomidis ; Gousios, Georgios (2009). "2. Una historia de dos sistemas § Falta de cohesión". Arquitectura hermosa . O'Reilly. p. 29. ISBN 978-0-596-51798-4.
- ^ Una discusión temprana se encuentra en Grass, Judith E. (Winter 1992). "Arqueología del diseño orientado a objetos con CIA++" (PDF) . Computing Systems . 5 (1).
- ^ Por ejemplo, la "32ª Conferencia Internacional ACM/IEEE sobre Ingeniería de Software". Mayo de 2010..
- ^ abcd Hunt, Andy ; Thomas, Dave (marzo-abril de 2002). "Arqueología del software" (PDF) . IEEE Software . 19 (2): 20-22. doi :10.1109/52.991327.
- ^ Cunningham, Ward (2001). "Encuesta de firmas: un método para explorar código desconocido". Declaración de posición del taller, Arqueología del software: comprensión de los sistemas grandes, OOPSLA 2001 .
- ^ Cook, John D. (10 de noviembre de 2009). "Arqueología del software". The Endeavour .
- ^ de Souza, Cleidson; Froehlich, Jon; Dourish, Paul (2005). "Buscando la fuente: el código fuente del software como un artefacto social y técnico" (PDF) . Actas de la Conferencia Internacional ACM SIGGROUP de 2005 sobre apoyo al trabajo en grupo . págs. 197–206. doi :10.1145/1099203.1099239. ISBN . 1595932232.
- ^ ab Rozlog, Michael (28 de enero de 2008). "Arqueología del software: ¿Qué es y por qué debería interesarles a los desarrolladores de Java?". java.sys-con.com.
- ^ Sharwood, Simon (3 de noviembre de 2004). "En busca del código perdido". ZDNet .
- ^ Rees, Gareth (12 de junio de 2013). "Arqueología del software y deuda técnica".
Enlaces externos
- "Documentos de posición". Taller OOPSLA 2001 sobre arqueología del software: comprensión de los sistemas grandes . Archivado desde el original el 12 de junio de 2010.
- "Escritura de código, lectura de código y arqueología del software". Once More into the Code . Computerworld . 23 de septiembre de 2009. Archivado desde el original el 29 de enero de 2011.
- Rozlog, Michael (13 de marzo de 2008). "Cómo aplicar la arqueología del software a su proceso de desarrollo" (PDF) .
- "Podcast de OOPSLA 2008 con Grady Booch sobre arqueología del software y temas relacionados" (Podcast). 2008. Archivado desde el original el 26 de septiembre de 2011.