Arquitectura de software dirigida por modelos



Descargar 15,54 Kb.
Fecha de conversión06.01.2017
Tamaño15,54 Kb.

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
  • 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 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?)
  • Naturaleza dinámica de los lenguajes OO

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
  • Un algoritmo de propagación de flujo que es genérico en el tipo de
  • información procesada

Ingeniería inversa estática

  • Análisis estático sobre JAVA
  • Sensible al flujo de datos
  • Insensible al flujo de control
  • 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)
  • 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

Ejemplo Lenguaje abstracto-Sentencias

  • 60-62
  • Library.borrowDocument.loan =
  • new Loan(Library.borrowDocunent.user,
  • Library.borrowDocument.doc);
  • Library.borrowDocument.this. Library.
  • addLoan(library.borrowDocument.loan)

Ejemplo Lenguaje abstracto-Sentencias

  • 42
  • Library.addLoan.user=Loan.getUser.return
  • 43
  • Library.addLoan.doc = Loan.getDocument.return;

Generación del OFG

  • 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 eLib contiene:
  • Un nodo asociado al atributo loan rotulado Library.loans
  • Dos rótulos asociados con los parámetros formales del método borrowDocument rotulados
    • Library.borrowDocument.user
    • Library.borrowDocument.doc
  • La variable local loan asociada con el nodo rotulado
  • Library.borrowDocument.loan
  • El objeto current en BorrowDocument está asociado con un nodo rotulado
  • Library.borrowDocument.this

Generación del OFG

  • Los arcos se insertan de acuerdo a las siguientes reglas

Algoritmo Data-Flow forward

  • Desde JAVA a diagramas de interacción

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
  • que provee una traza del comportamiento del programa
  • durante una específica ejecución.

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
  • que provee una traza del comportamiento del programa
  • durante una específica ejecución.

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 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

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 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.
  • 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]

Ejemplo OFG-Resolución de invocaciones

Ejemplo El método addLoan

Ejemplo OFG-Resolución de invocaciones

  • Library1

Ejemplo OFG-Resolución de invocaciones

Ejemplo El método addLoan

Ejemplo Diagrama de secuencia

Ejemplo Diagrama de colaboración

Resolución de invocaciones para sistemas incompletos

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
  • addLoan 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, Loan1, 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
  • invocaciones. User* y Document* se introducen para las
  • invocaciones en 45 y 46.

Resolución de invocaciones para sistemas incompletos

Extracción de diagramas de interacción- Filtrado

  • Para grandes sistemas el algoritmo puede aplicarse
  • filtrando información relevante de dos maneras:
  • Resolviendo sólo las llamadas distribuidas desde el método de interés
  • 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
  • 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

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 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 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
  • Desde JAVA a diagramas de estado

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 estado a ser representadas en el diagrama de estados.

Diagramas de estado

Ejemplo- Diagrama de estado. Clase Document

Ejemplo- Diagrama de estado. Clase Document

Ejemplo- Diagrama de estado. Clase User

Ejemplo- Diagramas de estado proyectados para Library

Ejemplo-Diagrama de estado combinado para Library

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.


La base de datos está protegida por derechos de autor ©absta.info 2016
enviar mensaje

    Página principal