Los sistemas de entendimiento de automático de programas pretenden extraer mecánicamente el
conocimiento implementado en las líneas de código en los sistemas desarrollados en un
dominio específico de problemas. Para ejecutar el proceso, tales ambientes requieren de una
base de conocimiento (específicamente librerías de planes de programación) con la cual
"mapear" el conocimiento oculto en el código fuente.
Esta estrategia si bien automatiza gran parte del proceso de entendimiento de programas,
implica la resolución de problemas muy complejos en la construcción del soporte automático
que realiza el proceso:
-
Es necesario montar bibliotecas de planes de programación para cada dominio de problemas
donde el sistema va a funcionar.
-
Es necesario construir muy complejos algoritimos de exploración de las bibliotecas que
"mapearán" el conocimiento en ellas condensado al código fuente. La eficacia y eficiencia
de estos algoritmos aplicados al código fuente del mundo real, son aspectos hasta ahora
bastante desconocidos.
En el contexto del Proyecto Neighbors estamos analizando una posible solución al primero de los
problemas referidos. En el presenten proyecto trataremos el segundo de ellos. Efectivamente,
los algoritmos de satisfacción de restricciones que son los que realizan el "mapping" entre las
librerías de planes y el código fuente, tienen al menos problemas de performance al intentar
detectar las instancias. Esto se debe a que múltiples instancias pueden ser detectadas para un
mismo índice. De acuerdo con pruebas experimentales realizadas por otros grupos de investigación
en el área, el análisis de restricciones para cada una de las instancias de índices conduciría
a los algoritmos de satisfacción de restricciones a serios problemas de performance cuando son
aplicados a sobre código legado. Para expresar el problema de un modo más pragmático los algoritmos
de exploración realizan una "búsqueda a ciegas", es decir, buscan cualquier plan en cualquier parte
del código.
Nuestra intención es estudiar mecanismos que les permitan a los algoritmos de satisfacción de
restricciones ejecutar una exploración inteligente seleccionando los sectores del código fuente
para buscar por planes de programación específicos. Para este intentaremos fragmentar el código
fuente en sectores. Más específicamente estamos interesados en recuperar una representación
arquitectural del sistema objeto de estudio. Un enfoque de esta naturaleza nos permitiría:
-
Dirigir la búsqueda de los planes de programación hacia sectores determinados del código
fuente.
-
Combinar en un mismo ambiente, el soporte automático que nos permita recuperar una representación
estructural y funcional del sistema.
Para capturar la estructura de un sistema pretendemos aplicar análisis de cluster y análisis de
conceptos. Con la adopción de estas técnicas pretendemos migrar gradualmente a enfoques de ingeniería
reversa basados en métodos formales.