El proyecto que aquí se presenta, es una continuación y profundización de otros realizados con anterioridad
sobre análisis de dominio e ingeniería reversa.
Específicamente el área que ahora nos ocupa, juega un rol clave en actividades de mantenimiento y
migración (recuperación de objetos), reuso, etc. Básicamente, el estado del arte indica que es mayor
el nivel de automatización incorporado a los procesos de entendimiento de código. Nuestro objetivo
también está orientado en la misma dirección.
Escencialmente, nuestro propósito básico consiste en capturar el conocimiento sobre el dominio de problemas,
implementado en el código fuente, e integrar dicho conocimiento en modelos de dominio.
Para cumplir parte de este objetivo, pretendemos diseñar y desarrollar nuevas técnicas, representaciones
abstractas del código, herramientas, etc.; que soporten procesos de entendimientos de programas.
El conocimiento adquirido por estos medios, puede consistir en diseños o especificaciones, por lo que también
es nuestro interés el análisis de los soportes lógicos que condensan tal conocimiento en estructuras
altamente complejas como los modelos de dominio ya mencionados.
Más precisamente, por cuanto se trata del tópico central de un sub-proyecto del actual, pretendemos
destacar nuestro interés en el slicing de programas. Además de la utilidad que queremos dar a los
slices y que describimos más adelante, nos interesa determinar y profundizar el estudio de otras
aplicaciones de los slices entre las que destacamos:
- Detección de planes entrelazados
- Recuperación de objetos
- Métricas de programas basadas en slicing
- Análisis de programas
- Validación de programas
- Especialización de programas
- Tunning de compiladores
- Paralelización de programas
- Diferenciación e integración de programas
- Optimización de compiladores
- Debugging de programas
- Testing de programas
Una estrategia para el entendimiento automático de programas, consiste en la
detección de instancias de planes almacenados en la forma de bibliotecas
jerárquicas. Los planes de programas son representaciones abstractas de las
estructuras de diseño que los programadores recursivamente aplican cuando el
problema en mano posee características similares a otros resueltos previamente.
Complejos mecanismos de búsqueda exploran el código fuente en búsqueda de los
patrones base para el diseño de los planes de programas.
Actualmente el análisis de código fuente orientado a la construcción de
bibliotecas de planes de programas, se realiza manualmente. Nuestra intención
es mecanizar y sistematizar este proceso. Por otro lado, alrededor de los datos
se construyen las estructuras sintácticas necesarias para su manipulación.
Si recuperamos un slice sobre un ítem o ítems de datos, también recuperamos
aquellas estructuras. Si ahora comparamos los componentes generados, esperamos
encontrar patrones repetitivos de diseños aplicados sobre los datos especificados,
con lo cual lograríamos que la atención del profesional encargado del análisis
del código, se dirija hacia los sectores indicados por los slices.
De ser verificada esta hipótesis, no sería la solución definitiva al problema
pero significaría un aporte clave al estado actual del arte.