1. Introducción
1.1. Contexto
1.2. Motivación
1.3. Objetivo
1.4. Contribuciones
1.5. Organización de la tesis
1.6. Convenciones
2. Trabajos relacionados
2.1. Background
2.1.2. Refactoring browser
2.1.3. Code smells y análisis de código
2.2. Trabajos de investigación
2.2.1, Refactorización basada en búsqueda: Code-Imp
2.2.2. Estrategias de detección: reglas basadas en métricas para la detección de fallas de diseño
2.2.3. QA en Java mediante la detección de Code Smells
2.3. Herramientas
2.3.1. IntelliJ IDEA
2.3.2. iPlasma
2.3.3. inFussion e inCode
2.3.4. Cincom VisualWorks
3. Arquitectura debase
3.1. El framework de refactoring
3.1.1. Uso de la herramienta
3.1.2. Creación de un nuevo refactoring
3.1.3. Refactorings
3.1.4. Condiciones
3.1.5. Ejecución de las transformaciones: los cambios y el modelo
3.1.6. Reescritura de código
3.1.7. Patrones de diseño
3.2. Small Lint
3.2.1. El framework de reglas lint
3.2.2. Ejemplo: Refused Bequest
3.2.3. Ejemplo: Long Class
3.2.4. Ejecución de las reglas
3.2.5. Patrones de diseño
4. Marco de trabajo
4.1. Definición de Code Smell
4.2. Relación entre code critics de Pharo y code smells
4.3. Code Smells catalogados
4.3.1. Dead Code
4.3.2. Long Parameter List
4.3.3. Large Class
4.3.4. Long method
4.3.5. Messege Chain
4.3.6. Duplicate Code
4.3.7. Temporary Field
4.4. Code Smells no catalogados
4.4.1. Inconsistent method classification
4.4.2. Escessive inheritance depth
4.4.3. Method defined in all subclasses but not in superclass
4.4.4. Rewrite super messages to self messages when both refer to same method
4.4.5. Refer to class name instead of self class
4.4.6. Variable is only assigned a single literal value
4.4.7. Resumen de asociación de Code Critics con Refactorings predefinidos
4.5. Code smells catalogados (Fowler) no implementados en Pharo
4.5.1. Duplicate Code
4.5.2. Divergent Change
4.5.3. Shotgun Surgery
4.5.4. Feature Envy
4.5.5. Data Clumps
4.5.6. Primitive Obsession
4.5.7. Switch Statements
4.5.8. Parallel Inheritance Hierarchies
4.5.9. Lazy Class
4.5.10. Speculative Generality
4.5.11. Middleman
4.5.12. Innappropriate Intimacy
4.5.13. Alternative Class with different Interfaces
4.5.14. Data Class
4.5.15. Refused Bequest
4.5.16. Comments
4.5.17. Resumen de Code Smells no detectados mediante Code Critics
5. Diseño de la herramienta
5.1. Diseño
5.1.1. Asociación de code critics con refactorings
5.1.2. Aplicación de un refactoring a partir del resultado de la ejecución de un critic
5.1.3. Precondiciones
5.1.4. Parámetros adicionales
5.1.5. Integración con el Class Browser
5.2. Implementacion de asociaciones entre code critics y refacto
5.2.1. Remove Class Not referenced
5.2.2. Push Down Method with Refused Bequest
5.2.3. Replace Variable Only Assigned a Single Literal Value with Query
5.2.4. Extract when Long Methd
5.3. Diagrama de clases de la herramienta
6. Uso de la herramienta
6.1. Ejecución de code critics para una clase
6.2. Menú de refactoring en Critic Browser
6.3. Diálogo de refactoring
6.4. Ejemplo de uso
7. Conclusiones y Trabajos Futuros
7.1. Conclusiones
7.2. Contribuciones
7.3. Limitaciones
7.4. Trabajos Futuros
8. Bibliografía