Arquitectura de software dirigida por modelos ModelDriven Architecture

  • Slides: 49
Download presentation
Arquitectura de software dirigida por modelos (Model-Driven Architecture) Liliana Favre UNCPBA 2006

Arquitectura de software dirigida por modelos (Model-Driven Architecture) Liliana Favre UNCPBA 2006

Los ejemplos y gráficas son de : Tonella, P. Potrich, A. Reverse Engineering of

Los ejemplos y gráficas son de : Tonella, P. Potrich, A. Reverse Engineering of Object-Oriented Code, Springer, 2005

Ingeniería inversa (reverse engineering) Ingeniería inversa estática + Ingeniería inversa dinámica Análisis estático Describe

Ingeniería inversa (reverse engineering) Ingeniería inversa estática + Ingeniería inversa dinámica Análisis estático Describe la estructura del software a partir del código (texto) Análisis dinámico Describe el comportamiento en ejecución del software. Extraer información en código OO es difícil (o imposible? ) n Naturaleza dinámica de los lenguajes OO n Creación de objetos, garbage collector, dynamic binding, …

Ingeniería inversa estática OFG: representación básica para el análisis estático. Permite seguir el flujo

Ingeniería inversa estática OFG: representación básica para el análisis estático. Permite seguir el flujo de información de objetos desde su creación, a través de asignaciones a variables, su uso en invocaciones de métodos, almacenamiento en atributos de una clase, . . . El tipo de información que se propaga en el OFG depende del objetivo del análisis en el que se use. Un lenguaje abstracto n Un algoritmo de propagación de flujo que es genérico en el tipo de información procesada n

Ingeniería inversa estática Análisis estático sobre JAVA n Sensible al flujo de datos n

Ingeniería inversa estática Análisis estático sobre JAVA n Sensible al flujo de datos n Insensible al flujo de control n Representación por grafos de flujos de objetos basada en una versión abstracta, simplificada de JAVA que omite sentencias de control (condicionales, iteraciones, etc) n Evita conflictos de nombres (los identificadores son precedidos por un punto separados por la lista de packages, clases y métodos que los incluyen)

OFG Lenguaje abstracto

OFG Lenguaje abstracto

OFG Lenguaje abstracto

OFG Lenguaje abstracto

Ejemplo Lenguaje abstracto-Sentencias 60 -62 Library. borrow. Document. loan = new Loan(Library. borrow. Docunent.

Ejemplo Lenguaje abstracto-Sentencias 60 -62 Library. borrow. Document. loan = new Loan(Library. borrow. Docunent. user, Library. borrow. Document. doc); Library. borrow. Document. this. Library. add. Loan(library. borrow. Document. loan)

Ejemplo Lenguaje abstracto-Sentencias 42 Library. add. Loan. user=Loan. get. User. return 43 Library. add.

Ejemplo Lenguaje abstracto-Sentencias 42 Library. add. Loan. user=Loan. get. User. return 43 Library. add. Loan. doc = Loan. get. Document. return;

Generación del OFG = (N, E) N: conjunto de nodos E: conjunto de arcos

Generación del OFG = (N, E) N: conjunto de nodos E: conjunto de arcos Para cada variable local, atributo o parámetro formal, se agrega un nodo a OFG. Por ejemplo, el OFG de la clase Library de e. Lib contiene: n Un nodo asociado al atributo loan rotulado Library. loans n Dos rótulos asociados con los parámetros formales del método borrow. Document rotulados Library. borrow. Document. user Library. borrow. Document. doc n La variable local loan asociada con el nodo rotulado Library. borrow. Document. loan n El objeto current en Borrow. Document está asociado con un nodo rotulado Library. borrow. Document. this

Generación del OFG Los arcos se insertan de acuerdo a las siguientes reglas

Generación del OFG Los arcos se insertan de acuerdo a las siguientes reglas

Algoritmo Data-Flow forward

Algoritmo Data-Flow forward

Desde JAVA a diagramas de interacción

Desde JAVA a diagramas de interacción

Extracción de diagramas de interacción Se contemplan dos formas de diagramas de interacción: diagramas

Extracción de diagramas de interacción Se contemplan dos formas de diagramas de interacción: diagramas de colaboración y diagramas de secuencia. Un diagrama de secuencia muestra los objetos y actores que participan en una colaboración poniendo el énfasis en el ordenamiento en el tiempo de los mensajes. Un diagrama de colaboración pone el énfasis en la organización estructural de los objetos o roles que envían y reciben mensajes Los diagramas de interacción pueden obtenerse mediante un análisis estático que provee un superset conservativo de todas las posibles interacciones combinado con un análisis dinámico

Extracción de diagramas de interacción Se contemplan dos formas de diagramas de interacción: diagramas

Extracción de diagramas de interacción Se contemplan dos formas de diagramas de interacción: diagramas de colaboración y diagramas de secuencia. Un diagrama de secuencia muestra los objetos y actores que participan en una colaboración poniendo el énfasis en el ordenamiento en el tiempo de los mensajes. Un diagrama de colaboración pone el énfasis en la organización estructural de los objetos que envían y reciben mensajes Los diagramas de interacción pueden obtenerse mediante un análisis estático que provee un superset conservativo de todas las posibles interacciones combinado con un análisis dinámico

Extracción de diagramas de interacción La extracción de las interacciones entre objetos se realiza

Extracción de diagramas de interacción La extracción de las interacciones entre objetos se realiza en dos pasos: - Primero, se infieren desde el código los objetos creados en el programa y accedidos a través de variables. - Luego, cada invocación a un método se resuelve en términos de posibles objetos source y target involucrados en intercambios de mensajes.

Extracción de diagramas de interacción Especialización del data-flow para determinar el conjunto de objetos

Extracción de diagramas de interacción Especialización del data-flow para determinar el conjunto de objetos asignados en el programa Cada punto de asignación de objetos en el programa se asocia a un identificador ci, donde c es el nombre de la clase. La propagación de los identificadores en el OFG permite asociar a cada variable con el conjunto de objetos que puede referenciar.

Especialización de data-flow

Especialización de data-flow

Algoritmo para la resolución estática de una invocación a un método

Algoritmo para la resolución estática de una invocación a un método

Algoritmo para la resolución estática de una invocación a un método Si una cadena

Algoritmo para la resolución estática de una invocación a un método Si una cadena de accesos a atributos precede a la invocación a un método, como por ejemplo p. q. g(), el target se obtiene desde el último atributo involucrado out[B. q], donde B es la clase del atributo q, que se accede a través de p. n Si una invocación a otro método precede a otra, por ejemplo p. f(). g(), return puede ser usador para determinar los targets de la invocación out[B. f. return] n

Ejemplo OFG-Resolución de invocaciones

Ejemplo OFG-Resolución de invocaciones

Ejemplo El método add. Loan

Ejemplo El método add. Loan

Ejemplo OFG-Resolución de invocaciones Library 1

Ejemplo OFG-Resolución de invocaciones Library 1

Ejemplo OFG-Resolución de invocaciones

Ejemplo OFG-Resolución de invocaciones

Ejemplo El método add. Loan

Ejemplo El método add. Loan

Ejemplo Diagrama de secuencia

Ejemplo Diagrama de secuencia

Ejemplo Diagrama de colaboración

Ejemplo Diagrama de colaboración

Resolución de invocaciones para sistemas incompletos

Resolución de invocaciones para sistemas incompletos

Ejemplo-Resolución de invocaciones Diagrama de secuencia

Ejemplo-Resolución de invocaciones Diagrama de secuencia

Ejemplo-Resolución de invocaciones Diagrama de secuencia

Ejemplo-Resolución de invocaciones Diagrama de secuencia

Resolución de invocaciones para sistemas incompletos Supongamos que excluimos la clase Main. Cuando add.

Resolución de invocaciones para sistemas incompletos Supongamos que excluimos la clase Main. Cuando add. Loan de la clase Library es analizado, el objeto fuente de las 4 invocaciones en 42, 43, 45, 46 no es conocido. Para las 2 primeras llamadas es posible determinar el objeto target, Loan 1, el objeto asignado en la línea 60, sin embargo esto no es posible para las otras dos llamadas. Los conjuntos target para 45 y 46 son vacíos (ningún objeto de las clases User o Document). Se introduce Library*, como objeto genérico fuente de las 4

Resolución de invocaciones para sistemas incompletos

Resolución de invocaciones para sistemas incompletos

Extracción de diagramas de interacción- Filtrado Para grandes sistemas el algoritmo puede aplicarse filtrando

Extracción de diagramas de interacción- Filtrado Para grandes sistemas el algoritmo puede aplicarse filtrando información relevante de dos maneras: n Resolviendo sólo las llamadas distribuidas desde el método de interés n Incluyendo sólo las clases interesantes en un sistema incompleto.

Extracción de diagramas de interacción-Filtrado Las invocaciones en diagramas de colaboración puede ser numerada

Extracción de diagramas de interacción-Filtrado Las invocaciones en diagramas de colaboración puede ser numerada de acuerdo a la notación de Dewey. Esta numeración puede ser utilizada para inducir orden temporal en diagramas de secuencia. Numeracón de invocaciones

Extracción de diagramas de interacción

Extracción de diagramas de interacción

Extracción de diagramas de interacción

Extracción de diagramas de interacción

Análisis dinámico Herramientas específicas -Soluciones ad-hoc que incluyan: - Identificadores de objetos, que serán

Análisis dinámico Herramientas específicas -Soluciones ad-hoc que incluyan: - Identificadores de objetos, que serán calculados e incorporados a la traza de ejecución durante la ejecución de constructores - Ante una invocación a un método, agregar a la traza los identificadores del objeto actual y el target. Además incluir el nombre del método actual los objetos referenciados por el atributo - Generar marcas de tiempo cuando ocurren invocaciones.

Análisis diámico - - Un procesamiento de la traza de ejecución provee un diagrama

Análisis diámico - - Un procesamiento de la traza de ejecución provee un diagrama de interacción para cada test ejecutado. Cada vez que se detecta una invocación en la traza, se dibuja una llamada en el diagram de interacción entre los objetos identificados en la traza. El orden de los eventos se induce de las marcas de tiempo. Produce un conjunto de diagramas de interacción, uno para cada test. Depende de la calidad de los test

Extracción de diagramas de interacción- Análisis dinámico Un libro previamente prestado a un usuario

Extracción de diagramas de interacción- Análisis dinámico Un libro previamente prestado a un usuario normal de la biblioteca es devuelto y el préstamo cerrado.

Extracción de diagramas de interacción- Análisis dinámico Devolución de un libro disponible para préstamos

Extracción de diagramas de interacción- Análisis dinámico Devolución de un libro disponible para préstamos

Desde JAVA a diagramas de estado

Desde JAVA a diagramas de estado

Diagramas de estado Describe el comportamiento que muestra un objeto de una clase. Es

Diagramas de estado Describe el comportamiento que muestra un objeto de una clase. Es un autómata que consiste de estados, transiciones, eventos y actividades. La ingeniería reversa de diagramas de estado no puede ser totalmente automatizada. El primer paso para recuperar un diagrama de estado para una clase consiste en definir un dominio abstracto apropiado para sus atributos y ( posiblemente ) para las variables involucradas en las computaciones de atributos. Luego, la interpretación de los métodos de clase da las transiciones de estado a ser representadas en el diagrama de estados.

Diagramas de estado

Diagramas de estado

Ejemplo- Diagrama de estado. Clase Document

Ejemplo- Diagrama de estado. Clase Document

Ejemplo- Diagrama de estado. Clase Document

Ejemplo- Diagrama de estado. Clase Document

Ejemplo- Diagrama de estado. Clase User

Ejemplo- Diagrama de estado. Clase User

Ejemplo- Diagramas de estado proyectados para Library

Ejemplo- Diagramas de estado proyectados para Library

Ejemplo-Diagrama de estado combinado para Library

Ejemplo-Diagrama de estado combinado para Library

Otras propuestas Systa, Tarja. Static and Dynamic Reverse Engineering for Java Software Systems. Ph.

Otras propuestas Systa, Tarja. Static and Dynamic Reverse Engineering for Java Software Systems. Ph. D. University Tempere, Finland, 2000 Distingue ingeniería inversa estática y dinámica. La información estática consiste de artefactos y relaciones. La información dinámica contiene además de artefactos, información de trazas de eventos secuenciales, sobre concurrencia, administración de memoria, etc. La información estática se extrae del código y es vista en el entorno para ingeniería inversa RIGI. La información dinámica es generada ejecutando el software bajo un debugger y es vista como un diagrama de escenarios usando la herramienta SCED. Esta permite sintetizar diagramas de estado desde escenarios, pudiendo examinar el comportamiento de un objeto o método desconectado del resto del sistema.