Refactorizaciones independientes del lenguaje

inicio

Resumen

Contexto de trabajo

Herramientas experimentales

Documentos relacionados

Resumen

El proceso de refactorización es un campo emergente dentro de la evolución del software. Dentro de dicho proceso existen varias actividades y líneas de trabajo abiertas, en la actualidad. Una de ellas es el soporte a herramientas que asistan a la refactorización con una cierta independencia del lenguaje.

Contexto de trabajo

arquitectura
paquete

Módulo A:

Es el encargado tanto de recoger la información de los códigos fuentes, para transformarlo en instancias de extensiones del metamodelo, como de recuperar el código a partir de instancias del metamodelo. Por cada lenguaje tratado en el framework existe su correspondiente parser y regenerador de código. Se aplica el patrón de diseño Builder.


paquete

Módulo B:

Se enfrenta al problema de poder almacenar las características concretas de los lenguajes de programación.Esta consideración es importante a la hora de añadir operaciones dependientes del lenguaje en la definición de una refactorización. El diseño de este módulo se basa en estudiar el lenguaje concreto respecto a la información disponible en el metamodelo utilizado y definir extensiones a partir de las clases del metamodelo para poder ser incorporadas. Hay que destacar que muchas de las características del lenguaje estarán soportadas por las propias clases del metamodelo dando soporte a la definición de refactorizaciones independientes del lenguaje.


paquete

Módulo C:

Representa un metamodelo que permite almacenar la información de los códigos fuentes escritos en lenguajes orientados a objetos estáticamente tipados con o sin genericidad. Su objetivo es proporcionar una estructura que permita representar las características de esta familia de lenguajes. Su diseño incluye los patrones Composite y Visitor.


paquete

Módulo D:

Define el motor de refactorizaciones, formado por un núcleo y repositorio. El núcleo del motor (ENGINE CORE) da soporte a la ejecución de refactorizaciones mientras que el repositorio (ENGINE REPOSITORY), da soporte a la definición de refactorizaciones con reutilización. La definición de las refactorizaciones actúa sobre las instancias del metamodelo, tanto para la verificación parcial de preservación del comportamiento, como en las acciones de transformación de la refactorización. Se aplican los patrones Template Method y Command.


paquete

Módulo E:

Esta compuesto de dos sub-modulos: Metric Collector y Bad Smells Inference. Es responsable de detectar Bad Smells usando métricas. Para eliminar los Bad Smells detectados, es posible sugerir un conjunto de refactorizaciones. En el libro de Fowler se proponen una relación entre bad smells y refactorizaciones. El sub-módulo Metric Collector esta diseñado usando los patrones de diseño Command, Template Method, Decorator y Collecting Parameter.


paquete

Módulo F:

Aisla las consultas y recorridos sobre los elementos del metamodelo. Estas consultas y recorridos son necasrias tanto en el repositorio de refactorizaciones (Módulo D), como en módulo de recolección de métricas (Módulo E). Por eso, esto módulo es reutilizado para evitar duplicidad de código en los módulos D y E. Para los recorrido se aplican los patrones de diseño Visitor y Strategy para añadir nuevas operaciones sin modificar las clases del metamodelo sobre las que operan. En este contexto, los modulos de regeneración de código (G) y de recolección de métricas (E) realizan diferentes recorridos sobre las instancias del metamodelo.


paquete

Módulo G:

Usa las extensiones del metamodelo para regenerar el código. Existe un único módulo de regeneración para todos los lenguajes tratados. Cada extensión del lenguaje concreto definida en el módulo B tiene la semántica para el recorrido de los elementos usando clases visitantes.


inicio

Herramientas experimentales

Título Aplicación/Applet Ejemplos Modulos relacionados
Herramienta de refactorización sobre MOON aplicadas a Java

aplicación Aplicación Java

ayuda Manual de Usuario

objetivos Memoria de la Herramienta

ejemplos Ejemplos de entrada

Herramienta de métricas sobre Java aplicadas a MOON

aplicación Aplicación Java

ayuda Manual de Usuario

objetivos Memoria de la Herramienta

ejemplos Ejemplos de entrada

Herramienta de adquisición de información de Java a MOON

aplicación Aplicación Java

ayuda Manual de Usuario

objetivos Objetivos de la Herramienta

ejemplos Ejemplos de entrada

Definición de Refactorizaciones sobre XMI

aplicación Applet Java

ayuda Manual de Usuario

objetivos Objetivos de la Herramienta

presentación Presentación

ejemplos Ejemplos de entrada

inicio

Documentos relacionados

Título Resumen Modulos relacionados Congreso y Fecha
documento presentación Definición de un Proceso para la Construcción de Refactorizaciones La actividad de refactorizar el código es hoy en día una de las tareas de la mayoría de procesos de desarrollo del software, especialmente relevante en metodologías ágiles. Sin embargo, la definición de dichas refactorizaciones, su construcción e integración en herramientas software, no han sido abordadas desde un punto de vista de proceso, en particular en relación a la preservación del comportamiento. En este trabajo se presenta una aproximación a este tema, desde un enfoque con y para reutilización, aplicable sobre una familia amplia de lenguajes orientados a objetos.

JISBD 07

Septiembre 2007

documento presentación Reuse based refactoring tools Current refactoring tools work on a particular language. Each time it is intended to provide refactoring support for new languages, the same refactoring operations are defined and implemented again from scratch. This approach ignores reuse opportunities in this matter. It is possible to define a way of collecting code information suited for several languages (a family of languages) and define refactoring operations over that representation. On the other hand, it is also possible to define and implement each refactoring operation by composing previously defined and developed elements. In this paper we show the current implementation of a reuse oriented refactoring engine and its specialization for a particular language.

ECOOP-WRT07

Julio 2007

documento presentación Caracterización de refactorizaciones para la representación en herramientas Aunque existen varias clasificaciones de refactorizaciones, ninguna está orientada a guiar su implementación. Este trabajo establece unos criterios de caracterización considerando el proceso completo de refactorización. A través de éstos, se asiste a la selección de un conjunto de refactorizaciones relacionadas, así como un orden de implementación de las mismas. Se proporciona un modelo de caracterización abierto para cualificar y cuantificar la complejidad de las refactorizaciones incluidas en distintos catálogos. Utilizando el modelo se presenta un caso de estudio, para guiar la decisión de implementación relacionada con el orden de implementación y selección de refactorizaciones asociadas con un conocimiento declarativo.

JISBD 06

Octubre 2006

documento presentación Towards a Language Independent Refactoring Framework Using metamodels to keep source code information is one of the current trends in refactoring tools. This representation makes possible to detect refactoring opportunities, and to execute refactorings on metamodel instances. This paper describes an approach to language independent reuse in metamodel based refactoring detection and execution. We use an experimental metamodel, MOON, and analyze the problems of migrating from MOON to UML 2.0 metamodel or adapting from UML 2.0 to MOON. Some code refactorings can be detected and applied on basic UML abstractions. Nevertheless, other refactorings need information related to program instructions. "Action" concept, included in UML 2.0, is a fundamental unit of behaviour specification that allows to store program instructions and to obtain certain information related to this granularity level. Therefore, we compare the complexity of UML 2.0 metamodel with MOON metamodel as a solution for developing refactoring frameworks

ICSOFT 06

Septiembre 2006

documento presentación Extending a Taxonomy of Bad Code Smells with Metrics Bad Smells define in an informal way code flaws, in order to suggest refactorings, their aim is to improve the design of the code. Current taxonomies group code smells, making use of similarity or correlation criteria between them, and leading to a manual revision of the code. By other side, it is suggested the assistance of using metrics in the detection of bad smells. Metrics can be collected automatically helping to suggest the presence of flaws. Nevertheless, current taxonomies do not link these concepts. This work tries to establish additional criteria when we want to classify bad smells. These criteria are also related to metric features. Following the current classifications, we propose a method to evaluate the suitability of the tools assisting bad code smell detection, as well as selection and implementation of metrics linked with bad code smells.

WOOR06

Julio 2006

documento presentación Relative Thresholds: Case Study to IncorporateMetrics in the Detection of Bad Smells To detect flaws, bad smells, etc, we often use quantitative methods: metrics or measures. It is common in practice to use thresholds to set the correctness of the measures. Most of the current tools use generic values. Nevertheless, there is a certain concern about the effects of threshold applications on obtained values. Current research is working on case studies of thresholds for several products and different versions. However, product domain and size could also affect the results, so we deal with the question of using generic vs. relative thresholds, looking at what effects this could have in bad smell detection.

QAOOSE06

Julio 2006

documento presentación Soporte de Métricas con Independencia del Lenguaje para la Inferencia de Refactorizaciones Uno de los problemas actuales a la hora de refactorizar el código radica en cuándo refactorizar. Hasta el momento, la mayoría de propuestas establecen que el proceso de refactorización nace de la intuición y experiencia del programador. Partiendo del concepto de ``Bad Smell'' y a través de métricas, existe la posibilidad de plantear su existencia, no desde un punto de vista subjetivo donde la opinión del programador prima, sino desde un punto objetivo a partir de medidas comparables. El siguiente trabajo presenta la definición de un soporte al cálculo de métricas para la detección de oportunidades de refactorización. El trabajo se realiza partiendo de una cierta independencia de las métricas respecto del lenguaje concreto, de forma que se puede reutilizar dicho enfoque sobre una familia amplia de lenguajes.

JISBD 2005

Septiembre 2005

documento Parallel Inheritance Hierarchy: Detection from a Static View of the System We expose a case study of a bad smell detection through metrics. In practice, bad smell detection emerges from human observations. Metrics allow to obtain an objective view of the software, so they must be used as instruments to detect bad smells. Concretely, we focus in the bad smell: Parallel Inheritance Hierarchy, using a metric subset. Although it is not a serious bad smell, however its detection is difficult in large and medium size systems. Besides, it is usually necessary to have several versions of the system to detect its presence. We define a process to manage the big amount of data extracted from a system to determine where exists this bad smell, only with an available version. The saving of time and effort in this process is showed as an advantage opposite to other solutions.

WOOR 2005.

Julio 2005

documento presentación Language Independent Metric Support towards Refactoring Inference One of the current trends in refactoring is when and where we should refactor. Until now, most of the proposals establish that the refactoring process starts from the programmer intuition and experience. From the bad smell concept, and using metrics, it is possible to discover refactoring opportunities, not only from a subjective point of view but also from an objective point of view. The following work presents an exploratory case study on the use of metrics in the detection of bad smells.This leads to related refactorings in order to improve underlying design. The process is achieved in a language independent manner. In this sense, it is briefly described a framework support for collecting metrics that allows to reuse the effort on a wide family of object-oriented languages. Framework solution is based on the use of metamodels describing family of languages. In addition to this, it is also described how to use the approach and its support, with other metamodels.

QAOOSE 2005.

Julio 2005

documento presentación Diseño de una Herramienta de Refactorización para UML El proceso de diseño evolutivo y adaptativo del software puede llevar asociado diferentes transformaciones sobre artefactos de diseño existentes. Las transformaciones automáticas del software, concretamente las operaciones de refactorización, pueden ayudar a mantener esta evolución y la adaptabilidad de un diseño en nuevos contextos. El presente trabajo propone el diseño de un módulo de refactorización para ser incorporado en una herramienta de modelado UML. Se realiza un estudio y selección de refactorizaciones aplicables a nivel de diseño sobre las abstracciones del metamodelo de UML relacionadas con los diagramas de clases y de secuencia. Se define la estructura de un motor de refactorizaciones que determina la definición de las refactorizaciones con reutilización, además de establecer un mecanismo de ejecución. La evaluación del módulo propuesto se realiza mediante su incorporación en una herramienta experimental de modelado UML.

En proceso

Enero 2005

documento presentación Un Framework para la Reutilización de la Definición de Refactorizaciones Actualmente la inclusión de refactorizaciones en los entornos de desarrollo orientados a un lenguaje concreto de programación está ampliamente extendida. Sin embargo se detecta una pérdida de reutilización del esfuerzo realizado cuando se implementan esas mismas refactorizaciones para otros lenguajes de programación. El presente trabajo expone el diseño de los distintos elementos de un motor de refactorizaciones que permite definir y aplicar refactorizaciones. Su diseño basado en frameworks abre la posibilidad de extensión sobre otros lenguajes y otras refactorizaciones, de cara al desarrollo para y con reutilización de herramientas de soporte a la refactorización de código. Por otro lado también se discuten diferentes alternativas de diseño frente al problema de regeneración de código una vez realizadas las refactorizaciones.

JISBD 2004

Noviembre 2004

documento presentación Hacia una solución basada en frameworks para la definición de refactorizaciones con independencia del lenguaje En este trabajo se presenta el estudio de un conjunto de refactorizaciones desde el punto de vista de un lenguaje modelo. El objetivo es validar la factibilidad de llevar a cabo, sobre un framework que conceptualice las abstracciones del lenguaje modelo, las operaciones de refactorización definidas en base a dichas abstracciones. De esta manera se avanza hacia una solución al desarrollo de herramientas de refactorización con independencia del lenguaje. El trabajo también presenta el estudio de un lenguaje (GJ, Generic Java) como instancia del lenguaje modelo, de manera que se avanza también en la validación del modelo desde el punto de vista de la factibilidad de instanciar el framework para diferentes lenguajes.

JISBD 2003

Noviembre 2003

documento presentación Refactorizaciones de especialización en cuanto a genericidad. Definición para una familia de lenguajes y soporte basado en frameworks El presente trabajo presenta la definición de un conjunto de refactorizaciones de especialización sobre clases genéricas. Las refactorizaciones se definen en función de transformaciones sobre las características del lenguaje vinculadas con genericidad como: parámetros formales, parámetros reales, instanciaciones genéricas y variantes de acotación. El estudio de las refactorizaciones se presenta desde una cierta independencia del lenguaje, a través de su definición sobre un lenguaje modelo, lo cual permite especificar de manera independiente la refactorización para una gran familia de lenguajes. Dicho lenguaje modelo, así como la definición de las refactorizaciones, son soportados a través de una solución basada en frameworks. También se presenta un ejemplo de instanciación del framework con una extensión concreta de un lenguaje que soporta genericidad.

PROLE 2003

Noviembre 2003

documento presentación Refactorizaciones de Especialización sobre el Lenguaje Modelo MOON Versión 1.0 La búsqueda de la denición de refactorizaciones con una cierta independencia del lenguaje de programación es un campo de interés actual. El presente trabajo defíne y analiza refactorizaciones de especialización sobre el lenguaje modelo MOON con el objetivo de conseguir la definición de refactorizaciones sobre lenguajes orientados a objetos para su posterior soporte en una solución basada en frameworks. Se valida MOON como lenguaje para la definición de refactorizaciones, centrándose en las refactorizaciones de especialización, con el objetivo de obtener un diseño más claro y eficiente a través de la especialización de propiedades de clases con y sin genericidad.

Informe Técnico

Septiembre 2003

documento presentación Definición de un soporte estructural para abordar el problema de la independencia del lenguaje en la definición de refactorizaciones En el presente trabajo se presenta un soporte para representar la información de un sistema software orientado a objetos con genericidad. Para ello se modelan las características comunes de las distintas familias lenguajes de programación a través de abstracciones definidas en un lenguaje modelo MOON. Las características variables serán soportadas introduciendo en las abstracciones del núcleo puntos de extensión que tendrán definiciones diferentes en familias distintas de lenguajes. El objetivo perseguido en la definición de esta solución de soporte es posibilitar la definición de refactorizaciones sobre las abstracciones del núcleo, consiguiendo así una cierta independencia del lenguaje en la definición de refactorizaciones.

Informe Técnico

Septiembre 2003

inicio

email

Carlos López

Raúl Marticorena

Valid HTML 4.01! Valid CSS!