nombre: descripción del refactor: Refactorización sistemática de código basada en la metodología de Martin Fowler. Use cuando los usuarios pidan refactorizar código, mejorar la estructura del código, reducir la deuda técnica, limpiar el código heredado, eliminar olores al código o mejorar la mantenibilidad del código.
Habilidad de refactorización de código
Un enfoque sistemático para refactorizar el código basado en el de Martin Fowler Refactorización: mejorar el diseño del código existente (2a edición). Esta habilidad enfatiza cambios seguros y incrementales respaldados por pruebas.
"La refactorización es el proceso de cambiar un sistema de software de tal manera que no altere el comportamiento externo del código pero mejore su estructura interna." — Martin Fowler
Principios básicos
- Preservación del comportamiento: El comportamiento externo debe permanecer sin cambios
- Pasos pequeños: Realizar pequeños cambios, testables
- Conducida por el ensayo: Las pruebas son la red de seguridad
- Continuo: La refactorización está en curso, no es un evento único
- Colaboración: Se requiere la aprobación del usuario en cada fase
Resumen del flujo de trabajo
Phase 1: Research & Analysis
↓
Phase 2: Test Coverage Assessment
↓
Phase 3: Code Smell Identification
↓
Phase 4: Refactoring Plan Creation
↓
Phase 5: Incremental Implementation
↓
Phase 6: Review & Iteration
Fase 1: Investigación y análisis
Objetivos
- Comprender la estructura y el propósito de la base de código
- Identificar el alcance de la refactorización
- Recopilar contexto sobre los requisitos de negocio
Preguntas que debe hacer el usuario
Antes de comenzar, aclare:
- Ámbito de aplicación: ¿Qué archivos/módulos/funciones necesitan refactorización?
- Objetivos: ¿Qué problemas está tratando de resolver? (legibilidad, rendimiento, mantenimiento)
- Limitaciones: ¿Hay áreas que NO deberían ser cambiadas?
- Presión de la línea de tiempo: ¿Esto está bloqueando otro trabajo?
- Estado del ensayo: ¿Existen pruebas? ¿Están pasando?
Medidas
- [ ] Leer y entender el código de destino
- [ ] Identificar dependencias e integraciones
- [ ] Arquitectura actual del documento
- [ ] Note los marcadores de deuda técnica existentes (TODO, FIXMEs)
Producto
Presente las conclusiones al usuario: - Resumen de la estructura del código - Esferas problemáticas identificadas - Recomendaciones iniciales Solicitar la aprobación para proceder
Fase 2: Evaluación de la cobertura del ensayo
Por qué las pruebas importan
"Refactorizar sin pruebas es como conducir sin cinturón de seguridad." — Martin Fowler
Las pruebas son la activador de teclas Sin ellos, corres el riesgo de introducir bichos.
Etapas de evaluación
-
Comprobación de los ensayos existentes
bash # Look for test files find . -name "*test*" -o -name "*spec*" | head -20 -
Ejecutar pruebas existentes # JavaScript/TypeScript npm test
# Python pytest -v
# Prueba de Java mvn #
- Control de la cobertura (si está disponible) Prueba de ejecución JavaScript npm:coverage
# Python pytest --cov=. #
Punto de decisión: Pregunte al usuario
Si existen pruebas y se aprueban: - Proceda a la fase 3
Si faltan pruebas o están incompletas: Opciones actuales: 1. Escribir pruebas primero (recomendado) 2. Agregar pruebas incrementalmente durante la refactorización 3. Proceder sin pruebas (riesgo - requiere reconocimiento del usuario)
Si las pruebas están fallando: - DETENER. Fijar las pruebas que fallan antes de refactorizar - Preguntar al usuario: ¿Deberíamos arreglar las pruebas primero?
Guías de escritura de pruebas (si es necesario)
Para cada función que se refactorice, asegúrese de que las pruebas cubren: - Happy path (operación normal) - Edge cases (inputs vacíos, null, limits) - Escenarios de error (inversiones inválidas, excepciones)
Utilice el ciclo "rojo-verde-refactor": 1. Escribir prueba de fallo (rojo) 2. Hacerlo pasar (verde) 3. Refactor
Fase 3: Identificación del olor de código
¿Qué son los olores de código?
Síntomas de problemas más profundos en código. No son errores, sino indicadores de que el código podría ser mejorado.
Código común huele a comprobar
Ver references/code-smells.md para el catálogo completo.
Referencia rápida
| Huele. | Señales | Impacto |
|---|---|---|
| Método largo | Métodos > 30-50 líneas | Difícil de entender, probar, mantener |
| Código duplicado | La misma lógica en varios lugares | Corrección de errores necesaria en varios lugares |
| Clase grande | Clase con demasiadas responsabilidades | Viola la responsabilidad única |
| Envidia de la característica | El método utiliza los datos de otra clase más | Mal encapsulado |
| Obsesión primitiva | Uso excesivo de primitivos en lugar de objetos | Faltan conceptos de dominio |
| Lista de parámetros largos | Métodos con más de 4 parámetros | Es difícil de llamar correctamente |
| Clumps de datos | Los mismos datos que aparecen juntos | Falta de abstracción |
| Cambiar las declaraciones | Conmutador complejo/cadenas si-else | Difícil de extender |
| Generalidad especulativa | Código "por si acaso" | Complejidad innecesaria |
| Código muerto | Código no utilizado | Confusión, carga de mantenimiento |
Pasos de análisis
-
Análisis automatizado (si hay scripts disponibles)
bash python scripts/detect-smells.py <file> -
Revisión manual
- Pasear por el código sistemáticamente
- Observe cada olor con ubicación y severidad
-
Categorizar por impacto (crítico/alto/medio/bajo)
-
Priorización Concéntrate en los olores que:
- Bloquear el desarrollo actual
- Causar errores o confusión
- Afecta a las rutas de código más cambiadas
Salida: Informe sobre el olor
Presente al usuario: - Lista de olores identificados con ubicaciones - Evaluación de gravedad para cada - Orden de prioridad recomendado - Solicitar la aprobación de las prioridades
Fase 4: Refactorización de la creación del plan
Selección de refactorizaciones
Para cada olor, seleccione una refactorización apropiada del catálogo.
Ver references/refactoring-catalog.md para la lista completa.
Mapeo del olor a la refactorización
| Olor al código | Refactorización recomendada |
|---|---|
| Método largo | Método de extracción, reemplace la temperatura con la consulta |
| Código duplicado | Método de extracción, método de extracción, método de plantilla de formulario |
| Clase grande | Clase de extracto, Subclase de extracto |
| Envidia de la característica | Mover método, mover campo |
| Obsesión primitiva | Reemplazar Primitivo con Objeto, Reemplazar Código Tipo con Clase |
| Lista de parámetros largos | Introducir el objeto parámetro, preservar el objeto completo |
| Clumps de datos | Clase de extracción, introducir el objeto del parámetro |
| Cambiar las declaraciones | Reemplazar condicional con polimorfismo |
| Generalidad especulativa | Contraer jerarquía, clase en línea, eliminar código muerto |
| Código muerto | Eliminar código muerto |
Estructura del plan
Usar la plantilla en templates/refactoring-plan.md.
Para cada refactorización: 1. Objetivo: ¿Qué código cambiará 2. Huele.: ¿Qué problema aborda 3. Refactorización: Qué técnica aplicar 4. Pasos: Micro-paso detallado 5. RiesgosLo que podría salir mal 6. Retorno: Cómo deshacer si es necesario
Enfoque por etapas
CRÍTICA: Introducir la refactorización gradualmente en fases.
Fase A: victorias rápidas (Bajo riesgo, alto valor) - Cambiar el nombre de las variables para la claridad - Extraer código duplicado obvio - Eliminar código muerto
Fase B: Mejoras estructurales (Riesgo medio) - Extraer métodos de funciones largas - Introducir objetos de parámetros - Mover métodos a clases apropiadas
Fase C: Cambios arquitectónicos (Riesgo superior) - Reemplazar condicionales con polimorfismo - Clases de extracto - Introducir patrones de diseño
Punto de Decisión: Plan Presente al Usuario
Antes de la implementación: - Mostrar un plan de refactorización completo - Explicar cada fase y sus riesgos - Obtener aprobación explícita para cada fase - Preguntar: "¿Debo proceder con la Fase A?"
Fase 5: Aplicación incremental
La regla de oro
"Cambiar → Prueba → Verde? → Comprometer → Siguiente paso"
Ritmo de aplicación
Para cada paso de refactorización:
- Comprobación previa
- Las pruebas están pasando (verde)
-
Compilaciones de código
-
Hacer UN pequeño cambio
- Siga la mecánica del catálogo
-
Mantener los cambios mínimos
-
Verificar
- Ejecutar pruebas inmediatamente
-
Comprobar si hay errores de compilación
-
Si las pruebas pasan (verde)
- Comprometerse con mensaje descriptivo
-
Pase al siguiente paso
-
Si los ensayos fallan (rojo)
- DETENER inmediatamente
- Deshacer el cambio
- Analizar lo que salió mal
- Pregunte al usuario si no está claro
Comprometer estrategia
Cada compromiso debe ser: - Atómico: Un cambio lógico Reversible: Fácil de revertir - Descriptiva: Borrar el mensaje de confirmación
Ejemplo de mensajes de confirmación:
refactor: Extract calculateTotal() from processOrder()
refactor: Rename 'x' to 'customerCount' for clarity
refactor: Remove unused validateOldFormat() method
Presentación de informes sobre la marcha de los trabajos
Después de cada subfase, informe al usuario: - Cambios realizados - Pruebas que aún pasan? - Cualquier problema encontrado - Preguntar: "¿Continúa con el siguiente lote?"
Fase 6: Revisión e Iteración
Lista de comprobación posterior a la refactorización
- [ ] Todas las pruebas que pasan
- [ ] No hay nuevas advertencias/errores
- [ ] Código compila con éxito
- [ ] Comportamiento sin cambios (verificación manual)
- [ ] Documentación actualizada si es necesario
- [ ] La historia de la comisión está limpia
Comparación métrica
Ejecutar análisis de complejidad antes y después:
python scripts/analyze-complexity.py <file>
Mejoras actuales: - Líneas de cambio de código - Cambio de complejidad ciclomática - Cambio de índice de mantenimiento
Revisión del usuario
Resultados finales actuales: - Resumen de todos los cambios - Comparación de códigos antes/después - Mejoras métricas - Deuda técnica restante - Preguntar: "¿Estás satisfecho con estos cambios?"
Próximos pasos
Discuta con el usuario: - ¿Olores adicionales a la dirección? - ¿Refactorización de seguimiento de programación? - ¿Aplicar cambios similares en otros lugares?
Directrices importantes
Cuándo PARAR y Preguntar
Siempre pausa y consulta al usuario cuando: - Insegura sobre la lógica de negocio - El cambio puede afectar a API externas - La cobertura de pruebas es inadecuada - Es necesaria una decisión arquitectónica significativa - Aumenta el nivel de riesgo - Te encuentras con complejidad inesperada
Normas de seguridad
- Nunca refactorice sin pruebas (a menos que el usuario reconozca explícitamente el riesgo)
- Nunca hagas grandes cambios. - romper en pequeños pasos
- Nunca omitas la ejecución de la prueba después de cada cambio
- Nunca continuar si las pruebas fallan - arreglar o revertir primero
- Nunca asumas - en caso de duda, pregunte
Qué NO hacer
- No combine la refactorización con las adiciones de características
- No refactorice durante emergencias de producción
- No refactorices el código que no entiendes
- No sobreingeniería - mantenerlo simple
- No refactorices todo a la vez.
Ejemplo de inicio rápido
Escenario: Método largo con duplicación
Antes:
function processOrder(order) {
// 150 lines of code with:
// - Duplicated validation logic
// - Inline calculations
// - Mixed responsibilities
}
Pasos de refactorización:
- Asegurarse de que existen pruebas para processOrder()
- Extracto validación en validaOrden()
- Ensayo - debe pasar
- Extracto cálculo en el cálculoOrdenTotal()
- Ensayo - debe pasar
- Extracto notificación al cliente()
- Ensayo - debe pasar
- Revisión - processOrder() ahora orquesta 3 funciones claras
Después:
function processOrder(order) {
validateOrder(order);
const total = calculateOrderTotal(order);
notifyCustomer(order, total);
return { order, total };
}
Bibliografía
- Catálogo de olores de código - Lista completa de olores de código
- Catálogo de refactorización - Técnicas de refactorización
- Plantilla de plan de refactorización - Plantilla de planificación
Scripts
scripts/analyze-complexity.py- Analizar las métricas de complejidad del códigoscripts/detect-smells.py- Detección automatizada de olores
Historial de la versión
- v1.0.0 (2025-01-15): Lanzamiento inicial con metodología Fowler, enfoque escalonado, puntos de consulta al usuario
Última actualización: 4 de agosto de 2026 Versión de Claude Code: 2.1.220 Fuentes: - https://code.claude.com/docs/en/skills Modelos compatibles: Claude Fable 5, Claude Opus 5, Claude Sonnet 5, Claude Sonnet 4.6, Claude Opus 4.8, Claude Haiku 4.5