Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
Creación de objetos, garbage collector, dynamic binding,…
Ingeniería inversa
Inconvenientes
La única fuente confiable es el código que
está poco (o nada) documentado y se ha
perdido contacto con los diseñadores y/o
programadores.
Las herramientas CASE proveen buen
soporte para análisis estático pero limitado
para análisis dinámico.
Ingeniería inversa de programas OO
Ingeniería inversa de código OO
Inconvenientes
Por ejemplo, las construcciones
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)
Ingeniería inversa estática
¿Porqué el análisis 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()
Declaración de constructor
implícito
Library.loans
Declaración de atributo
loans
Ejemplo
Lenguaje abstracto-Declaraciones
Library.borrowDocument(Library.borrowDocument.user,
Library.borrowDocument.doc)
Declaración de método
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
Library.loans = Library.addLoan.loan
Generación 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 ( invocación de next) y la
asignación a la variable local loan
Generación del OFG
Containers
Generación del OFG
Containers
Parte de código
dentro del método
main de la clase Main
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
diseño sobre la organización del sistema.
Map y Collection son interfaces. Las clases que las implementan son
HashMap y LinkedList, dos containers débilmente tipados, que son clases de
biblioteca y no serán 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
Ingeniería inversa de diagramas de
objetos
El diagrama de objetos muestra una “instantánea”
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 explícitamente
cómo diferentes instancias pueden desempeñar
diferentes roles y estar involucradas en diferentes
relaciones.
Ingeniería inversa de diagrama de
objetos
Análisis estático + análisis dinámico
Un análisis estático del código basado en OFG para
aproximar estáticamente la creación de objetos y sus
interrelaciones.
Un análisis dinámico basado en trazas de ejecución
donde cada una de ellas está asociada con un
diagrama de objetos y las relaciones que son
instanciadas.
El análisis estático es seguro con respecto a los objetos y
relaciones que representa, sin embargo, no provee información
sobre multiplicidad y no permite detectar caminos que no son
factibles
Extracción de diagramas de objetos
Los puntos de asignación (líneas de código que contienen sentencias de
asignación) son usados para aproximar el conjunto de objetos creados por
un programa, mientras que el OFG es usado para determinar las relaciones
entre objetos.
Especialización de la propagación del flujo de datos
Extracción de diagramas de objetos
Cada sitio de asignación ( 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 asociación implementada a través del
atributo a.
Ejemplo
Árbol binario de búsqueda- JAVA
Ejemplo
Árbol de búsqueda-Sintaxis abstracta
Ejemplo
Árbol de búsqueda-Sintaxis abstracta
Los objetos de tipo BinaryTreeNode se asignan
en 3 puntos distintos del programa, originando 3
identificadores: BinaryTreeNode1,
BinaryTreeNode2, BinaryTreeNode3, los que
están incluidos en el conjunto gen de
BinaryTree.root, BinaryTreeNode.addLeft.n,
BinaryTreeNode.addRight.n respectivamente.
Hay una única asignación para objetos BinaryTree,
el único identificador es BinaryTree1, insertado en el
gen de BinaryTree.main.bt
Ejemplo
Árbol binario de búsqueda- OFG
Ejemplo
Árbol binario de búsqueda - OFG
Construcción 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 búsqueda - OFG
Extracción del diagrama de objetos
Análisis “sensible” a objetos
Un identificador de objeto ci se asocia a cada punto de
asignación en el programa que se analiza.
Una ubicación n originalmente alcanzada por una clase c,
se asocia ahora a un conjunto de nodos n´, alcanzados por
identificadores de objetos ci. Específicamente, para cada
identificador de un objeto ci, creado para la clase c, una
réplica de la ubicación n alcanzada por ci se inserta en el
OFG
Análisis “sensible” a objetos
Reglas para la construcción del OFG
Extracción del diagrama de objetos
Ejemplo- Árbol de búsqueda
Extracción del diagrama de objetos
Ejemplo- Árbol de búsqueda
Ejemplo- Árbol de búsqueda
OFG
Ejemplo- Árbol de búsqueda
OFG Sensible a objetos
Ejemplo- Árbol de búsqueda
OFG Sensible a objetos
Ejemplo- Árbol de búsqueda
OFG Sensible a objetos
Ejemplo- Árbol de búsqueda
OFG