
TDD con Code Katas: Ejemplos en Python
El Test-Driven Development (TDD) es una de las prácticas más poderosas que tenemos los desarrolladores para escribir software confiable y mantenible.
La idea es simple pero revolucionaria: primero escribimos el test, luego el código mínimo para pasarlo, y finalmente refactorizamos.
Los Code Katas son ejercicios pequeños que repetimos para entrenar habilidades de programación, igual que un karateka practica movimientos básicos.
Si unimos ambos, obtenemos una forma ideal de practicar TDD en un entorno seguro.
¿Qué es TDD?
El ciclo de TDD se suele resumir como:
- Red → Escribir un test que falle.
- Green → Escribir el código mínimo para que el test pase.
- Refactor → Mejorar el diseño del código manteniendo los tests verdes.
Ejemplo de Kata: Palindrome Checker
Un palíndromo es una palabra que se lee igual al derecho y al revés (ej. oso
, radar
, neuquen
).
Vamos a implementar un verificador de palíndromos con TDD.
Paso 1: escribir el primer test (falla)
Creamos un archivo test_palindrome.py
:
from palindrome import is_palindrome
def test_simple_palindrome():
assert is_palindrome("oso") is True
Si ejecutamos:
pytest -v
Obtendremos un error porque is_palindrome
todavía no existe. ✔️ Red
Paso 2: implementar el código mínimo
Creamos palindrome.py
:
def is_palindrome(text: str) -> bool:
return text == text[::-1]
Volvemos a correr los tests: ahora pasa. ✔️ Green
Paso 3: agregar más casos
Extendemos el test:
def test_non_palindrome():
assert is_palindrome("python") is False
def test_palindrome_with_uppercase():
assert is_palindrome("Radar") is True
def test_palindrome_with_spaces():
assert is_palindrome("Anita lava la tina") is True
Paso 4: mejorar el código (Refactor)
Ahora adaptamos la función para soportar mayúsculas y espacios:
import re
def is_palindrome(text: str) -> bool:
cleaned = re.sub(r"[^a-z0-9]", "", text.lower())
return cleaned == cleaned[::-1]
Volvemos a ejecutar pytest
: todos los tests pasan. ✔️ Refactor
Otro ejemplo rápido: FizzBuzz Kata
El clásico FizzBuzz imprime números del 1 al 100, pero:
- múltiplos de 3 →
"Fizz"
- múltiplos de 5 →
"Buzz"
- múltiplos de ambos →
"FizzBuzz"
Test primero:
from fizzbuzz import fizzbuzz
def test_fizzbuzz():
assert fizzbuzz(1) == "1"
assert fizzbuzz(3) == "Fizz"
assert fizzbuzz(5) == "Buzz"
assert fizzbuzz(15) == "FizzBuzz"
Código mínimo:
def fizzbuzz(n: int) -> str:
if n % 15 == 0:
return "FizzBuzz"
if n % 3 == 0:
return "Fizz"
if n % 5 == 0:
return "Buzz"
return str(n)
Tests pasan ✅
Beneficios de practicar TDD con Katas
- Refuerza el hábito de pensar en tests primero.
- Ayuda a dividir problemas grandes en pasos pequeños.
- Permite refactorizar con seguridad.
- Entrena la disciplina de escribir código más limpio y mantenible.
Conclusión
Practicar Code Katas con TDD es como ir al gimnasio de la programación:
nos entrena para escribir tests primero, pensar en pequeños pasos y diseñar mejor software.
La próxima vez que tengas 15 minutos libres, elegí un kata, abre tu editor y practicá TDD.
¡Tu “yo” del futuro (y tus compañeros de equipo) te lo van a agradecer!