¿Cuáles son los procesos comunes de revisión de código y qué se considera malo?

16

Mi empresa recientemente comenzó a hacer revisiones de código formalizadas. El proceso es el siguiente: se envía a un github, solicita una solicitud de extracción, el código es revisado por aproximadamente tres personas, luego, si todo pasa, su código ingresa.

El proceso parece justo, sin embargo, las tres personas que hacen las revisiones del código no parecen ser justas. Noté que cuando pongo mi código para su revisión, obtengo entre 100 y 200 comentarios. El número más alto para mí fue 300 comentarios una vez. Por supuesto, pensaría que se trata de grandes cambios, pero también pueden ser cambios muy pequeños con menos de 50 líneas de código (que incluye pruebas unitarias). Todos los comentarios se consideran "imprescindibles" y sin argumento.

Con eso en mente, mi principal problema aquí es que parece un poco excesivo. Hablé con el grupo y me dijeron básicamente que solo porque tuve tantos años de desarrollo en php no significa que soy un "desarrollador". Por supuesto, esto parece más doloroso que no. También noto que dentro del grupo, no parecen producir tantos comentarios y la mayoría de las veces ignoran o ignoran otros comentarios o sugerencias que rara vez lo aceptan como un punto válido, incluso si algo está roto.

¿Entonces mi pregunta es si esto es justo? O común?

usuario1207047
fuente
3
¿Qué tipo de comentarios estás recibiendo? Parece mucho ¿Está formateando comentarios? ¿Codificación? Es difícil responder sin saber más sobre la naturaleza de los comentarios (y tal vez exactamente qué en su código desencadenó los comentarios).
MetalMikester
1
Hola, no estoy seguro de si es el término correcto, pero en su mayoría son comentarios generales de "mejores prácticas", como renombrar variables, mover funciones, renombrar funciones hacia arriba de 3 a 5 veces, etc. Tenemos phpcs instalados para que el formato sea correcto.
user1207047
También olvidé mencionar en este boleto, en realidad soy un desarrollador de nivel 3 en esta compañía. Tengo la certificación php y he estado yendo genial durante los últimos 8 años de estar empleado aquí. Esto ha sido recientemente que esto comenzó a suceder. Entonces quiero decir que a uno le gustaría pensar que después de 8 años, sabrías algo, ¿verdad?
user1207047
1
"Entonces quiero decir que a uno le gustaría pensar que después de 8 años, sabrías algo, ¿verdad?" - Bueno, te sorprenderías ... Las cosas que veo en el trabajo a veces ...
MetalMikester

Respuestas:

15

Todos los comentarios se consideran "imprescindibles" y sin argumento.

En mi humilde opinión, ese es el problema real, ya que no hay priorización en eso. Cuando recibe 100-300 comentarios, debe haber algunos de ellos que tengan prioridad A (errores reales), algunos de ellos prio B (que probablemente conduzcan a errores más tarde) y algunos de ellos prio C (todo lo demás). Dígale a sus colegas que está dispuesto a respetar todos sus deseos, pero para que los cambios sean efectivos y su tiempo es limitado, insista en una priorización. Luego, comience arreglando el comentario del prio A primero, y si realmente tiene tiempo para más después de eso, puede comenzar con B (si tiene suerte, su jefe entenderá que arreglar el prio B y C no es tan importante, y le dará algunas tareas más importantes en lugar de perder el tiempo).

Doc Brown
fuente
He intentado muchas veces pedir prioridad a los comentarios. Vuelvo algo así como "agradable tener" y "requerido". Resulta que la gran mayoría de ellos son "obligatorios".
user1207047
2
He visto que sucede cuando un desarrollador específico recibe muchos elementos de acción de sus revisiones para evitar que estropeen el código en otras áreas del programa. Pero eso sería para un desarrollador excepcionalmente pobre que se ve "obligado" al proyecto y el líder no puede deshacerse de ellos debido a las decisiones de gestión.
Dunk
2
Ya sabes @Dunk, creo que estás aquí. Su comentario realmente dio en el blanco y acepté esta respuesta ya que no creo que pueda aceptar un comentario. Soy un "extraño" para este grupo y ahora me doy cuenta de por qué el círculo interno está mejorando y las revisiones más rápidas y las de afuera no. Fui "forzado" a este equipo por la gerencia, sí, y estamos "obligados" a trabajar juntos. Esto suena muy razonable y una explicación lógica de por qué es más duro. Eso o realmente apesta a la codificación. La única forma de resolver eso es ir a otro grupo / empresa y ver por mí mismo.
user1207047
44
@ user1207047: No debe aceptar una respuesta porque le gusta uno de los comentarios debajo, ya que va en contra de los estándares y el propósito del sitio (creo que estoy sintiendo un patrón aquí). Hay una funcionalidad de comentarios positivos para eso.
webbiedave
10

Las revisiones de código pueden ser un proceso divisivo.

Sin embargo, estás en un cruce importante. Haga un análisis reflexivo sobre su revisión. ¿Están identificando problemas de selección de liendres o resaltando fallas serias en su estilo y lógica?

Si es lo primero, recomendaría trabajar hacia una resolución (nuevo trabajo o nuevos procesos de revisión de código).

Si es lo último, le recomiendo leer mucho el código y estudiar para intentar que su código sea de calidad profesional.

JoeG
fuente
Hola, buenos pensamientos. De lo que puedo deducir, algunos de ellos son, de hecho, un análisis reflexivo, pero la mayoría de ellos parecen ser muy selectivos, como las funciones de movimiento o las funciones de cambio de nombre. El problema es que cuando explican su proceso de pensamiento, tiene sentido, pero entre ellos no están haciendo lo mismo y están cometiendo los mismos errores que yo.
user1207047
Aún más, la revisión del código es tan profunda que olvido lo que estaba haciendo y creo más errores arreglando la aplicación debido a los cientos de comentarios excesivos. Por ejemplo, una vez me dijeron que volviera a escribir una gran parte del código. Antes de eso, el código era correcto y funcional. Después de las revisiones del código y casi 150 comentarios, la función original y la corrección desaparecieron y se insertaron toneladas de errores. Cuando me di cuenta de esto y los arreglé, básicamente me dijeron: "Sí, nuestro proceso de revisión de código te convierte en un programador increíble porque ahora vas a volver a arreglarlo y es más fácil de hacer".
user1207047
8
@usuario: el nombre de los métodos / funciones es importante, no es necesariamente una trampa. Si hace un mal trabajo al nombrar, eso puede ser molesto para su equipo. Si no puede encontrar un nombre claro, entonces probablemente no sea una buena función. Parece que eres el "nuevo" chico y los demás aparentemente tienen un método para su locura que probablemente hayan discutido muchas veces antes. Por lo tanto, la razón de menos comentarios. Te sugiero que aprendas lo que quieren y trates de conformarte en lugar de toparte las cabezas. Gane un poco de respeto, entonces podrá ofrecer ideas alternativas que se encontrarán con una mente abierta.
Dunk
1
@usuario: Parece que necesita estándares de codificación / diseño.
Dunk
2
@usuario: Todo lo que puedes hacer es intentar trabajar dentro del sistema y demostrar que eres un jugador de equipo. Si has hecho eso. entonces, o su percepción no es correcta, está tratando con personas irracionales, perciben que su actitud es contenciosa O simplemente es una política de oficina desagradable. Los únicos sobre los que tienes control son tu actitud / percepción. Si está convencido de que no está de alguna manera instigando el problema, entonces no sé por qué se quedaría. Ve a buscar un lugar que sea agradable para trabajar porque la gente se lleva bien. Si los mismos problemas ocurren en otra parte, mírese en el espejo
Dunk
5

Por sus comentarios, parece que sus colegas están utilizando el proceso de revisión del código para acordar una metodología o pulir el código. Acabo de comenzar a hacer revisiones de código como usted y me doy cuenta de que a veces discutimos mucho sobre cosas que son solo enfoques de implementación o mejoras. Esto no está nada mal en la medida en que sea razonable (300 comentarios me parecen demasiados, eso debe parecer un hilo de reddit)

Tal vez necesite acordar algunas decisiones arquitectónicas sobre el código antes de comenzar a implementarlo o tal vez simplemente esté de acuerdo sobre las convenciones de nombres, patrones y buenas prácticas para que todos sepan lo que se considera "buen código".

Si cumple con los estándares de su código como dice y el código funciona según lo previsto, no debería haber tantos comentarios, por lo que están utilizando su código como foro o lo están controlando, ya que parece que está señalando.

Intentaría ser crítico conmigo mismo, trataría de participar en las conversaciones y ver la razón de todos estos comentarios y tal vez hablar con ellos al respecto de una manera constructiva para ver por qué están tan descontentos con su código y si puede código de una manera que hace felices a todos y el trabajo no se atasca en la revisión de código.

Acabo de leer sus últimos comentarios, a veces, cuando no está de acuerdo con el código, puede revisarlo cientos de veces y proponer cambios en todas partes que no lo hagan feliz porque la verdadera razón es que habría tomado una decisión arquitectónica diferente. y simplemente no le gusta ese código, no importa cuántas veces lo refactorice. Como dije anteriormente, tal vez necesite acordar el enfoque del código de antemano para que cuando lo escriba sepa lo que esperan de él y, por lo tanto, su código sería más razonable para ellos.

Juanmi Rodriguez
fuente
1
El 100% está de acuerdo con el último párrafo: debe analizar el diseño previsto antes de implementarlo. Al menos, entonces estás comenzando con un marco supuestamente aceptable. Luego, después de la implementación, podría valer la pena otra oportunidad para discutir el diseño final (no el código). Luego modifique el código para que coincida con el resultado de la discusión final del diseño. Si después de un par de intentos en eso y no mejora las cosas, entonces debería ser obvio que la posición es una mala opción y debe comenzar a buscar en otro lado.
Dunk
4

Por lo que dices, me parece que podrían tener un sesgo en contra de los desarrolladores de php, y por lo tanto están tratando de encontrar cada cosa que esté mal con tu código para probar su punto.

Con respecto a la revisión del código en sí, creo, como ya dijiste, que una cantidad tan grande de comentarios menores es menos útil que algunas críticas buenas y válidas. Y aunque tengo una experiencia limitada con respecto a las revisiones de código, la siguiente técnica ha funcionado bien para los equipos en los que trabajé en el pasado.

  • En primer lugar, se debe usar un analizador de código estático para identificar la mayoría de los problemas antes de que se realice la revisión del código. Por ejemplo: ejecutar su código a través de Sonar, Lint o cualquier otro analizador de código bueno debería ayudarlo a deshacerse de la mayoría de los problemas menores. Especialmente porque sus revisores pueden definir perfiles personalizados para garantizar todo, desde la colocación de corchetes, espacios en blanco, comentarios, nombres de variables adecuados y mucho más ...
  • En segundo lugar, parece funcionar bien si divide los comentarios en diferentes categorías. Por ejemplo, dos categorías en las que un grupo incluye cosas pequeñas que debe tomar en cuenta y aplicar en el futuro. Y un segundo grupo para aquellos comentarios que requieren una modificación inmediata de su código que requeriría otra confirmación y posterior revisión. Por supuesto, el número de comentarios en este último grupo debería ser menor.

Además, tengo que decir que mis primeras revisiones de código real también contenían más comentarios de los que originalmente esperaba. Sin embargo, nunca consideré esto como algo malo. Si continúa aprendiendo de sus comentarios² y está dispuesto a aplicar esas técnicas / mejores prácticas recién aprendidas en sus futuras presentaciones de código, los comentarios deberían ser menos. Seguramente fue el caso para mí ;-)

¹ En mi experiencia, esto sucede mucho, ya que muchos programadores afirman que php es el lenguaje de programación más malvado, ya que los programadores más inexpertos lo usan. ¡Me distancio de esta afirmación porque creo que un excelente software se puede escribir en cualquier idioma!

² Suponiendo que aunque los comentarios son excesivos, hay algo de valor en ellos

Jérôme
fuente
Estoy totalmente de acuerdo con lo que dijiste. Es una experiencia de aprendizaje y uno debería aprender. Sin embargo, esto ha estado sucediendo durante el tiempo suficiente hasta un punto en el que no parece que ese sea el caso. O me estoy volviendo más tonto o algo más está sucediendo. Supongo que si cada solicitud de extracción genera cientos de comentarios, o estás muy equivocado todo el tiempo, o hay algo más involucrado aquí que no coincide con lo que dicen que están tratando de hacer. O tienen que decir: "Está bien, detengámonos y aprendamos" o vayan al grano. Al menos así es como lo veo.
user1207047
1
@ user1207047 Después de leer sus respuestas a las otras respuestas, me parece que ya sabe la respuesta a su propia pregunta ... :-) Parece bastante claro que hay algo sospechoso con sus revisiones de código. ¿Quizás es hora de hablar con un superior o solicitar una transferencia a otro equipo?
Jérôme
3

¿Es común que alguien obtenga más de 100 comentarios en sus revisiones de código de forma rutinaria? Yo diría que no. Es común que las personas cuya calidad de código "deja mucho que desear" reciban muchos comentarios, absolutamente.

Sin embargo, también depende de las "reglas" del proceso de revisión del código. TODOS tienen sus propias ideas sobre cómo se debería haber hecho algo. Si su proceso de revisión de código permite que los comentarios tengan la forma "Debería hacerlo de esta manera en lugar de hacerlo de esa manera", entonces es probable que reciba MUCHOS comentarios incluso para el código adecuado. Si su proceso está destinado a encontrar "defectos", entonces el número de comentarios debería ser mucho menor.

En mi experiencia, las revisiones que permiten "sugerencias" de métodos alternativos son una pérdida de tiempo. Esas "sugerencias" deben manejarse una a una fuera del proceso de revisión. Las revisiones de defectos son más útiles ya que hacen que las personas se centren en los errores en lugar de "¿por qué no lo hiciste como yo lo hubiera hecho?". También es más útil porque no se puede negar un error si alguien encuentra uno. Por lo tanto, no hay sentimientos heridos, sino una probable gratitud en su lugar.

ACTUALIZACIÓN: Con todo lo dicho, algunos códigos son simplemente malos, incluso si están libres de defectos. En ese caso, el comentario de revisión debe ser un solo comentario que diga algo así. "Este código necesita ser limpiado. Por favor posponga la revisión hasta que el código sea discutido con [su nombre aquí]". En ese caso, la revisión adicional del código debería detenerse hasta que se rectifique el comentario.

ACTUALIZACIÓN2: @Usuario: ¿Discute su código / diseño con uno de ellos mientras lo desarrolla para que pueda implementar lo que está buscando antes de llegar lejos a su manera? ¿Está cambiando algo acerca de cómo está desarrollando el código en función de sus sugerencias o sigue pensando que su camino está bien? ¿Estás aprendiendo algo de sus comentarios?

Cuando soy el líder de un proyecto, mi trabajo es ser responsable de TODOS los productos de trabajo. Si apruebo un producto de trabajo, estoy afirmando que el producto es aceptable. Quiero tener una reputación de construir productos de calidad. Por lo tanto, tengo expectativas y no aceptaré menos que satisfactorio. Al mismo tiempo, trato de enseñar y explicar las razones de mis preferencias. Es posible que esas preferencias no siempre sean ideales (particularmente a los ojos de los demás), pero la mayoría de esas preferencias provienen de la experiencia. Suele ser una reacción para evitar repetir las malas. Por lo tanto, hay algunos de mis "fanáticos" personales que son necesarios para obtener mi aprobación, independientemente del rechazo.

Por otro lado, debe conocer las expectativas necesarias para obtener la aprobación de sus productos de trabajo. Puede estar en desacuerdo, pero dado que no parece tener la autoridad para descartar, aprenda lo que se espera. Dudo que el equipo esté tratando de hacerte fracasar. Como eso los hace quedar mal también. En ese sentido, solo demuestre que está ansioso por aprender (incluso si no lo está), tome lo que dicen y haga todo lo posible para adaptarse a sus preferencias y es probable que los vea retroceder un poco. Tal vez encuentre el que al menos pueda tolerar y vea si van a tomar un poco de la mano para enseñarle sus formas. Quién sabe, en el proceso puedes aprender algo que realmente podría llevar tus habilidades al siguiente nivel.

Remojar
fuente
De acuerdo, y no escucharías ninguna discusión mía por esos motivos. Sin embargo, el proceso no es así. Dicen que sí, y en la mayoría de los casos parece que solo las personas fuera de estos tres grupos están bajo un mayor escrutinio que ellos. Afirman que otros son malos desarrolladores pero son los únicos "desarrolladores" en el equipo.
user1207047
Sin embargo, una cosa es que si no puede entender el código, o el desarrollador reinventó la rueda en lugar de usar un método existente, o si su método tiene una complejidad ciclomática de 50, entonces definitivamente es un caso para un comentario, incluso si No hay error. El código y la duplicación difíciles de leer son una responsabilidad, incluso si no es un error. Es por eso que nunca dudo en señalar que una variable está mal nombrada, o que la solución introduce un acoplamiento temporal que dificulta la comprensión del código. La deuda técnica debe ser gestionada.
Laurent Bourgault-Roy
1
@Laurent: Sé lo que estás diciendo y, en muchos sentidos, estoy de acuerdo. Sin embargo, eso abre una lata de gusanos que tiende a bola de nieve. Si su empresa tiene los fondos y el cronograma para permitir que las revisiones de códigos lleven a cabo una parte significativa del esfuerzo, entonces está bien (como proyectos de equipos médicos / aviones). Pero la mayoría de los proyectos no tienen el lujo. Por lo tanto, limitar el alcance de los comentarios de revisión es muy útil. Para compensar sus inquietudes, el trabajo del líder es supervisar a los desarrolladores y su trabajo. Deben saber a quién monitorear más de cerca y corregir esos problemas antes de revisar el código.
Dunk
Tendremos que aceptar estar en desacuerdo aquí :). La deuda técnica es algo que tendrá que pagar tarde o temprano (y cuanto más espere, más intereses pagará). No ahorrará ningún centavo, ya que retrasará la limpieza. Si no se toma el tiempo de limpiarlo ahora, entonces el próximo cambio puede costarle el doble de tiempo porque tendrá dificultades para comprender el código. Trabajo con una base de código de 8 años y el desarrollo se ha detenido por problemas de calidad. Ahora tenemos una regla oficial de "la calidad interna no es negociable". ¡Puedo dar fe de que nos salvó!
Laurent Bourgault-Roy
Releí tu comentario y me di cuenta de que quizás tenemos una perspectiva diferente debido a nuestra metodología. Trabajo en un equipo ágil donde no hay liderazgo. Dado que todos somos iguales y todos responsables de la calidad del código, todos debemos monitorearnos mutuamente. Y la revisión del código se realiza cada 3-4 horas antes de cada integración. Por lo tanto, la limpieza de una gran solicitud de extracción es de unas pocas horas si somos muy nazis o si hicimos un refactor que impactó una parte vieja y defectuosa del software. Por eso veo el comentario de calidad de código como un "no biggy".
Laurent Bourgault-Roy
2

Algunas diferencias importantes con el proceso de inspección de nuestro equipo:

  • La base de una inspección es una lista de verificación, compilada por todo el equipo.
  • El enfoque es defectos (presente y futuro), no estilo por el estilo.
  • los 3 inspectores (incluido el autor) se sientan juntos para revisar los comentarios. Solo quedan comentarios con voto mayoritario.
Kris Van Bael
fuente
2

Para 50 comentarios LOC 300 parece ser un poco excesivo y - wow - 3 revisores por cada solicitud de extracción? Su empresa debe tener muchos recursos.

Según mi experiencia para un proceso útil de revisión de código, debe haber algunas reglas y / o pautas:

  • Prioridad de comentarios
  • Clasificación de comentarios (error, estilo de código, etc.)
  • Arquitectura / diseño acordado a seguir
  • Estilo de código acordado

Si los revisores no le dan prioridad, pregunte a su gerente de proyecto / líder de equipo responsable; La persona responsable de los costos debe tener una opinión sobre las prioridades.

Si tiene una arquitectura definida, una comprensión común de los patrones de diseño que utiliza en su proyecto y un estilo de código acordado, entonces los comentarios de revisión deben ser solo sobre "problemas reales" como problemas de seguridad, errores no intencionales, casos de esquina no cubiertos por el especificado arquitectura, etc.

Si su equipo de desarrollo no ha acordado los "problemas de sabor" (p. Ej., Si una variable miembro comienza con "m_"), cada revisor lo obligará a seguir su estilo, lo cual es una pérdida de tiempo / dinero.

Simón
fuente
1

Esto realmente me suena como un problema de comunicación. Tiene la expectativa de que su código no sea lo suficientemente malo como para merecer 300 comentarios. Los revisores parecen pensar que necesita muchos comentarios. Discutir de un lado a otro de forma asincrónica va a perder mucho tiempo. Diablos, escribir 300 comentarios es una pérdida de tiempo tremenda. Si no se trata de todos los defectos, como nuevo miembro del equipo es posible que aún no conozca el estilo del equipo. Eso es normal y algo que se debe aprender para acelerar todo el equipo.

Mi sugerencia es ahorrar tiempo. Acelera la retroalimentación. Me gustaría:

  • Haga más revisiones provisionales para evitar cometer el mismo error y generar el mismo comentario 50 veces
  • Siéntese con un revisor mientras revisa su código para poder hablar sobre los problemas a medida que surjan, evitando así documentar 300 "problemas" que se eliminarán en la próxima confirmación
  • Emparéjese con uno de estos desarrolladores "reales" durante algún tiempo mientras escribe el código para ver qué harían de manera diferente

La gente puede argumentar en contra del emparejamiento porque "tomará más tiempo", pero eso obviamente no es un problema aquí.

Steve Jackson
fuente