Upload
lucia-santiago
View
13
Download
3
Embed Size (px)
Citation preview
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 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
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
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
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
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
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
Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 8
Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 9
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
¿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
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
¿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
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
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
Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 16
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
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
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
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
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
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
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
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
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
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
Collections vs Swing
Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 27
Lattice completo vs lattice reducido
Proporción de patrones
Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos 28
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
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
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
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