---
title: Katas intermedias de refactorización
description: Katas intermedias y recursos variados para practicar y profundizar tus conocimientos en refactorización.
---

[publicaciones ](https://www.codurance.com/es/publications)

# [Katas intermedias de refactorización](https://www.codurance.com/es/publications/katas-intermedias-refactorizacion)

 Escrito por [Emmanuel Valverde](https://www.codurance.com/es/publications/author/emmanuel-valverde) | 02 Nov 2023

Te recomendamos empezar con las [katas de Programación Orientada a Objetos (OOP)](https://www.codurance.com/es/publications/katas-intermedias-oop-y-dobles-de-test) antes de navegar por conceptos más avanzados de testing. Una vez que hayas dominado estos conceptos, puedes aplicar las técnicas de refactorización que presentamos a continuación. 

Encontrarás una lista de katas intermedias con enlaces a explicaciones detalladas y soluciones de ejercicios. Cada enlace proporciona una introducción que te pone en contexto, seguida de los detalles necesarios para ejecutar la kata correctamente. Y recuerda: la mejor forma de aprender es practicando. ¿Empezamos?

## Lista de katas intermedias de refactorización

### [Tennis Kata](https://www.codurance.com/es/katas/tennis)

Imagina que estás haciendo una revisión de código donde debes identificar code smells y sus correctas abstracciones. Revisa la [introducción y explicación a la Tennis kata](https://www.youtube.com/watch?si=YdvFm9D44r__cZiB&v=XifUs1FhWRc&feature=youtu.be) de la propia voz de su autora.

- **Iteración 1**: *Nivel 1*.
- **Iteración 2**:* Nivel 2*. Abstrae los conceptos en objetos que encapsulen la lógica de la kata.
- **Iteración 3**: *Nivel 3*. Revierte los cambios cuando un test falle

### [Import-User-Kata](https://github.com/SoftwareCraftersMurcia/import-users-kata)

Esta kata te ayudará a mejorar tus habilidades de refactorización trabajando con código existente y estableciendo una base sólida para tus tests.

- **Iteración 1**: Crea un setup para poder hacer test de tu kata, identifica los code smells y crea un test `[Golden master].`El objetivo es el setup, no resolver la kata.
- **Iteración 2**: Con los test creados en la iteración anterior, resuelve la kata.

### [Gilded Rose](https://www.codurance.com/es/katas/gilded-rose)

Centrada en el trabajo con código legacy, esta kata se centra en mejorar y refactorizar sin romper la funcionalidad existente. 

- **Iteración 1**: No necesitas crear tests, utiliza los que ya tiene la kata por defecto.
- **Iteración 2**: Aplica [Object Calisthenic](https://williamdurand.fr/2013/06/03/object-calisthenics/) para mejorar la estructura y calidad del código.
- **Iteración 3**: Comienza a trabajar con [Tests de Caracterización ](https://youtu.be/LKTGIGUX5ZA?si=c9-v49xL17VOO4e6)para entender y validar el comportamiento actual del código.
- **Iteración 4**: Aplica cambios en paralelo para refactorizar y mejorar el código gradualmente sin introducir errores.

### [Beverages Prices Kata](https://codesai.com/posts/2019/04/beverages_prices_kata)

Refactoriza una kata con una herencia dolorosa.

- Iteration 1: Utiliza parallel changes para refactorizar el código y mejorar la estructura sin romperla funcionalidad existente.

### [Parrot Refactoring Kata](https://github.com/emilybache/Parrot-Refactoring-Kata)

Esta kata te desafía a identificar y resolver code smells a medida que refactorizas el código del loro (parrot).

- **Iteración 1**: Identifica el code smell e intenta resolverlos.
- **Iteración 2**: Realiza la refactorización utilizando Object Calisthenic.

### [Smelly Mars Rover](https://github.com/khru/code-smells-refactoring-training-ts/tree/main/01-refactoring-smelly-mars-rover)

Kata diseñada para refactorizar los code smell que encuentres, utilizando Parallel changes:

- **Iteración 1**: Identifica los smells y refactoriza en orden de importancia según tu punto de vista.
- **Iteración 2**: Aplica [Object Calisthenic](https://williamdurand.fr/2013/06/03/object-calisthenics/).
- **Iteración 3**: Utiliza parallel changes. Utiliza la Herencia para mover la lógica hacia donde te lleva el código (el código te habla).

Al terminar, [observa cómo otros han resuelto esta kata](https://youtu.be/v-sH2LdYWMc?si=2wiUadGe9O4UXIyp) y luego aplica tus propios cambios (evitando seguir vídeos, para no hacer trampa ni engañarte a ti mismo).

### [Smelly Tic Tac Toe](https://github.com/AgileTechPraxis/CodeSmells)

Kata de refuerzo si se quiere trabajar sobre un dominio conocido.

### [Parallel Change Kata](https://kata-log.rocks/parallel-change-kata)

Aprende a realizar refactors sin romper ningún test ni causar errores de compilación.

### [BugZero Kata](https://kata-log.rocks/bugs-zero-kata)

Soluciona todos los bugs y cúbrelos con tests.

### [Racing Car Katas](https://github.com/emilybache/Racing-Car-Katas)

Kata diseñada para aplicar los principios SOLID. Aprende a identificar qué principio SOLID no se está cumpliendo y cómo resolverlo a través de las siguientes iteraciones:

- **Iteración 1**: Ejercicio de TirePressureMonitoringSystem.
- **Iteración 2**: Ejercicio de UnicodeFileToHtmlTextConverter.
- **Iteración 3**: Ejercicio de TicketDispenser.
- **Iteración 4**: Ejercicio de TelemetrySystem.
- **Iteración 5**: Ejercicio de Leaderboard.

### [TripService](https://github.com/sandromancuso/trip-service-kata)

Esta kata se centra en trabajar con ramas superficiales (cubriendo el código con pruebas y luego refactorizando los cambios) y aplicando la técnica de costuras. Trabaja específicamente con código heredado, comenzando por agregar cobertura con pruebas que aborden gradualmente los casos de uso que comprendas.

A lo largo de esta kata, entenderás los desafíos que el patrón Singleton puede introducir en la testabilidad de tu código.

### [Refactoring Kata Lift Pass Pricing](https://github.com/emilybache/Refactoring-Kata-Lift-Pass-Pricing)

Explora técnicas de refactorización aplicadas al sistema de precios de pases de elevación.

- **Iteración 1**: Cubre todo el código con tests de caracterización y establece una estrategia de testing efectiva.
- **Iteración 2**: Evoluciona hacia una arquitectura hexagonal para mejorar la modularidad del sistema.

## Consejos para refactorización

- Identifica las distintas taxonomías de code smells.
- Acepta y adalta el cambio.

## Aprendizajes

- Tipos comunes de code smells y cómo identificarlos. 
- Prácticas habituales de refactorización. 
- Realización de cambios en paralelo. 
- Técnicas efectivas para trabajar con código legacy. 
- Implementación de tests de caracterización. 
- Uso de costuras para la integración de cambios. 
- Preparación del entorno para el trabajo con código heredado. 
- Importancia de la cobertura de código en el proceso de refactorización. 
- Manejo efectivo de código legacy.
- Parallel changes.

Te preguntas ¿cómo aplicar el [Desarrollo Guiado por Pruebas (TDD)](https://www.codurance.com/es/guia-completa-desarrollo-guiado-por-pruebas-tdd) en tus proyectos de desarrollo? No pases por alto nuestra guía.

[Ver post completo](https://www.codurance.com/es/publications/katas-intermedias-refactorizacion)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Emmanuel Valverde"
  },
  "dateModified" : "2024-07-16T09:59:04.764Z",
  "datePublished" : "2023-11-02T15:55:51Z",
  "headline" : "Katas intermedias de refactorización",
  "image" : {
    "@type" : "ImageObject",
    "height" : 630,
    "url" : "https://3042464.fs1.hubspotusercontent-na1.net/hubfs/3042464/Social%20Media%20-%20Spanish/2023/Blogposts/Blog%20Header_Emmanuel_2.png",
    "width" : 1200
  },
  "mainEntityOfPage" : "https://www.codurance.com/es/publications/katas-intermedias-refactorizacion",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60,
      "url" : "/hs/hsstatic/content_shared_assets/static-1.4092/img/default-amp-logo.png",
      "width" : 60
    },
    "name" : "Publicaciones"
  }
}
```