Una revisión de código no debería depender solamente de la intuición. Una checklist ayuda a mirar el código con criterios repetibles: nombres, responsabilidades, duplicación, errores, pruebas, dependencias y claridad de interfaces.
En este tema construiremos una checklist práctica para detectar code smells en Python y aprenderemos a redactar observaciones útiles, concretas y priorizadas.
Una revisión de calidad busca reducir riesgos antes de que el código se vuelva más costoso de cambiar. No se trata de imponer preferencias personales, sino de encontrar problemas que afectan mantenimiento, comportamiento o comprensión.
Una buena revisión detecta:
Antes de revisar, ejecuta herramientas para quitar ruido:
python -m isort src tests
python -m black src tests
python -m ruff check src tests
python -m mypy src
python -m pytest
Las herramientas detectan problemas mecánicos. La revisión humana se concentra en intención, diseño y riesgos.
Preguntas para revisar nombres:
Ejemplo problemático:
def p(x):
return x["p"] * x["c"]
Mejor:
def calcular_importe(producto):
return producto["precio"] * producto["cantidad"]
Preguntas:
Una señal frecuente es encontrar una función que calcula y además imprime, guarda o envía datos.
Preguntas:
if total < 10000:
total += 1500
Si esta regla aparece en varios lugares, conviene extraer constantes o una función.
Preguntas:
elif que podrían ser tablas de reglas?Las cláusulas de guarda y las funciones de consulta suelen mejorar la lectura.
Preguntas:
try:
total = calcular_total(productos)
except Exception:
total = 0
Esta captura puede ocultar errores reales. La revisión debe pedir una estrategia más explícita.
Preguntas:
Una llamada como procesar(x, y, True, False) suele merecer revisión.
Preguntas:
Una mejora de calidad sin pruebas puede ser riesgosa si cambia funciones compartidas.
Preguntas:
Una revisión debe buscar límites claros entre datos, reglas y salida.
No todos los comentarios tienen la misma importancia. Prioriza por riesgo:
Una revisión útil no bloquea por detalles menores si hay problemas importantes sin resolver.
Un comentario de revisión debe incluir problema, riesgo y sugerencia.
Revisa este código:
def hacer(items, c, pais):
t = 0
for x in items:
try:
t += x["p"] * x["q"]
except Exception:
pass
if c == "vip":
t *= 0.85
if pais == "AR":
t *= 1.21
if t < 10000:
t += 1500
print(t)
return t
Hallazgos posibles:
hacer, c, t, x.DESCUENTO_VIP = 0.15
IVA_ARGENTINA = 0.21
LIMITE_ENVIO_GRATIS = 10000
COSTO_ENVIO = 1500
def calcular_subtotal(productos):
subtotal = 0
for producto in productos:
subtotal += producto["precio"] * producto["cantidad"]
return subtotal
def calcular_total(productos, tipo_cliente, pais):
total = calcular_subtotal(productos)
if tipo_cliente == "vip":
total *= 1 - DESCUENTO_VIP
if pais == "AR":
total *= 1 + IVA_ARGENTINA
if total < LIMITE_ENVIO_GRATIS:
total += COSTO_ENVIO
return total
La mejora no resuelve todo, pero reduce riesgos principales y deja la salida por consola fuera del cálculo.
Aplica la checklist al siguiente fragmento y escribe cinco observaciones priorizadas:
def procesar(u, datos):
r = []
for d in datos:
if d["ok"] == True:
valor = d["a"] * d["b"]
if valor > 5000:
valor = valor - 300
r.append({"u": u["email"], "v": valor})
return r
Revisa nombres, booleanos, valores mágicos, estructura de datos y responsabilidades.
En ventas_demo, realiza una revisión completa:
python -m ruff check src tests
python -m mypy src
python -m pytest
Antes de continuar, verifica que puedes hacer lo siguiente:
En este tema construimos una checklist práctica para revisar código y detectar code smells. Una buena revisión no busca demostrar conocimiento: busca reducir riesgo y mejorar la mantenibilidad del proyecto.
En el próximo tema trabajaremos con mejoras pequeñas y seguras guiadas por pruebas existentes.