code review - que - ¿Cuándo es el momento más efectivo para hacer revisiones de código?
code review que es (12)
Cada vez que completamos una función, antes de comenzar a probar dicha función, haremos una revisión del código, excepto muy brevemente. Esto quita la mayor parte del código feo, y luego semanalmente, realizamos revisiones completas de todas las características desde una iteración previa (somos una tienda ágil), cualquier característica que no tenga una buena revisión de código y las pruebas no se consideran completas en nuestra iteración quincenal.
En el proceso de agregar una nueva función, ¿cuándo deberías revisar el código? Si lo deja hasta que se complete el código, podría decirse que ya se desperdició mucho tiempo yendo en la dirección incorrecta. Demasiado temprano y las ideas solo están formadas a medias. Entonces, ¿dónde está el punto óptimo y cómo decides?
Creo que la dirección de cualquier característica nueva no debería ser evidente después de que se escribe el código. Es decir, cualquier implementación real de nuevos sistemas no debería ser una sorpresa para las partes interesadas. Anteriormente, he usado un sistema de propuesta, que aún hago, incluso si el equipo en el que estoy no lo adopta.
Básicamente, la función tiene un resumen de alto nivel, un diagrama explicativo (podría ser UML, flujo o lo que represente visualmente el sistema propuesto mejor), y alguna discusión a nivel de implementación sobre algoritmos complicados. Un elemento clave para hacer que esto funcione es intentar encontrar dos soluciones, y describir las limitaciones de ambas mientras se defiende una de ellas.
Esto ayuda a evitar que las personas se involucren tanto en su primera idea que no consideran alternativas.
La propuesta puede ser comentada por todas las partes interesadas, y las preguntas (la wiki lo hace bien). Los autores originales podrían revisar la propuesta en función de los comentarios una o dos veces. La implementación comienza si no se señala un ''gotcha'' particularmente grande.
Las características específicas de la implementación (p. Ej .: código) solo deben revisarse cuando aparece la primera implementación utilizable y se pueden realizar pruebas en el código. Se supone que los individuos deben seguir la versión revisada de la propuesta que se les ocurrió.
Descubrí que la forma más efectiva de revisión de código es la revisión del código en tiempo real; es decir, revísela mientras se está escribiendo, como participante activo en el diseño e implementación del código.
El mayor éxito que he tenido fue programar revisiones semanales regulares para grupos pequeños: 4-5 personas. Todos traerían su código, y todos serían molestados.
La peor experiencia que tuve fue cuando solíamos esperar hasta el final de un proyecto para hacerlas. En ese momento ya era demasiado tarde para hacer cambios, y había demasiados códigos para revisarlos de manera efectiva.
El mejor momento para hacer una revisión del código es AHORA. Mientras la otra parte tenga un descanso en su día, las revisiones de código son menos efectivas cuando se hacen al final como una idea posterior. Deben ser parte del proceso de desarrollo.
Nada es peor que leer páginas y páginas del código de otra persona. Es simplemente humano comenzar a rozar y no poner el 100% de esfuerzo el 100% del tiempo
Idealmente, sus funciones se dividirán en piezas más pequeñas para que cada "tarea" no sea más que unas pocas horas de trabajo, tal vez un día. Cuando una de esas piezas está lista, y el desarrollador que realiza el trabajo ha probado la unidad, ese es el momento de revisar el código. No debe permitir que la gente "se oscurezca" durante semanas en un proyecto complejo sin revisiones o revisiones durante ese tiempo.
Mi opinión es que debe revisar a un alto nivel al principio del desarrollo, centrándose en el diseño y la arquitectura, y revisar a un nivel inferior al final del desarrollo, centrándose en las eficiencias y la técnica.
Cuántas reseñas depende de usted, dependiendo del tiempo disponible y otros factores.
Según mi experiencia, el mejor momento para hacer la revisión del código es justo después de que el programador haya terminado de codificar una característica / iteración de tamaño razonable, y haya hecho las pruebas de unidad necesarias para ver si la característica realmente funciona. Estas dos cosas deberían haberle quitado al programador no más de 5 días de trabajo, o de lo contrario está mirando demasiados códigos para revisar, ya que este paso en el proceso debe realizarse a fondo.
Su programador debe ser capaz de darse cuenta cuando no se está progresando en una tarea y pedir ayuda antes de que se termine el tiempo asignado para la tarea, por lo que en teoría la "corrección" de la solución no debería ser el centro de la revisión del código. tanto como la forma en que se llegó a la solución, el estilo de codificación (en caso de que su empresa los tenga en su lugar), la legibilidad y la documentación. También es posible que desee ver qué pruebas unitarias como parte de la revisión del código para garantizar que no se omita un caso razonable.
Yo diría que es mejor hacerlo durante todo el ciclo de desarrollo, especialmente para los desarrolladores más nuevos cuyas prácticas no confíes.
Tuve que enviar un documento de diseño a mi revisor antes de escribir cualquier cosa que no fuera el código del prototipo para que cualquier decisión de arquitectura errónea se pudiera detectar desde el principio; un beneficio extra fue que obtuve una buena experiencia siguiendo las prácticas de nuestro grupo. Después de esa revisión, tuve algunas sesiones de revisión cuando implementé el código.
Siento que no hay razón para que no haya varias revisiones desde la fase de diseño hasta una revisión final.
Se realiza una revisión del código cuando el código está completo, pero mientras todavía está fresco en la mente del implementador (de lo contrario, le será difícil explicar ciertas decisiones).
Se realiza una revisión del diseño cuando se diseña la característica (cómo se implementará, qué módulos están involucrados, cómo se llama, a quién llama, qué datos globales / locales utiliza, impactos en el procesamiento, otros módulos, E / S , qué requisitos cumple, casos de esquina especiales, etc.) está completo y documentado.
La revisión del diseño debe proporcionar suficiente información que las personas puedan saber si esta es la dirección incorrecta antes de implementar y depurar el código.
Supongo que está revisando las sugerencias de antemano para ver si están muy desviadas y son una pérdida de tiempo para todos. ;-)
Si es así, entonces asumiría que una revisión del diseño estaría en orden.
Dependiendo del "tamaño de la revelación de lo que falta, pero es esencial" (-: Me gustaría tener una revisión del progreso y las actualizaciones de una manera ágil durante el desarrollo.
Nada peor que tener a alguien castigado en la oscuridad durante varios días / semanas / meses solo para que descubras que han implementado algo completamente equivocado / técnica / estilo / etc. ) -:
Además, una revisión del código, utilizando técnicas de tipo Fagan y sin ego, es esencial antes de implementar el código en vivo.
Tienes que tener un código para revisar, por lo que no puedes hacerlo demasiado temprano. Simplemente no tiene sentido revisar el código que no está hecho. Revisar el código sin terminar significa que estás perdiendo demasiado tiempo .
Revisa el código cuando el codificador cree que se ha terminado con una característica discreta o solución de error. Luego, pídales que hagan el seguimiento y hagan los cambios recomendados en la revisión.
El objetivo de las revisiones de código no es exclusivamente corregir el código que se revisa. Esta es una oportunidad para la colaboración en equipo. Después de pasar un tiempo haciéndolo, es de esperar que estas revisiones presenten menos problemas y más información en todo el equipo.
En algunos casos, cuando trabajas para entrenar a un Jr. Dev, puedes "revisar" su código a través de mentores y programación de pares, pero esa no es una revisión oficial del código.
Vea esta pregunta para algunos recursos de revisión de código . También echa un vistazo al colaborador del código .