La transformaci'on emparejada de software [#!RLammel04!#] consiste en
la modificaci'on de m'ultiples artefactos de software de modo que permanezcan consistentes entre
ellos. La transformaci'on bidireccional es un caso particular de transformaci'on emparejada de
software, destinado a definir transformaciones coherentes de reconciliaci'on entre dos artefactos de software
destinadas a restablecer, en cualquier momento, la consistencia entre ellos [#!HP08!#].
Las transformaciones bidireccionales se aplican en 'areas diversas: Desarrollo de software dirigido por el modelo
[#!PStevens07!#,#!HHIKMN10!#], editores de estructuras, bases de datos relacionales, transformaci'on de datos [#!Ol08!#], etc.
Las formas en que las transformaciones bidireccionales funcionan en cada 'area var'ian, pero en general,
hay coincidencia en que una transformaci'on bidireccional entre dos fuentes de informaci'on y
, est'a
compuesta por dos transformaciones unidireccionales, una desde
hacia
y otra desde
hacia
.
Cuando el flujo de datos desde
hacia
, prevalece sobre el flujo de datos desde
hacia
, se
dice que
es la entrada o fuente, en tanto
la salida o destino. Por lo tanto, la transformaci'on
de
hacia
se denomina forward transformation, mientras que la de
hacia
backward transformation [#!bxReport!#].
Una forma poco eficiente de dise nar transformaciones bidireccionales, es construir transformaciones
separadas, cada una operando en sentidos opuestos, desde un modelo a otro. Obtenidas las
mismas, luego es necesarios probar que son consistentes. La dificultad detr'as de este enfoque,
es que una modificaci'on en una transformaci'on obliga a redefinir la otra y nuevamente probar
que contin'uan siendo consistentes.
Una estrategia m'as efectiva, es dise nar un lenguaje dotado con la sem'antica necesaria para
que una expresi'on que defina una transformaci'on de un modelo a otro, lo haga al mismo tiempo
en el sentido contrario. Este enfoque ya ha sido aplicado en varios dominios [#!PStevens07!#],
y la ventaja de disponer del mismo, es que la compatibilidad de las transformaciones est'a
garantizada por construcci'on (correcto por construcci'on).
El est'ardard QVT de OMG permite definir lenguajes en los cuales tales transformaciones pueden
ser escritas.
Espec'ificamente, en [#!HHKN09!#] se establece una distinci'on en cuanto a los tipos de lenguajes
para realizar transformaciones de modelos bidireccionales. Estos pueden estar basados en reglas
(relacional), o bien, ser un lenguaje funcional como UnQL. La ventaja de aplicar un lenguaje
funcional se debe a que la sem'antica bidireccional puede suministrarse de un modo compacto y formal.
Sin embargo, [#!HP08!#] indica que a'un no es claro c'omo el mecanismo funcional del n'ucleo
de 2lt puede ser mejorado mediante el c'alculo relacional. En la misma direcci'on, [#!HHKN09!#]
plantea que es necesario indagar m'as sobre la relaci'on entre el enfoque funcional adoptado por
UnQL con el enfoque basado en reglas con el fin de desarrollar un ambiente m'as poderoso para la
transformaci'on bidireccional de modelos.
De acuerdo con lo anterior, resulta evidente que hay aspectos de la sem'antica
de los lenguajes para modelar transformaciones bidireccionales, que son mejor resueltos desde un
enfoque funcional y otros desde un enfoque relacional.
La bibliograf'ia existente no muestra una postura definitiva sobre cuales son tales aspectos,
por lo que la tem'atica permanece a'un abierta.