|
|
 |
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
| Título |
Resumen |
Modulos relacionados |
Congreso y Fecha |
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|