¿Es bueno revisar programas con personas mayores y jefes, incluso si está funcionando bien?

18

En mi empresa, antes de la entrega de cualquier proyecto, mi jefe les pide a mis superiores que revisen los programas escritos por mí u otros miembros del equipo o, a veces, el jefe también se sienta con nosotros para su revisión.

Creo que es una buena forma de obtener conocimiento, pero a veces, cuando los programas funcionan bien, no funcionan igual después de la revisión y necesito revisar nuevamente mi programa.

Dicen que la revisión ayuda a optimizar la ejecución de programas y consultas, pero ¿podemos preferir la optimización sobre el funcionamiento real del programa?

Himanshu
fuente
66
¿Cómo puede estar seguro si está funcionando bien sin la revisión de alguien que no conoce las idiosincrasias a las que está acostumbrado cuando realiza sus propias pruebas
Ratchet freak
porque revisan el código después de la prueba completa del módulo por parte del equipo de prueba.
Himanshu
15
@Himanshu: La revisión después de la prueba definitivamente es demasiado tarde . Se deben realizar revisiones sobre el trabajo en progreso.
Jan Hudec
3
Abraza esta práctica. Desearía desesperadamente que estuviéramos haciendo esto en mis equipos. Ayuda a eliminar los silos de conocimiento (un gran problema para nosotros) y garantiza que sus compañeros de equipo puedan trabajar con su código. Si sus comentarios significan que su código se reescribe a veces, eso es algo bueno. Incluso los grandes programadores escriben código malo a veces; A algunos de nosotros nos encantaría tener más tiempo para volver y limpiarlo. Esta debería ser una oportunidad de tener una gran experiencia de aprendizaje con personas más experimentadas que usted. No lo tome como personas atacando su código; tómelo como personas que intentan ayudarlo a convertirse en un programador más experimentado.
jpmc26
1
Si es común que el código que "funciona bien" se haga pedazos durante la revisión del código en la medida en que los miembros del equipo sientan que se está perdiendo mucho ímpetu, entonces tal vez debería considerar la programación de pares, por lo que el código se revisa mientras se está revisando. escrito.
Buhb

Respuestas:

38

"Trabajar bien" es, de hecho, una gran métrica, pero si usted es el único en el equipo capaz de descifrar lo que escribió y, por lo tanto, mantenerlo, el código no tiene valor para la compañía a mediano o largo plazo.

Un buen código es al menos:

  • trabajando según lo previsto
  • legible por humanos / claro
  • fácilmente mantenible
  • fácilmente extensible para futuros cambios
  • seguro
  • sin dependencias innecesarias
  • manejo correcto de casos no nominales
  • etc.

(Algunos de estos requisitos se superponen, pero es bueno considerarlos individualmente ...)

Las revisiones de código cumplen el propósito más allá de la parte "funcional", que se puede realizar mediante pruebas automáticas.

Personalmente, sé que es molesto tener algo funcionando desgarrado y tener que reconstruirlo desde cero. Pero, a menudo, esto se debe a una falta de comunicación del líder senior / tecnológico. Entonces, si cree que tiene que volver a escribir con demasiada frecuencia, la próxima vez, vaya al revisor antes de escribir una sola línea e intente obtener la mayor cantidad de información posible sobre lo que está esperando, en cada detalle. También podría ser excelente si el equipo de revisores de código resume sus expectativas en un documento formal al que cada desarrollador puede referirse.

En un lado más positivo, una sesión también podría ser una ocasión para compartir buenas prácticas / diseños.

Xavier T.
fuente
1
Agregaría que probar el código no implica que no haya errores, limite los casos en los que el software se bloqueará, por ejemplo.
dyesdyes
3
Estoy de acuerdo, y las pruebas automáticas también deberían revisarse en código para asegurarse de que están probando lo correcto ... Tortugas hasta el fondo.
Xavier T.
12

Interpreté su pregunta como "¿Se puede descifrar mi código de funcionamiento en una revisión hasta el punto en que ya ni siquiera se compila?" .

Sí puede. En general, durante una revisión, observa cómo su código hace lo que hace. Cuando quiere entregar su código, dice que ha finalizado cierta parte del programa.

Dices que funciona. Luego se realizan pruebas para verificar esto. Un módulo que pasa las pruebas no significa que ese módulo no deba tocarse nuevamente.

Un módulo que parece funcional aún puede ser un desastre a la espera de suceder, ya sea en tiempo de ejecución o en unos meses cuando usted u otra persona tiene que realizar tareas de mantenimiento. Al cambiar su código en una revisión y señalar lo que estaba mal, su revisor está (con suerte) tratando de enseñarle algo.

CodeCaster
fuente
3

Las revisiones por pares son sin duda una excelente forma de aprender. Alguien puede ver algo diferente, tienen una experiencia diferente a la suya y deberían poder aportar mejoras. ¡Esto no debería ser despectivo, esperaría que cualquier desarrollador pueda comentar y criticar constructivamente el código de cualquiera!

Me parece que algunas de estas "mejoras" en realidad están haciendo cambios importantes porque (como era de esperar) el desarrollador de revisión tiene menos experiencia con el software que el autor.

Esta tendencia es su retroalimentación, ¿quizás su código sea difícil de seguir o mantener? ¿Son valiosas tus reseñas? ¡Absolutamente! Puedo ver cómo puede ser frustrante, tener un código de trabajo que sus pares parecen romper, no debe desanimarse, debe trabajar para proteger su código contra estos cambios.

La pregunta es cómo proteger la funcionalidad de sus programas para que sepa que la funcionalidad sigue funcionando después de completar sus revisiones. Mi sugerencia sería garantizar que tenga una cobertura de prueba de unidad decente. De esa manera, cada vez que usted / su revisor / su sucesor cambie el código, pueden estar seguros de que los cambios que han realizado son seguros.

ETA: Acabo de detectar uno de sus comentarios, estoy seguro de que esto es evidente, pero las revisiones de código deben hacerse antes de que el equipo de prueba lo tenga en cuenta. De lo contrario, no están probando el producto final.

Liath
fuente
1
Las pruebas de integración también son extremadamente útiles para detectar roturas.
jpmc26