Ingeniería de ida y vuelta - Round-trip engineering

La ingeniería de ida y vuelta ( RTE ) es una funcionalidad de las herramientas de desarrollo de software que sincroniza dos o más artefactos de software relacionados, como código fuente, modelos, archivos de configuración e incluso documentación. La necesidad de una ingeniería de ida y vuelta surge cuando la misma información está presente en varios artefactos y, por lo tanto, puede ocurrir una inconsistencia si no todos los artefactos se actualizan consistentemente para reflejar un cambio dado. Por ejemplo, se agregó o cambió alguna información en un solo artefacto y, como resultado, se perdió o fue inconsistente con los otros artefactos.

La ingeniería de ida y vuelta está estrechamente relacionada con las disciplinas tradicionales de la ingeniería de software : ingeniería avanzada (creación de software a partir de especificaciones), ingeniería inversa (creación de especificaciones a partir de software existente) y reingeniería (comprensión del software existente y su modificación). La ingeniería de ida y vuelta a menudo se define erróneamente como un simple apoyo a la ingeniería directa e inversa. De hecho, la característica clave de la ingeniería de ida y vuelta que lo distingue de la ingeniería directa e inversa es la capacidad de sincronizar existentes artefactos que se desarrollaron simultáneamente por incrementalmente actualizar cada artefacto para reflejar los cambios realizados en los otros artefactos. Además, la ingeniería directa puede verse como una instancia especial de RTE en la que solo está presente la especificación y la ingeniería inversa puede verse como una instancia especial de RTE en la que solo está presente el software. Muchas actividades de reingeniería también pueden entenderse como RTE cuando el software se actualiza para reflejar los cambios realizados en la especificación de ingeniería inversa previamente.

Otra característica de la ingeniería de ida y vuelta es la actualización automática de los artefactos en respuesta a las inconsistencias detectadas automáticamente . En ese sentido, es diferente de la ingeniería directa e inversa, que puede ser tanto manual (tradicionalmente) como automática (a través de la generación automática o el análisis de los artefactos). La actualización automática puede ser instantánea o bajo demanda . En RTE instantáneo, todos los artefactos relacionados se actualizan inmediatamente después de cada cambio realizado en uno de ellos. En el RTE bajo demanda, los autores de los artefactos pueden hacer evolucionar simultáneamente los artefactos (incluso en un entorno distribuido) y, en algún momento, optar por ejecutar coincidencias para identificar inconsistencias y optar por propagar algunas de ellas y reconciliar posibles conflictos.

La ingeniería de ida y vuelta respalda un proceso de desarrollo iterativo. Una vez que haya sincronizado su modelo con el código revisado, aún puede elegir la mejor forma de trabajar: realizar más modificaciones en el código o realizar cambios en su modelo. Puede sincronizar en cualquier dirección en cualquier momento y puede repetir el ciclo tantas veces como sea necesario.

Ejemplos de ingeniería de ida y vuelta

Quizás la forma más común de ingeniería de ida y vuelta es la sincronización entre los modelos UML ( Lenguaje de modelado unificado ) y el código fuente correspondiente. Muchas herramientas comerciales y prototipos de investigación admiten esta forma de RTE; un libro de 2007 enumera Rational Rose , Micro Focus Together , ESS-Model , BlueJ y Fujaba entre los que pueden, y se dice que Fujaba también es capaz de identificar patrones de diseño . Por lo general, los diagramas de clases UML son compatibles hasta cierto punto; sin embargo, ciertos conceptos de UML, como asociaciones y contención , no tienen representaciones sencillas en muchos lenguajes de programación, lo que limita la usabilidad del código creado y la precisión del análisis de código (por ejemplo, la contención es difícil de reconocer en el código). Un libro de 2005 sobre Visual Studio señala, por ejemplo, que un problema común en las herramientas RTE es que el modelo invertido no es el mismo que el original, a menos que las herramientas sean ayudadas por laboriosas anotaciones. Las partes de comportamiento de UML imponen aún más desafíos para RTE.

Una forma más manejable de ingeniería de ida y vuelta se implementa en el contexto de las interfaces de programación de aplicaciones (API) de marco , mediante el cual un modelo que describe el uso de una API de marco por parte de una aplicación se sincroniza con el código de esa aplicación. En esta configuración, la API prescribe todas las formas correctas en que se puede usar el marco en las aplicaciones, lo que permite una detección precisa y completa de los usos de la API en el código, así como la creación de código útil que implementa los usos correctos de la API. Dos implementaciones de RTE destacadas en esta categoría son los lenguajes de modelado específicos del marco y Spring Roo .

La ingeniería de ida y vuelta es fundamental para mantener la coherencia entre varios modelos y entre los modelos y el código en la arquitectura basada en modelos de Object Management Group (OMG) . OMG propuso el estándar QVT (consulta / vista / transformación) para manejar las transformaciones de modelo necesarias para MDA. Hasta la fecha, se han creado algunas implementaciones del estándar. (Necesidad de presentar experiencias prácticas con MDA en relación a RTE).

Ejemplos en ingeniería de software

La ingeniería de ida y vuelta basada en el lenguaje de modelado unificado (UML) necesita tres componentes básicos para el desarrollo de software:

  • Editor de código fuente;
  • Editor UML de Atributos y Métodos;
  • Visualización de estructura UML.

Un ejemplo de ingeniería básica de ida y vuelta al que se puede acceder como una herramienta de código abierto basada en la web es:

  • JavaScript Class Creator permite la ingeniería de ida y vuelta integrada para las clases de JavaScript. Los diagramas UML se generan con una biblioteca de diagramas JointJS. La edición del código fuente JavaScript se realiza con el editor ACE.

Referencias