¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Revisar un cambio pequeño de código

Después de esta lección: Puedo leer un cambio pequeño, hallar lo que falla ejecutándolo y escribir un comentario que ayude.

Lección de 60 min9 comandosLaboratorio de comandos de Linux de cada día: los treinta comandos que se escriben de memoria

Para qué sirve una revisión de código

Una revisión de código es cuando una compañera lee tu cambio antes de que entre en el código principal. Detecta fallos que no ves en tu propio trabajo y reparte el conocimiento del código por el equipo.

Una buena revisión es una habilidad. Mira lo que hace el cambio, no solo cómo se ve.

Al terminar esta lección

Nota

Puedo leer un cambio pequeño, hallar lo que falla ejecutándolo y escribir un comentario que ayude.

Palabras clave

PalabraQué significa
Diffuna lista de las líneas que un cambio quita y añade
Revisión de códigouna compañera lee un cambio antes de integrarlo
Caso límiteuna entrada rara, como una lista vacía, que el código debe aguantar
Comentario de revisiónuna nota sobre un sitio del cambio, para que se mire otra vez
Restoalgo que se olvidó quitar, como un print de depuración

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un cambio para revisar

Una compañera quiere ordenar una función pequeña. Calcula la media de las valoraciones que los clientes dieron a un producto. Crea dos carpetas: before guarda el código de hoy y after el código con su cambio.

Tu trabajo es revisarlo, como en una solicitud de integración.

Crea las dos carpetas

Comando
mkdir -p ~/reviewtest/before ~/reviewtest/after

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Entra en el proyecto

Comando
cd ~/reviewtest

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe el código de hoy

Comando
printf 'def average_rating(ratings):\n    if len(ratings) == 0:\n        return 0.0\n    total = 0\n    for rating in ratings:\n        total = total + rating\n    return total / len(ratings)\n' > before/ratings.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe la versión de tu compañera

Comando
printf 'def average_rating(ratings):\n    print("valoraciones", ratings)\n    return round(sum(ratings) / len(ratings), 1)\n' > after/ratings.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lee el diff antes que nada

Un diff muestra solo lo que cambió. Una línea que empieza por - se quitó. Una línea que empieza por + se añadió. Una línea que empieza por espacio es contexto, tal como estaba.

La línea @@ dice dónde está el cambio. Aquí el archivo viejo va de la línea 1 durante 7 líneas, y el nuevo de la línea 1 durante 3.

Muestra el cambio como diff

Comando
diff -u before/ratings.py after/ratings.py | tail -n +3

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Haz cuatro preguntas a cada cambio

¿Hace lo que dice? El cambio dice que ordena la función.

¿Qué pasa en los bordes: una lista vacía, un elemento, una lista enorme? ¿Hay una prueba que lo notaría? ¿Queda algo suelto o poco claro, como una línea de depuración o un nombre vago?

Ejecuta el cambio, no solo lo leas

Leer muestra lo que parece mal. Ejecutar muestra lo que está mal. Prueba las mismas llamadas en las dos versiones, incluida la lista vacía. PYTHONPATH dice a Python de qué carpeta importar.

Prueba el código viejo

Comando
PYTHONPATH=before python3 -B -c "from ratings import average_rating; print(average_rating([4, 5]), average_rating([]))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Prueba el código nuevo con dos valoraciones

Comando
PYTHONPATH=after python3 -B -c "from ratings import average_rating; print(average_rating([4, 5]))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Prueba el código nuevo con una lista vacía

Comando
PYTHONPATH=after python3 -B -c "from ratings import average_rating; print(average_rating([]))" 2>&1 | grep Error

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Busca restos en el código nuevo

Comando
grep -n "print(" after/ratings.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe un comentario que ayude

Un comentario útil nombra el sitio, dice lo que viste, dice por qué importa y ofrece un camino. Habla del código, no de la persona.

Un comentario que solo dice "mal" o "arregla esto" no da nada al autor para actuar.

Ejemplo resuelto: comentarios flojos y útiles

Comentario flojoComentario útil
Esto está malLínea 1: average_rating([]) ahora lanza ZeroDivisionError. El código viejo devolvía 0.0. ¿Podemos conservar ese caso y añadir una prueba?
Quita estoLínea 2: este print escribirá en los registros en cada llamada. ¿Se quedó de la depuración?
¿Por qué redondear?Línea 3: redondear a 1 decimal cambia 4,33 por 4,3 para todos los llamadores. ¿Es lo que se quiere? Si sí, dilo en el nombre o el título.
Faltan pruebasNinguna prueba cambió. Una prueba de lista vacía y otra de una sola valoración protegerían la siguiente edición.

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un error frecuente

Advertencia

Mucha gente revisa solo nombres y espacios, y aprueba. El estilo importa menos. Ejecuta el cambio, prueba el caso vacío y pregunta si una prueba lo notaría si se rompiera.

Más lejos: revisa tu propio cambio

Haz un cambio pequeño en una función tuya, como añadir una función nueva. Haz antes una copia del archivo viejo.

Ejecuta diff -u sobre los dos y responde las cuatro preguntas como lo haría una revisora. Escribe un comentario que te alegraría recibir.

Sobre este laboratorio y su código: Laboratorio de comandos de Linux de cada día: los treinta comandos que se escriben de memoria

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.