Вы находитесь на странице: 1из 107

Arquitectura de software dirigida por modelos

(Model-Driven Architecture)
Liliana Favre UNCPBA 2006

Tcnicas de reingeniera y MDA

Bibliografa
Las grficas fueron extradas de 1. Demeyer, S.; Ducasse, S.; Nierstrasz, O. Object-Oriented Reengineering Patterns, Morgan-Kaufmann Publishers, 2002 2. Systa, Tarja. Static and Dynamic Reverse Engineering for Java Software Systems. Ph. D. University Tempere, Finland, 2000 3. Tonella, P. Potrich, A. Reverse Engineering of Object-Oriented Code, Springer, 2005

Ingeniera directa, inversa y reingeniea

Ingeniera directa, inversa y reingeniera


Ingeniera directa Es el proceso que transforma diseos en un alto nivel de abstraccin a la implementacin de un sistema. Ingeniera inversa Es el proceso que analiza un sistema para identificar sus componentes y sus interrelaciones y crea representaciones del sistema en otra forma o en un mayor nivel de abstraccin. Reingeniera Es el proceso que transforma una representacin de bajo nivel en otra, mientras reconstituye artefactos de mayor nivel de abstraccin a lo largo del proceso. Es decir, transforma implementaciones concretas en otras concretas transformando al sistema en todos sus niveles.

Otras definiciones relacionadas a reingeniea


Reestructuracin
Es el proceso de transformar una representacin en otra en el mismo nivel de abstraccin, preservando el comportamiento externo del sistema.

Refactoring
Es el proceso de reestructuracin en un contexto orientado a objetos

Mantenimiento
El proceso de modificacin de un producto de software para corregir fallas, mejorar la performance o adaptarlo a un cambio de entorno.

Otras definiciones relacionadas a reingeniera


Evolucin de software
La evolucin de software se caracteriza por la existencia de un cdigo del sistema y la actividad tpica es la implementacin de un cambio que puede ser requerido para: corregir el software ( mantenimiento correctivo) agregar funcionalidad ( mantenimiento perfectivo) adaptarlo a un cambio de ambiente ( mantenimiento adaptativo) reestructurarlo para facilitar su futuro mantenimiento ( mantenimento preventivo) Durante la evolucin, la descripcin ms precisa y confiable del software es su cdigo.

Ingeniera inversa

Ingeniera inversa (reverse engineering)


Las tcnicas de ingeniera inversa permiten analizar y representar software en una forma abstracta a fin de facilitar mantenimiento, reingeniera, reusabilidad y documentacin. Proveen una manera de extraer vistas de alto nivel desde el cdigo sistema, que resumen aspectos relevantes de la computacin ejecutada por las sentencias del programa.

Chikofsky y Cross(*) definen a la ingeniera inversa como el proceso de analizar un sistema target con dos objetivos: Identificar los componentes del sistema y sus interrelaciones Crear representaciones del sistema en otra forma o en un mayor nivel de abstraccin * Reverse Engineering and design Recovery: A taxonomy. IEEE Software, January 1990

Ingeniera inversa (reverse engineering)


Ingeniera inversa esttica + Ingeniera inversa dinmica Anlisis esttico
Describe la estructura del software a partir del cdigo (texto)

Anlisis dinmico
Describe el comportamiento en ejecucin del software. Extraer informacin en cdigo OO es difcil (o imposible?) Naturaleza dinmica de los lenguajes OO Creacin de objetos, garbage collector, dynamic binding,

Ingeniera inversa
Inconvenientes La nica fuente confiable es el cdigo que est poco (o nada) documentado y se ha perdido contacto con los diseadores y/o programadores. Las herramientas CASE proveen buen soporte para anlisis esttico pero limitado para anlisis dinmico.

Ingeniera inversa de programas OO

Ingeniera inversa de cdigo OO Inconvenientes


Por ejemplo, las construcciones
UML

JAVA no se alinean con UML:

Generalizacin/ especializacin Agregacin/composicin Asociaciones Cuerpo de los mtodos

JAVA

Propuesta de :
Tonella, P. Potrich, A. Reverse Engineering of Object-Oriented Code. Springer, 2005 Describe ingeniera inversa de diagramas UML de clases, objetos, interaccin, estados y paquetes. Propone especializaciones de algoritmos de data-flow basados en una estructura llamada OFG (Object Flow Graph).

Arquitectura general de una herramienta de ingeniera inversa

Ejemplo de modelo del lenguaje para JAVA simplificado

Ingeniera inversa esttica


OFG: representacin bsica para el anlisis esttico. Permite seguir el flujo de informacin de objetos desde su creacin, a travs de asignaciones a variables, su uso en invocaciones de mtodos, almacenamiento en atributos de una clase,... El tipo de informacin que se propaga en el OFG depende del objetivo del anlisis en el que se use.

Un lenguaje abstracto Un algoritmo de propagacin de flujo que es genrico en el tipo de informacin procesada

Ingeniera inversa esttica


Anlisis esttico sobre JAVA Sensible al flujo de datos Insensible al flujo de control Representacin por grafos de flujos de objetos basada en una versin 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 mtodos que los incluyen)

Ingeniera inversa esttica


Porqu el anlisis es sensible al flujo de datos/ insensible al flujo de control? Complejidad computacional Naturaleza de LOO Puede automatizarse

OFG Lenguaje abstracto

OFG Lenguaje abstracto

OFG Lenguaje abstracto

return y this

Ejemplo eLib- Diagrama de clases

Ejemplo Lenguaje abstracto-Declaraciones


Library.Library()
Declaracin de constructor implcito

Library.loans
Declaracin de atributo loans

Ejemplo Lenguaje abstracto-Declaraciones

Library.borrowDocument(Library.borrowDocument.user, Library.borrowDocument.doc) Declaracin de mtodo

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;

Generacin del OFG


OFG = (N, E) N: conjunto de nodos E: conjunto de arcos Para cada variable local, atributo o parmetro 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 rtulos asociados con los parmetros formales del mtodo 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

Generacin del OFG


Los arcos se insertan de acuerdo a las siguientes reglas

Generacin del OFG

Library.borrowDocument.loan = new Loan(Library.borrowDocument.user, Library.borrowDocument.doc) Library.borrowDocument.this.Library.addLoan (Library.borrowDocument.loan)

genera los siguientes arcos:

Generacin del OFG


x = y {(y,x) E}

genera los siguientes arcos

Generacin del OFG Containers


Si una funcin de librera introduce un flujo de dato de una variable x a otra y, debera incluirse el arco (x,y) Clases que implementan la interfaz Collection (vector, linkedList, HashSet, TreeSet,..) Clases que interpretan la interfaz Map (Hashtable, HashMap, TreeMap,) Los dos casos bsicos (1) c.insert(x) (x,c) E (2) x = c.extract() (c,x) E Los mismos arcos son los que seran introducidos en el OFG en presencia de las siguientes asignaciones (1) c = x (2) x = c

Generacin del OFG Containers

Library.loans = Library.addLoan.loan

Generacin del OFG Containers

Library.printAllLoans.i = Library.loans - el flujo desde el container(loans) al iterador i Libray.printAllLoans.loan =Library.printAllLoans.i; - El acceso al objeto contenido ( invocacin de next) y la asignacin a la variable local loan

Generacin del OFG Containers

Generacin del OFG Containers

- Un objeto user es insertado en el container users

Library.users = Library.addUser.user

- Un objeto user es extrado del container users Library.getUser.return = Library.users

Algoritmo Data-Flow forward

Algoritmo Data-Flow forward


La solucin provista por el algoritmo es conservativa(segura), ningn flujo de datos que no est contemplado ocurre. Sin embargo, es imposible decidir estticamente si un camino es factible o no. Anlisis insensible a objetos

OFG para anlisis sensible a objetos


En un anlisis sensible a objetos los atributos de clase no estticos y los mtodos(incluyendo sus parmetros y variables locales) se replican para cada objeto identificado estticamente. Para cada punto de asignacin, se crea un identificador de objeto y todos los atributos y mtodos en la clase son replicados. Construccin es ms complicada ( se analizar ms adelante)

OFG Sensible a objetos

Asumiendo que dos objetos son creados Loan1 y Loan2

OFG Sensible a objetos


Parte de cdigo dentro del mtodo main de la clase Main

5 objetos son asignados en el fragmento de cdigo: User1, Document1, Loan1, Document2, Loan2

OFG Data-flow

Insensible a objetos

OFG Data-Flow

Sensible a objetos

OFG Data-Flow

OFG Data-Flow

OFG Data-Flow

OFG Data-Flow

OFG Data-Flow

OFG Data-Flow

Desde JAVA a diagramas de clases

Desde JAVA a diagramas de clase


Los diagramas de clase resumen importantes decisiones de diseo sobre la organizacin del sistema. Elementos de un diagrama de clases Clases

Interfaz, clases abstractas, clases parametrizadas

Relaciones de dependencia, generalizacin y asociacin Especificaciones OCL

Desde JAVA a diagramas de clase


Algoritmo basado en el anlisis sintctico del cdigo Inconvenientes a) Las relaciones entre clases llevan informacin semntica que no puede ser inferida del anlisis del cdigo. b) Los tipos declarados son una aproximacin de las clases instanciadas en el programa debido a la presencia de relaciones de herencia y al uso de interfaces.

Algoritmo basado en OFG para resolver a) y b)

Extraccin de clases
La informacin mostrada en una clase (atributos, mtodos, el tipo de los atributos, los parmetros de los mtodos, su visibilidad y alcance) puede extraerse analizando la sintaxis.

Ejemplo Extraccin de clases

Ejemplo Extraccin de clases

Ejemplo Extraccin de clases

Ejemplo Extraccin de clases

Extraccin de relaciones

Ejemplo Extraccin de dependencias

Dependencia entre Library y User

Ejemplo Extraccin de dependencias

Dependencia entre Library y Document

Ejemplo Extraccin de asociaciones

Loan est asociada a User y Document

Tipos actual vs. declarados


Los tipos declarados de atributos, variables locales y parmetros de los mtodos son usados para determinar la clase target de asociaciones y dependencias. Es bastante comn que el tipo declarado sea la raz de una jerarqua de herencia o que sea una interfaz. Ejemplo

InternalUser es una subclase de User. Book, Journal, TechnicalReport son subclases de Document Si la aplicacin usa slo una parte del subrbol de herencia, el target de la asociacin o dependencia puede ser incorrecto. Por ejemplo en una instancia especfica una asociacin debera conectar Loan y Book en vez de Document.

Tipos actuales vs. declarados


Ejemplo Una aplicacin puede contener una clase BinaryTreeNode con un atributo obj que almacena informacin asociada con cada nodo del rbol y su tipo declarado Comparable, la interfaz implementada para objetos que pueden ordenarse totalmente por el mtodo compareTO. Esto generara la asociacin entre BinaryTreeNode a Comparable. Si la aplicacin define a una clase Student que implementa a Comparable, el mtodo propuesto no recupera la asociacin entre BinaryTreeNode y Student El mtodo propuesto no detecta que los tipos declarados pueden ser una superclase del tipo del objeto actual o una interfaz implementada para el objeto actual.

Data-Flow

Especializacin para determinar el tipo de objetos actuales

Ejemplo rbol binario de bsqueda

Ejemplo rbol binario de bsqueda

Ejemplo-rbol binario de bsqueda Sintaxis abstracta

Ejemplo-rbol binario de bsqueda OFG

Ejemplo-rbol binario de bsqueda OFG

Es detectada una asociacin entre BinaryTreeNode y Student

Containers
Clases que implementan estructuras de datos (Listas, rboles grafos, vectores, ) Los containers dbilmente tipados coleccionan objetos cuyos tipos no son declarados, por ejemplo, Containers en versiones de JAVA que no soportan genericidad. Esto dificulta la ingeniera inversa dado que la informacin acerca de las clases de los objetos contenidos no se encuentra disponible en el cdigo.

Containers

Map y Collection son interfaces. Las clases que las implementan son HashMap y LinkedList, dos containers dbilmente tipados, que son clases de biblioteca y no sern explicitadas

Ejemplo

Data-Flow forward para Containers

Data-Flow backward para Containers

Ejemplo Containers

Ejemplo Containers

Ejemplo Containers- Sintaxis abstracta

Ejemplo Containers- Sintaxis abstracta

Ejemplo Containers- Sintaxis abstracta

Ejemplo Containers- OFG

Desde JAVA a diagrama de objetos

Ingeniera inversa de diagramas de objetos


El diagrama de objetos muestra una instantnea de un conjunto de objetos y sus relaciones. Los elementos en este diagrama (objetos y relaciones) son instancias de los elementos (clases y asociaciones) en el diagrama de clases. El diagrama de objetos muestra explcitamente cmo diferentes instancias pueden desempear diferentes roles y estar involucradas en diferentes relaciones.

Ingeniera inversa de diagrama de objetos


Anlisis esttico + anlisis dinmico Un anlisis esttico del cdigo basado en OFG para aproximar estticamente la creacin de objetos y sus interrelaciones. Un anlisis dinmico basado en trazas de ejecucin donde cada una de ellas est asociada con un diagrama de objetos y las relaciones que son instanciadas.
El anlisis esttico es seguro con respecto a los objetos y relaciones que representa, sin embargo, no provee informacin sobre multiplicidad y no permite detectar caminos que no son factibles

Extraccin de diagramas de objetos


Los puntos de asignacin (lneas de cdigo que contienen sentencias de asignacin) son usados para aproximar el conjunto de objetos creados por un programa, mientras que el OFG es usado para determinar las relaciones entre objetos. Especializacin de la propagacin del flujo de datos

Extraccin de diagramas de objetos


Cada sitio de asignacin ( 5) est asociado con un nico identificador ci (el nombre de la clase c y un entero incrementado i). Cada identificador de objeto ci genera un nodo en el diagrama de objetos. Cada nodo en OFG asociado a un atributo, es decir con un prefijo c y sufijo a, donde a es un atributo de clase c, se tiene en cuenta cuando se generan asociaciones entre objetos. El conjunto out de tal nodo de OFG( es decir out[c.a]) da el conjunto de objetos alcanzables desde todos los objetos ci de clase c a lo largo de la asociacin implementada a travs del atributo a.

Ejemplo rbol binario de bsqueda- JAVA

Ejemplo rbol de bsqueda-Sintaxis abstracta

Ejemplo rbol de bsqueda-Sintaxis abstracta


Los objetos de tipo BinaryTreeNode se asignan en 3 puntos distintos del programa, originando 3 identificadores: BinaryTreeNode1, BinaryTreeNode2, BinaryTreeNode3, los que estn incluidos en el conjunto gen de BinaryTree.root, BinaryTreeNode.addLeft.n, BinaryTreeNode.addRight.n respectivamente. Hay una nica asignacin para objetos BinaryTree, el nico identificador es BinaryTree1, insertado en el gen de BinaryTree.main.bt

Ejemplo rbol binario de bsqueda- OFG

Ejemplo rbol binario de bsqueda - OFG


Construccin del diagrama de objetos Cada identificador se convierte en un nodo en el diagrama.Los conjuntos out de los atributos de clase determinan las interelaciones

Ejemplo rbol binario de bsqueda - OFG

Extraccin del diagrama de objetos Anlisis sensible a objetos


Un identificador de objeto ci se asocia a cada punto de asignacin en el programa que se analiza. Una ubicacin n originalmente alcanzada por una clase c, se asocia ahora a un conjunto de nodos n, alcanzados por identificadores de objetos ci. Especficamente, para cada identificador de un objeto ci, creado para la clase c, una rplica de la ubicacin n alcanzada por ci se inserta en el OFG

Anlisis sensible a objetos Reglas para la construccin del OFG

Extraccin del diagrama de objetos Ejemplo- rbol de bsqueda

Extraccin del diagrama de objetos Ejemplo- rbol de bsqueda

Ejemplo- rbol de bsqueda OFG

Ejemplo- rbol de bsqueda OFG Sensible a objetos

Ejemplo- rbol de bsqueda OFG Sensible a objetos

Ejemplo- rbol de bsqueda OFG Sensible a objetos

Ejemplo- rbol de bsqueda OFG

Insensible a objetos

Sensible a objetos

Ejemplo- rbol de bsqueda OFG


El anlisis sensible a objetos da informacin precisa sobre los elementos de datos almacenado en los dos rboles binarios bt1 y bt2. El OFG indica que el primer rbol es usado para administrar objetos de clase A y el segundo de tipo B1. El anlisis insensible es menos preciso y no distingue los elementos almacenados en los dos rboles

Anlisis dinmico
Un anlisis dinmico provee un conjunto de diagramas de objetos, cada uno asociado con un test. Las ejecuciones de un programa se asocian a una traza de ejecucin de cuyo anlisis surge un diagrama de objetos. Es parcial, est basado en un caso limitado de casos de prueba

Ejemplo- rbol de bsqueda Anlisis dinmico


Asumamos que los elementos del rbol estn ordenados de acuerdo a compareTo disponible para el atributo object (en la clase BinaryTreeNode) que implementa una interfaz Comparable. Un test puede consistir en la creacin de 1 o ms objetos BinaryTreeNode, con un String asignado al atributo object y la insercin de los nodos en el mismo rbol. Supongamos 3 cadenas(a, b, c) para test TC1, TC2 y TC3

Anlisis dinmico

Anlisis dinmico

Ejemplo- rbol de bsqueda Anlisis dinmico

Вам также может понравиться