¿Estás preparado para una revisión de código como desarrollador?

10

Estoy buscando algunas ideas aquí.

Leí el artículo ¿Cómo deben realizarse las revisiones de código y las Revisiones de código, cuáles son las ventajas? que fueron muy informativos pero todavía necesito más claridad sobre la pregunta a continuación.

Mi pregunta es,

  1. Al ser el desarrollador objetivo, ¿puede sugerir algunas de las mejores prácticas que un desarrollador puede incorporar antes de que se revise su código?

    • Actualmente practico los siguientes métodos

      • PPT para un flujo lógico
      • Comentarios detallados

Problema: aunque he implementado las prácticas anteriores, no ayudan en la revisión. El problema que enfrenté es que, cuando se hace referencia a cierta lógica, sigo buscando la implementación y el flujo, y se pierde demasiado tiempo en el proceso y me pongo nervioso.

Creo que muchos desarrolladores también estarían pasando por lo que yo estoy pasando.

Karthik Sreenivasan
fuente
2
Solo uno: no hagas tonterías en tu código.
B 18овић
1
BESO: si el código es simple, tu cerebro puede manejarlo todo.
Mouviciel
cuando realiza una revisión de código en su empresa, ¿quién suele dirigir la reunión? usted o una persona que está revisando su trabajo? Pregunto porque la reunión de revisión de código en IMO no es el lugar para pasar el tiempo buscando fragmentos de código, incluso si fue muy rápido en buscar cosas.
DXM
@DXM Gracias por responder. Es mi TL lideraría la reunión.
Karthik Sreenivasan
@Karthik: k, esa parte es buena. Entonces, según su pregunta, no está preguntando cómo escribir y producir código de alta calidad que esté listo para la revisión del código. En cambio, su principal preocupación es esta: "Sigo buscando la implementación y el flujo y se pierde demasiado tiempo". Puedes profundizar sobre eso? ¿por qué estás buscando si TL tiene el código delante de él / ella y está liderando la reunión?
DXM

Respuestas:

8

Entonces, según los detalles que OP proporcionó, parece que la pregunta es "¿cómo aprendo mi propio código para que cuando se me pida encontrar X o explicar Y, pueda responder rápidamente?".

Pocas sugerencias en las que puedo pensar:

  • Al codificar, debe tomarse el tiempo para aprender y comprender su propio código. Esto podría ser lo que su TL intenta comunicarle en pocas palabras. Al ser un TL en el proyecto actual, he realizado muchas revisiones de código en los últimos 11 meses y noto la práctica de algunos desarrolladores de buscar "código de ejemplo" en nuestra propia base de código o en otro lugar (google , etc ...) y copiarlo / pegarlo. Personalmente, no lo soporto porque si bien su código pasa las pruebas unitarias simples, no entienden lo que realmente está haciendo, por lo que nunca se garantiza que no haya t algún caso límite o una condición de falla esperada que podría ocurrir.

  • Como corolario de la declaración anterior, si tiene que copiar / pegar, intente copiar / pegar solo el código que ha escrito previamente y que comprende. Ciertamente está bien "tomar prestada" la idea de otras personas, pero en ese caso, reescriba su código línea por línea porque a medida que lo escriba, obtendrá una mejor comprensión de lo que hace. Si está utilizando API externas, incluso si tiene un ejemplo que usa esa API, tómese unos minutos de todos modos para encontrar una referencia y aprender cómo funciona esa API. No asuma que si funcionó antes, también funcionará en su situación.

  • Lea y aprenda a amar el principio SECO . Muchas veces, lo que está tentado a copiar / pegar podría colocarse en una ubicación común (función separada, clase separada, biblioteca separada ...)

  • Lea y aprenda a amar los principios SÓLIDOS y, mientras lo hace, revise KISS, que ya mencionó Mouviciel. Todos estos principios están orientados a producir código muy conciso, limpio y modular. Si tiene clases grandes y funciones grandes dentro de ellas, claramente será mucho más difícil encontrar cosas y además tratar de explicar qué hace el código. Por otro lado, si sigue (o al menos intenta seguir) SRP y hace que cada clase / función sea responsable de una sola cosa, su código será pequeño y muy legible.

  • Recoge una copia de Clean Code . Muy buen libro. Habla de escribir código que se explica por sí mismo y es fácil de leer, mantener y ampliar. Si practica escribir código que sea fácil de leer, no debería tener problemas para leer su propio código en las revisiones de código. Y esta es la parte divertida, les pedí a las personas que leyeran su propio código o simplemente me dijeran qué representaban las variables y no pudieron responder a pesar de que escribieron ese código (clases nuevas, no heredadas) hace solo una semana . Los buenos nombres son muy útiles.

  • Si después de toda la simplificación y refactorización, todavía tiene una función que debe realizar algún tipo de algoritmo que no es muy aparente, tómese el tiempo y escriba un bloque de comentarios en esa función que explique el algoritmo. No solo será útil cuando tengas que modificar esa función dentro de 2 meses, sino que si te emboscan en una revisión de código, simplemente podrás volver a leer lo que escribiste.

  • Si después de todos los elementos anteriores, ¿todavía se encuentra en problemas? ¿Eres nuevo en el equipo y te pidieron que trabajes con mucho código heredado? En ese caso, podría ser que su TL sea un A $$ y usted podría ser proactivo preguntándole antes de la reunión que sea fácil y no pierda el tiempo de todos los involucrados. Cuando nuevas personas se unen a un equipo, TL debe tener suficiente paciencia porque trabajar en una nueva plataforma, un nuevo producto, nuevas personas, un nuevo entorno requiere mucha concentración de una nueva persona, y esa persona se perderá algunos detalles al principio. Funciona según lo diseñado y su TL debería aceptar eso.

  • Si después de todos los elementos anteriores, todavía siente que tiene revisiones horribles de códigos. Hable con su TL. A veces las personas se sienten mal por la naturaleza de las reuniones de revisión de código cuando, de hecho, TL está perfectamente feliz con usted. Cuando hago revisiones de código, mi objetivo es resaltar lo que se debe cambiar, asegurarme de que entiendes los cambios y seguir adelante. Muchas veces no tengo tiempo para ser cortés y algunas personas se ponen a la defensiva e intentan responder a cada uno de mis comentarios. En esas situaciones, la reunión de revisión de códigos se detiene por completo, por lo que tiendo a interrumpirlos y seguir adelante. En general, después de la reunión, hablaría con los nuevos muchachos para asegurarme de que entiendan el proceso y que no sea nada personal. Después de algunas revisiones de código, la gente generalmente se siente mucho más cómoda.

DXM
fuente
+1 para "no copie y pegue el código que no entiende". Eso es intolerable! También +1 para "hablar con tu TL"
MarkJ
@DXM Su capacidad para comprender los matices más finos de la pregunta fue muy profesional, sin mencionar que su respuesta es muy informativa y descriptiva. Mente = soplado!
Karthik Sreenivasan
@DXM De su referencia "Por otro lado, si sigue (o al menos intenta seguir) SRP y hace que cada clase / función sea responsable de una sola cosa, su código será pequeño y muy legible". ¿Puedes decirme qué significa * SRP ? * Vi otra publicación interesante sobre la claridad del código aquí .
Karthik Sreenivasan
1
@KarthikSreenivasan: en el contexto, es una práctica donde un método o clase es responsable de una cosa. Por ejemplo, un método que agrega números juntos no debería devolver el promedio. La búsqueda simple encontró esto: en.wikipedia.org/wiki/Single_responILITY_principle
Ramhound
10

Las prácticas varían, pero en mi experiencia:

  • No hagas nada especial con el código. Es natural ampliar un poco más su código cuando se entera de que va a ser revisado, y no tiene nada de malo arreglar cosas obvias, como errores ortográficos y demás. Pero no entre y agregue muchos comentarios detallados ni cambie el código solo porque está programado para su revisión.

  • El código se prepara y distribuye a los revisores mucho antes de la revisión. Esto generalmente lo hace un tercero neutral, probablemente el facilitador de revisión de código. Si se imprime, el código debe ser lo suficientemente pequeño como para que las líneas no se envuelvan con demasiada frecuencia, pero lo suficientemente grande como para que todos puedan leerlo fácilmente. Imprímalo en formato horizontal si eso es lo que se necesita.

  • El código debe imprimirse o mostrarse con números de línea . Preferiblemente, el número debe continuar de un archivo al siguiente. Es mucho más fácil referirse a la "línea 3502" que a la "línea 238 de foo.c", y tener los números les permite a todos hablar sobre líneas específicas sin perder el tiempo buscando esas líneas.

  • Definitivamente debería haber un facilitador , por cierto. Su trabajo es evitar que la revisión se atasque por minutos, evitar que se vuelva personal o acalorada, y limitar estrictamente la duración de la revisión.

  • Como autor, debe revisar el código usted mismo antes de la reunión de revisión. Escriba los cambios que sugeriría si este fuera el código de otra persona. Esto activa su memoria de código que podría no haber visto en unos días, y también le ayuda a practicar la observación de su propio código con ojo crítico. Después de haber revisado algunas críticas, tanto como revisor como autor, encontrará que sus propias notas coincidirán más estrechamente con las del resto del grupo.

  • Esté preparado para tomar notas durante la revisión. Esta no debería ser su principal preocupación: alguien más debería registrar los elementos de acción en los que el grupo acuerda para que pueda concentrarse en explicar el código y escuchar los comentarios. Pero habrá momentos en los que obtendrá comentarios valiosos que no son un elemento de acción, y debería corregirlos cuando ocurran.

  • Recuerda que no es personal. Es difícil evitar sentirse (y actuar) a la defensiva durante una revisión. Está bien explicar su código si cree que fue mal entendido, pero más que nada intente simplemente escucharlo.

Caleb
fuente
Agregaría una cosa: "línea 3502" sería una gran marca roja. Tener archivos muy largos es definitivamente algo malo.
B 18овић
2
@VJo: Caleb sugirió que los números de línea continúen entre los archivos, por lo que la línea 3502 es en realidad la línea 238 de foo.c.
Heinzi
No estoy de acuerdo con el número de línea que continúa en todos los archivos. Para mí, eso es confuso e incómodo. Si se encuentran problemas, deben ser rastreados por módulo (clase, archivo, quizás incluso método) de todos modos. Además, durante una revisión de código, no debería revisar un sistema completo, sino un subsistema o incluso un par de clases o archivos, por lo que no debería ser demasiado difícil rastrear dónde están los cambios.
Thomas Owens
1
@ThomasOwens Los números de línea tienen el único propósito de describir fácilmente una ubicación en el código revisado durante la revisión. Es más rápido y menos propenso a errores que usar el "archivo foo.c, línea 123", y el OP pregunta específicamente acerca de pasar menos tiempo buscando código. Acuerde que los problemas deben ser rastreados por archivo. IME, las revisiones tienden a cubrir un grupo de clases, tal vez dos grandes o una docena de pequeñas. Más de 3500 líneas son demasiadas para revisarlas a la vez: solo estaba tratando de señalar que los números continúan de un archivo a otro.
Caleb
Si estás organizado, no debería importar. Para mí, siento que me ralentizaría. He estado involucrado con las revisiones de código y siempre imprimo los archivos, los grapo por clase / archivo, y luego los leo y anoto. Si alguien quiere decirme dónde buscar, quiero un par de nombre de archivo / número de línea; me sería mucho más fácil, especialmente porque mi IDE imprime el nombre del archivo en el encabezado / pie de página en cada página e imprimo el números de línea por archivo.
Thomas Owens
3

Una cosa más para agregar a las otras respuestas: para facilitar la revisión de códigos formales , realice MUCHAS revisiones de códigos informales . Por ejemplo:

"Hola Bob, ¿puedo mostrarte cómo implementé la función foo ()?" "Hola Steve, ¿puedes echar un vistazo a este diagrama de clase y decirme qué piensas?" "Hola Karen, ¿puedes ayudarme a pensar en este problema? Creo que tengo una buena solución, pero podría usar tu ayuda ..."

Haz de esto un hábito regular. Cuando involucra a sus compañeros de trabajo al principio del proceso de diseño, usted:

  • Construir relaciones
  • Obtenga nuevas ideas sobre el problema
  • Mejore su capacidad para explicar el problema / solución en cuestión
  • Ahorre tiempo más tarde en revisiones formales de códigos
Stephen Gross
fuente
+1 para el trabajo en equipo y mejorar su capacidad para explicar el problema. ¡Esa sí que es una gran idea!
Karthik Sreenivasan