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
| Palabra | Qué significa |
|---|---|
| Diff | una lista de las líneas que un cambio quita y añade |
| Revisión de código | una compañera lee un cambio antes de integrarlo |
| Caso límite | una entrada rara, como una lista vacía, que el código debe aguantar |
| Comentario de revisión | una nota sobre un sitio del cambio, para que se mire otra vez |
| Resto | algo 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
mkdir -p ~/reviewtest/before ~/reviewtest/afterSe 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
cd ~/reviewtestSe 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
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.pySe 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
printf 'def average_rating(ratings):\n print("valoraciones", ratings)\n return round(sum(ratings) / len(ratings), 1)\n' > after/ratings.pySe 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
diff -u before/ratings.py after/ratings.py | tail -n +3Se 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
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
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
PYTHONPATH=after python3 -B -c "from ratings import average_rating; print(average_rating([]))" 2>&1 | grep ErrorSe 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
grep -n "print(" after/ratings.pySe 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 flojo | Comentario útil |
|---|---|
| Esto está mal | Lí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 esto | Lí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 pruebas | Ninguna 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.