¿Cómo determinar la efectividad de un proceso de revisión de código?

14

Hemos introducido un proceso de revisión de código dentro de nuestra organización y parece estar funcionando bien. Sin embargo, me gustaría poder medir la efectividad del proceso a lo largo del tiempo, es decir, ¿no estamos encontrando errores porque el código está limpio o las personas simplemente no están detectando errores?

Actualmente, no tenemos un proceso de prueba totalmente automatizado y efectivo. Principalmente empleamos pruebas manuales, por lo que no podemos confiar en los defectos encontrados en esta etapa para garantizar que el proceso de revisión del código esté funcionando.

¿Alguien se ha encontrado con este problema antes o tiene alguna idea sobre lo que funciona bien en las revisiones de códigos de medición?

Johnv2020
fuente
77
Encontrar errores no es el único propósito de las revisiones de código. También son útiles para reforzar las normas de codificación, el entrenamiento cruzado, de polinización cruzada de ideas y tecnologías, etc
Jason
Gracias Jason y entendido, sin embargo, en este caso estoy tratando de encontrar la manera de asegurar que el proceso consigue su objetivo fundamental de la prevención de defectos tan temprano en el proceso dev como sea posible
@ Johnv2020 Sin embargo, ese no es su objetivo principal ... Se pierde completamente el punto de una revisión de código. Esto sería como poner una nueva característica de seguridad en una flota de aviones a reacción, y luego tratar de juzgar su efectividad en función del número de accidentes. Hay demasiadas variables y otros factores a considerar para hacer con precisión cualquier afirmación de que la característica de seguridad mejoró las probabilidades de que no ocurra un choque.
maple_shaft
@maple_shaft: analogía débil. Intentar medir las tasas de error es más como tratar de medir el número de ataúdes utilizados para las personas muertas por accidentes.
S.Lott
1
En todas las revisiones de código a las que he asistido, muchos errores ya se han corregido en pruebas unitarias y de nivel superior. Es decir, el código no está listo para su revisión solo porque se compila.
Pete Wilson el

Respuestas:

7

Hay una serie de métricas que se pueden recopilar de las revisiones de código, algunas incluso se extienden a lo largo del ciclo de vida del proyecto.

La primera métrica que recomendaría recopilar es la efectividad de eliminación de defectos (DRE) . Para cada defecto, identifica en qué fase se introdujo el defecto y en qué fase se eliminó. Las diversas técnicas de detección de defectos que utiliza se evalúan todas simultáneamente, por lo que se aplica igualmente a las revisiones de requisitos, revisiones de diseño, revisiones de códigos, pruebas unitarias , y así. Usted estaría particularmente interesado en la cantidad de defectos atrapados en la fase del código, ya que esto probablemente abarcaría las pruebas de su unidad, así como las revisiones del código. Si muchos defectos de la fase de código están llegando a la fase de prueba de integración o incluso al campo, sabrá que debe evaluar las prácticas posteriores a la codificación.

Varias métricas de la reunión también serían relevantes. Estos incluyen el tiempo de preparación, el tiempo de reunión, las líneas de lectura de códigos, los defectos encontrados en la revisión, etc. Se pueden hacer algunas observaciones a partir de estos datos. Como ejemplo sería si sus revisores pasan una gran cantidad de tiempo leyendo el código en preparación para la revisión, pero encuentran muy pocos problemas. Junto con los datos DRE, puede llegar a la conclusión de que si los defectos se prueban en las pruebas de integración o en el campo, entonces su equipo debe centrarse en sus técnicas de revisión para poder encontrar problemas. Otra nota interesante sería las líneas de código (o alguna otra medida de tamaño) leídas en una reunión en comparación con la hora de la reunión. La investigación ha encontrado que la velocidad de una revisión de código típica es de 150 líneas de código por hora.

Con cualquiera de estas métricas, es importante comprender su impacto en el proceso. Análisis de causa raíz, utilizando técnicas tales como por qué, porque , Cinco porqués , o diagramas de Ishikawa se pueden utilizar para identificar las razones por las revisiones de código (o cualquier otra técnica de mejora de la calidad) son (en) eficaz.

También podría estar interesado en este artículo sobre inspecciones de The Ganssle Group y un artículo de Capers Jones en Crosstalk sobre Defect Potentials y DRE .

Thomas Owens
fuente
2

Si bien en gran medida es cierto que la revisión de código detectaría problemas que están bastante latentes y que las pruebas pueden o no detectarse. Sin embargo, en mi opinión, es posible que tenga un código realmente estable (prácticamente libre de errores) pero aún así escrito de tal manera que sea extremadamente no legible o no del todo mantenible. Por lo tanto, puede ser que la revisión del código NO encuentre errores si no hay problemas reales en el código.

Habiendo dicho eso, realmente preguntaría, ¿por qué querría hacer una revisión de código? La razón simple por la que es importante es que el código debe mejorarse para que sea más legible, mantenible y evolutivo. Muchas personas deberían poder leer códigos más limpios y tener sentido. En ese sentido, el objetivo más simple del proceso de revisión de código es producir código limpio. Entonces, la medida de la eficacia es cuánto más limpio es el código ahora.

Como quería tener una efectividad medible, esto es lo que sugeriría:

  1. Métrica relacionada con la cantidad de retrabajo: el número de veces que el retrabajo se aplica en un mismo módulo / objeto / elemento de trabajo dado es una medida de cuán pobre es ese código en términos de mantenibilidad. Cuando se aplica una revisión de código efectiva, ¿con qué frecuencia podemos reducir la solicitud de reelaboración en el mismo módulo?

  2. Métrica relacionada con la cantidad de cambio en que incurre cada solicitud de cambio. Cuando se produce una solicitud de cambio, un código mal factorizado siempre tendrá un mayor número de módulos afectados. Una medida probablemente indicaría que, después de una revisión del código, ¿hubo alguna reducción de tal extensión de cambio para una solicitud de cambio similar en el pasado?

  3. Métrica relacionada con la velocidad promedio con la que se puede responder una solicitud de cambio. Cuando el código es más limpio, más rápido y mejor es responder a los cambios requeridos. Después de que se limpió el código en el proceso de revisión, vemos que se acelera la respuesta a una solicitud de tamaño similar.

No estoy poniendo unidades exactas de medidas, probablemente puede elaborar medidas más precisas sobre esto desde este enfoque. Puede haber más formalismo de extensión en los enfoques anteriores sobre esto.

Básicamente, mi punto es que en lugar de mirar la cantidad de errores que identifica el proceso de revisión de código; debemos medir la efectividad en términos de si la revisión de código ha sido capaz de hacer que el código sea más limpio, más ágil y más fácil de mantener; por lo tanto, podemos medir esa efectividad si vemos que solicitudes de cambio similares en el futuro se vuelven más eficientes para ser respondidas.

Dipan Mehta
fuente
1
Aunque no es un "error", la falta de legibilidad, mantenibilidad o evolución es un defecto en el código y debe tratarse como tal. No hay ninguna razón por la cual no se puedan rastrear en un rastreador de defectos, junto con errores reales en la funcionalidad. Al hacer esto, también abre la capacidad de rastrear una serie de otras métricas relacionadas con defectos en la fase de codificación.
Thomas Owens
1
Como desarrollador, me gusta ver código limpio. Sin embargo, las revisiones de código son muy costosas. Entonces, como gerente que financia un proyecto, el código limpio realmente no es una razón convincente para agregar 5-10% en costos y tiempo a mi presupuesto de desarrollo. Especialmente cuando (como gerente) mi bono / revisión está vinculado a completar el proyecto actual a tiempo / dentro del presupuesto. Entonces, su opinión de que la razón principal para las revisiones de código es obtener un código limpio haría que cualquier buen gerente diga que el ROI no vale la pena. Puede discutir sobre los retornos a largo plazo, pero para entonces el gerente que entrega a tiempo / dentro del presupuesto habrá sido promovido fuera de ese problema
Dunk
...problema. Mientras que el gerente que promovió las revisiones del código tendrá proyectos de mantenimiento exitosos, pero habrá sido criticado por no completar el proyecto original a tiempo / dentro del presupuesto como el gerente que no lo hizo. OTOH, si las revisiones de código ayudaron a encontrar errores que la falta de revisión no permitió y que le permitieron al gerente de revisión de código completar su proyecto más a tiempo / dentro del presupuesto, entonces es una historia diferente. Esa es la historia que necesita ser vendida. Lo que también significa que el código limpio no puede ser el motivo de las revisiones de código.
Dunk
@Dunk El costo de una revisión de código depende del tipo de revisión de código. Una inspección formal con 3-5 lectores, un moderador y la presencia del autor (5-7 personas en una habitación) es costosa. Una revisión de escritorio que consiste en que otro desarrollador revise el código durante 10-15 minutos también es una revisión del código, pero mucho menos formal y mucho más barata. Incluso la programación de pares puede considerarse una especie de técnica de "revisión de código". La técnica apropiada está determinada por factores que incluyen (entre otros) la importancia crítica del código, la tasa de defectos deseada y la cantidad de tiempo / dinero que se invertirá.
Thomas Owens
@Dunk - Creo que has argumentado para tomar la decisión de "deberíamos revisar el código" de manos del gerente del proyecto y ponerla en manos del gerente que tiene la responsabilidad de la plataforma de software a largo plazo. En términos generales, la OMI, gastar un 5-10% adicional en desarrollo para revisiones de código decentes es una inversión que vale la pena en términos de la longevidad del sistema que se está desarrollando. Pero probablemente no en términos del presupuesto y el cronograma del proyecto actual.
Dawood dice reinstalar a Mónica el