pablo fernández busch - marcos pasqualino. motivación: construcción de jerarquías de clases...

32
Pablo Fernández Busch - Marcos Pasqualino

Upload: lucia-santiago

Post on 03-Jan-2015

10 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Pablo Fernández Busch - Marcos Pasqualino

Page 2: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Motivación: Construcción de jerarquías de clases

Análisis de Conceptos Formales Desarrollo de la Metodología Implementación: Jerónimo Casos de Estudio: Collections y Swing Análisis de Resultados: Patrones de codificación Lecciones Aprendidas Conclusiones

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 2

Page 3: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Herencia Tipos :

Implementación / Subclasificación Interfaz Clase

Construcción evolutiva Contratos implícitos

ReingenieríaPatrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 3

Page 4: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 4

Clase A

a1

m1 { … }m2 { … }m3 { this.m1}

Clase C

m6 { this.m1 }m7 { this.m2 }

a2a3

Clase E

m9 { a2, a3 }m6 { super.m6 }

Clase B

m4 { this.m1 }m5 { this.m2 }

Clase D

m8 { a1 }m4 { super.m4 }

Las clases B y C reutilizan comportamiento definido en la clase A, vía this

Las clases D y E utilizan estado de sus superclases

Las clases D y E utilizan

comportamiento definido en la

superclase vía super

Las clases D y E extienden comportamiento de sus superclases

Page 5: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Detección no trivial Documentación desactualizada No explícitos en el código fuente.

¿Qué esconden? Definiciones, utilizaciones,

reutilizaciones, extensiones, cancelaciones …

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 5

Page 6: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Es una herramienta que permite identificar grupos de elementos que tienen propiedades comunes.

Elementos importantes Tabla de incidencia Concepto Lattice

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Page 7: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Rock

Pop

Jazz

Blues

Salsa

Merengue

Tango

Mambo

José X X

Juan X X X X

Ana X X X

Camila X X X X

Pedro X X X

María X X X

Nicolás X X X X

Gastón X X X

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 7

Page 8: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 8

Page 9: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 9

Page 10: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 10

Jerarquía de clases Tabla de incidencia Patrones

Lattice

Propiedades

Page 11: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

¿Qué son? Conjunto de características

¿Para qué sirven? Extracción de información Agrupadas conforman patrones

¿Cómo se detectan?

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 11

Page 12: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Ejemplo

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 12

Acceso directo a estado local

Concreto en ancestro

ArrayList -> size X

EnumMap -> putAll X

Page 13: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

¿Qué son? Conjunto de propiedades

Tipos Buenas prácticas Prácticas irregulares Malas prácticas

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 13

Page 14: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Ejemplo Comportamiento concreto local

redefinido

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 14

Propiedades:• Concreto localmente• Concreto en descendiente• Invocado vía this

Page 15: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Nuestra herramienta: Jerónimo

Cuatro etapas de análisis: Análisis de código fuente Extracción de propiedades Construcción de la tabla de incidencia y

el lattice Inferencia de patrones

Cálculo de métricasPatrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 15

Page 16: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 16

Page 17: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Construcción de un metamodelo del código fuente

Se utilizó una biblioteca de terceros: Recoder

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 17

Metamodelo

Código fuente

Page 18: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Análisis del metamodelo Invocaciones a métodos Acceso a variables de instancia

Características consideradas Ubicación de la declaración Tipo de invocación Métodos de acceso a estado,

concretos, abstractos y cancelados

Comparación de métodos

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 18

Propiedades

Metamodelo

Page 19: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Se utilizó y extendió la biblioteca de ACF Colibri

Construcción de la tabla de incidencia a partir de las propiedades detectadas

Usando la tabla de incidencia se construye el lattice

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 19

Propiedades

Lattice

Tabla de incidencia

Page 20: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Dos fases:1. Búsqueda automática de

instancias de patrones conocidos

2. Descubrimiento de nuevos patrones a través de un análisis manual

Detección de patrones contenidos en otros más generales

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 20

Lattice

Patrones

Page 21: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Aportan información sobre el proceso y los resultados obtenidos

Distintos grupos de métricas De las jerarquías analizadas Del contexto estudiado Del análisis realizado De los patrones detectados

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 21

Métricas

Page 22: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Se probó la metodología y la herramienta en: Java Collections Swing

Los resultados se utilizaron para validar y enriquecer el análisis

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 22

Page 23: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Comportamiento concreto de ancestro redefinido y extendido

TreeMap extiende comportamiento heredado

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 23

Page 24: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Uso de nombres incorrecto

El nombre del método size() coincide con el nombre de la variable de instancia size.

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 24

Page 25: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Acceso directo a estado en ancestro

SyntTableHeaderUI accede directamente a una variable definida en su superclase

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 25

Page 26: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Collections

Swing

Instancias de patrones 54 1258

Conceptos con inclusión de patrones

25 357

Tipos de patrones 8 17

Tipos de patrones Buenas Prácticas

5 10

Tipos de patrones Malas Prácticas

3 5

Tipos de patrones Prácticas Irregulares

0 2Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 26

Page 27: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Collections vs Swing

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 27

Page 28: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Lattice completo vs lattice reducido

Proporción de patrones

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 28

Page 29: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Análisis de conceptos formales

Análisis manual de resultados Evolución del proceso Detección de nuevos patrones Patrones contenidos (Superpatrones)

Volumen de información

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 29

Page 30: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Descubrimiento de patrones de codificación

Detección de fortalezas y debilidades

Análisis semiautomático

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 30

Page 31: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Definición de Superpatrones

Ampliar información de las propiedades

Continuar con el análisis de resultados

Analizar cuerpo de los métodos

Incorporar propiedades negativas

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 31

Page 32: Pablo Fernández Busch - Marcos Pasqualino. Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología

Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 32

Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología Implementación: Jerónimo Casos de Estudio: Collections y Swing Patrones de codificación