380 likes | 544 Views
Nombre del Proyecto: Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. Desarrollado por: Carlos Eduardo Angarita Márquez Asesor: Silvia Takahashi Rodríguez Co-asesor Angela Lozano Julio de 2005.
E N D
Nombre del Proyecto: Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. Desarrollado por: Carlos Eduardo Angarita Márquez Asesor: Silvia Takahashi Rodríguez Co-asesor Angela Lozano Julio de 2005. Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. AGENDA • El problema • Propuestas de Solución • Conceptos Básicos • Estrategias de Detección de Feature Envy • Estrategias de Detección de Low Cohesion • Validación de las Propuestas (Encuesta Web) • Conclusiones • Trabajos Futuros Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. Valor ($$) del Mantenimiento EL PROBLEMA Mantenimiento Depuración + Extender Funcionalidad 80% Confiabilidad del Aplicativo Nivel de Mantenibilidad Tiempo de Vida útil Buenas Prácticas de Diseño y Codificación Cómo detectarlas? Cómo medirlas? Ciclo de Desarrollo 20% Detección de Malas Prácticas de Diseño o Codificación Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. PROPUESTAS DE SOLUCION Cuál es el problema de los Bad Smells? PUNTO DE PARTIDA Martin Fowler Kent Beck • Bad Smells • Large Class • Long Method • Duplicate Code • God Class • Too many parameters • Feature Envy • Low Cohesion • …. • Definidos en términos cualitativos • Hay Ambigüedad (multiplicidad de interpretaciones) • Definiciones para la intuición Humana. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. PROPUESTAS DE SOLUCION ESFUERZOS AISLADOS • Planteamientos de Estrategias de detección de malas prácticas basados en métricas de software. • Robert Martin • Radu Marinescu • A. J. Riel. • M. Fowler • E. Gamma, R. Helm, R. Johnson, J. Vlissides. • … Cuál es el problema de las propuestas? • Obedecen a una conceptualización muy personal del autor. • No han sido sometidos a un proceso de confrontación con • resultados de aplicación de la intuición humana. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. PROPUESTAS DE SOLUCION PLANTEAR ESTRATEGIAS DE DETECCIÓN • FEATURE ENVY • LOW COHESION CONSIDERACIONES • Basar las estrategias planteadas en conceptualizaciones apoyadas en concensos logrados a partir de la opinión grupos heterogéneos de desarrolladores experimentados. • Someter los resultados de obtenidos con las estrategias de detección planteadas a un proceso de confrontación con resultados de aplicación de la intuición humana. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CONCEPTOS BASICOS DEFINICIÓN DE FEATURE ENVY Martin Fowler define el Bad Smell de Feature Envy de la siguiente manera “un método parece estar más interesado en otra clase que la propia clase a la que pertenece”. El Bad Smell Feature Envy cuestiona la presencia de un determinado método en una clase, sugiriendo la posibilidad de transportarlo a otra. ESTRATEGIAS DE DETECCIÓN PLANTEADAS Qué porcentaje de la funcionalidad de cada clase usa el método analizado. Del 100% de las instrucciones del método, qué porcentaje de ellas involucran a cada clase? Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. ESTRATEGIAS DE DETECCION DE FEATURE ENVY Cuál clase debería declarar el método TestFE? X o Y ? • Utiliza en 6 ocasiones un único atributo de la clase X (a1X). • Utiliza en un única ocasión 4 atributos diferentes de la clase Y. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. ESTRATEGIAS DE DETECCION DE FEATURE ENVY PORCENTAJE DE EXPLOTACIÓN DE CADA CLASE CONVENCIONES NC (Nombre de Clase) NAA (Número de Atributos Accesibles) NMA (Número de Métodos Accesibles) NAU (Número de Atributos utilizados) NMU (Número de Métodos utilizados) FUM (Factor de utilización de Métodos) FUA (Factor de utilización de Atributos) FUC (Factor de utilización de Clase) Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. ESTRATEGIAS DE DETECCION DE FEATURE ENVY PORCENTAJE DE EXPLOTACIÓN DE CADA CLASE PARAMETRIZACIONES ADMITIDAS Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. ESTRATEGIAS DE DETECCION DE FEATURE ENVY PORCENTAJE DE USO DE CADA CLASE CONVENCIONES NTA (Número Total de Accesos) PU (Porcentaje de Utilización) Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. ESTRATEGIA DE DETECCION DE LOW COHESION Representación de las interacciones entre Atributos y métodos de una clase como grafo dirigido Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. ESTRATEGIA DE DETECCION DE LOW COHESION Representación de interacciones como grafos Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. ESTRATEGIA DE DETECCION DE LOW COHESION Subgrafos débilmente conexos Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. Encuesta Web Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. Encuesta Web Datos solicitados a los programadores Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. Encuesta Web Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. Encuesta Web Mecanismo de filtrado de ruido. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. Encuesta Web Mecanismo de filtrado de ruido. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. Encuesta Web Resultados Obtenidos. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. Conclusiones Es factible de construir herramientas que detecten de forma automática malas prácticas de diseño y programación como “Feature Envy” y “Low Cohesion” a partir de la utilización de métricas de software. Esta factibilidad de construir modelos exitosos de detección de malas prácticas esta condicionada en gran medida por la disponibilidad de mecanismos que extraigan métricas complejas de orden semántico a partir del código fuente. Un elemento que contribuye a facilitar el cálculo de dichas métricas es contar con una representación del código fuente de más alto nivel, que sea más fácil de analizar, como por ejemplo la representación XML de XSCORE usada en este proyecto. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. Conclusiones Las técnicas de grafos y métricas calculadas en este proyecto pueden ser extendidas para contribuir a la detección y especialmente para el refactoring de otras malas prácticas de diseño y programación, tales como clase muy larga y método muy largo. Es útil representar las interrelaciones de los elementos que componen una clase mediante grafos ya que no solo permite identificar casos de subconjuntos de atributos y métodos como independencia funcional total sino también subconjuntos débilmente conectados con los demás elementos de la clase. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. Trabajos Futuros • Plantear mecanismos mas elaborados para la detección automática de un método “Getter” y “Setter”, a partir de sus instrucciones. • Transformar la herramienta desarrollada para detección de Low Cohesion y Feature Envy en un plugin que se integren con Eclipse. • Abordar proyectos que hagan el refactoring a partir de la detección ya realizada de las malas prácticas “Feature Envy” y “Low Cohesion”. • Abordar proyectos que exploren MPDP tales como redundancia semántica de código fuente. • Abordar enfoques complementarios para la detección de “Low Cohesion”. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. Gracias! Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CASO 1. SEÑUELO Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CASO 2. ¿Se le debe dar tratamiento a las clases ancestros?. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CASO 3. ¿Se examina el nivel de explotación de una clase o el porcentaje de instrucciones que la utilizan?. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CASO 4. SEÑUELO Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CASO 5. ¿Se valoran por igual los accesos a atributos y métodos?. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CASO 6. ¿Se examina el nivel de explotación de una clase o el porcentaje de instrucciones que la utilizan?. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CASO 7. ¿Se valoran por igual los accesos a getters y a métodos funcionales? Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CASO 8. ¿Se valoran por igual los accesos a setters y a métodos funcionales?. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CASO 9. ¿Se valoran por igual los accesos a setters y getters?. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CASO 10. ¿Se valoran por igual el número de invocaciones en tiempo de ejecución y el número de métodos invocados? Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CASO 11. ¿Se valoran por igual el número de instancias que se usan de una clase y el número de atributos utilizados? Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CASO 12. ¿Se contabilizan los accesos indirectos a atributos?. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CASO 13. ¿Se contabilizan los accesos indirectos a métodos?. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes
Detección de Bad Smells en aplicaciones Java a partir de una representación XML del código fuente. CASO 14. ¿Se contabilizan por igual los accesos a atributos o métodos declarados en la clase y los heredados de clases del Java Development Kit?. Agenda Carlos Eduardo Angarita Márquez Universidad de los Andes