Título: “Herramienta 
visual de diseño y codificación de metaprogramas EFL”
Breve Descripción
Muchos autores consideran que el desarrollo de familias de productos, frente a la construcción individual de productos aislados, es un paso decisivo hacia la reutilización sistemática de software y la obtención de economía de alcance. En el Departamento de Ingeniería de Software y Sistemas Informáticos existe un grupo de investigación que se adscribe a esta corriente y propone un nuevo proceso de desarrollo de familias de productos, denominado EDD (Exemplar Driven Development), que aprovecha la similitud entre los productos de una familia para construirlos por analogía.
La primera actividad de EDD 
es la realización de un producto concreto de una familia. A continuación, se 
busca cómo flexibilizar este ejemplar para que satisfaga los requisitos del 
resto de los productos. Es decir, se trata de definir formalmente una relación 
de analogía que permita derivar del ejemplar los demás productos de forma 
automática. Por último, se obtienen los productos de la familia parametrizando 
la flexibilización del ejemplar. 
Entre las aportaciones de 
EDD, cabe destacar:
-      
Abordar el 
desarrollo y el mantenimiento de una familia de productos mediante una 
estrategia sistemática e iterativa. Lo primero que se construye es un ejemplar 
que satisface los requisitos fijos de la familia. Después, se incorporan 
progresivamente capas de flexibilización que implementan los requisitos 
variables.
-      
Los requisitos 
fijos de una familia de productos suelen ser más estables que los requisitos 
variables. EDD separa la implementación de los requisitos fijos (el ejemplar) de 
la implementación de los requisitos variables (los módulos que flexibilizan el 
ejemplar).
-      
La decisión de 
elaborar una familia a menudo se toma al detectar trabajo repetitivo en el 
desarrollo aislado de varios productos de un dominio o al identificar 
oportunidades de negocio en la ampliación de las prestaciones de un producto de 
éxito. EDD reconoce esta situación y trata de 
aprovecharla mediante la reutilización íntegra de un ejemplar.
Actualmente, se han evaluado distintas maneras de flexibilizar un ejemplar 
aplicando las técnicas más comunes de generalización de código (herencia, 
genericidad, plantillas de código…). Lamentablemente, se ha comprobado que estas 
técnicas padecen limitaciones que impiden flexibilizaciones satisfactorias (que 
sean modulares, no invasivas, aplicables a cualquier producto software…). Para 
superar estas limitaciones, se ha propuesto el nuevo lenguaje EFL (Exemplar 
Flexibilization Language), que, de momento, está implementado como una 
librería del lenguaje orientado a objetos Ruby.
Con el fin de ilustrar la potencia y versatilidad de EDD y EFL, se han 
desarrollado diversos ejemplos de desarrollo de programas escritos en Java y 
C++; de procedimientos almacenados escritos en TRANSACT SQL; de juegos de prueba 
escritos en Java y Modula-2; y de documentación escrita en HTML y Javadoc. 
Para facilitar el desarrollo de los metaprogramas EFL, sería deseable contar 
con una herramienta de diseño y codificación visual.
Objetivos
El fin de este proyecto fin de carrera es 1) proponer una notación gráfica de diseño de metaprogramas EFL y 2) desarrollar una herramienta visual que soporte la notación propuesta y facilite la codificación de los metaprogramas.
Método de 
desarrollo, fases de trabajo y fechas de realización
El desarrollo del proyecto fin de carrera durará un año y comprenderá las siguientes actividades:
Medios a utilizar y 
breve justificación de la pertinencia de los mismos
Aprovechando que el Departamento de Ingeniería de Software y Sistemas Informáticos dispone de una licencia MSDN Academic Alliance, el proyecto se construirá con la herramienta Microsoft DSL Tools, que soporta el desarrollo rápido de lenguajes gráficos.
Información 
adicional
En http://www.issi.uned.es/miembros/pagpersonales/ruben_heradio/rheradio.html
puede encontrarse:
- Un video introductorio sobre la metodología EDD y el lenguaje EFL.
- La tesis “Metodología de desarrollo de software basada en el paradigma generativo. Realización mediante la transformación de ejemplares”, donde se documenta EDD y EFL.
- La implementación de EFL y diversos ejemplos de aplicación.