La revisión de código (a veces denominada revisión por pares ) es una actividad de aseguramiento de la calidad del software en la que una o varias personas verifican un programa principalmente viendo y leyendo partes de su código fuente , y lo hacen después de la implementación o como una interrupción de la implementación. Al menos una de las personas no debe ser el autor del código. Las personas que realizan la verificación, excluido el autor, se denominan "revisores". [1] [2]
Aunque el descubrimiento directo de problemas de calidad es a menudo el objetivo principal, [3] las revisiones de código generalmente se realizan para alcanzar una combinación de objetivos: [4] [5]
- Mejor calidad del código : mejore la calidad y el mantenimiento del código interno (legibilidad, uniformidad, comprensibilidad, etc.)
- Encontrar defectos : mejorar la calidad en aspectos externos, especialmente la corrección, pero también encontrar problemas de rendimiento, vulnerabilidades de seguridad, malware inyectado, ...
- Transferencia de aprendizaje / conocimiento : ayuda en la transferencia de conocimientos sobre la base de código, enfoques de soluciones, expectativas con respecto a la calidad, etc .; tanto a los revisores como al autor
- Aumentar el sentido de responsabilidad mutua : aumentar el sentido de propiedad colectiva y solidaridad del código.
- Encontrar mejores soluciones : genere ideas para nuevas y mejores soluciones e ideas que trasciendan el código específico en cuestión.
- Cumplimiento de las directrices de garantía de calidad, normas ISO / IEC : las revisiones del código son obligatorias en algunos contextos, por ejemplo, software de tráfico aéreo, software crítico para la seguridad
La definición antes mencionada de revisión de código la delimita con técnicas de aseguramiento de calidad de software vecinas pero separadas : en el análisis de código estático, la verificación principal la realiza un programa automatizado, en las autocomprobaciones solo el autor verifica el código, al probar la ejecución del código es una parte integral, y la programación de pares se realiza continuamente durante la implementación y no como un paso separado. [1]
Tipos de revisión
Existen muchas variaciones de los procesos de revisión de código, algunas de las cuales se detallarán a continuación. Los tipos de revisión adicionales son parte de IEEE 1028
IEEE 1028-2008 enumera los siguientes tipos de revisión: [6]
- Revisiones de gestión
- Revisiones técnicas
- Inspecciones
- Recorridos
- Auditorias
Inspección (formal)
El históricamente primer proceso de revisión de código que fue estudiado y descrito en detalle fue llamado "Inspección" por su inventor Michael Fagan . [7] Esta inspección de Fagan es un proceso formal que implica una ejecución cuidadosa y detallada con múltiples participantes y múltiples fases. Las revisiones formales de código son el método tradicional de revisión, en el que los desarrolladores de software asisten a una serie de reuniones y revisan el código línea por línea, generalmente utilizando copias impresas del material. Las inspecciones formales son extremadamente minuciosas y se ha demostrado que son efectivas para encontrar defectos en el código bajo revisión. [7]
Revisión periódica de código basada en cambios (recorridos)
En los últimos años, [ ¿cuándo? ] muchos equipos de la industria han introducido un tipo de revisión de código más ligero. [8] [3] Su característica principal es que el alcance de cada revisión se basa en los cambios en la base de código realizados en un ticket, historia de usuario, confirmación o alguna otra unidad de trabajo. Además, existen reglas o convenciones que integran la tarea de revisión en el proceso de desarrollo (por ejemplo, "todos los tickets deben revisarse"), en lugar de planificar explícitamente cada revisión. Este proceso de revisión se denomina "revisión de código regular basada en cambios". [1] Hay muchas variaciones de este proceso básico. Una encuesta entre 240 equipos de desarrollo de 2017 encontró que el 90% de los equipos usan un proceso de revisión que se basa en cambios (si es que usan revisiones), y el 60% usa revisiones de código regulares basadas en cambios. [3] Además, la mayoría de las grandes corporaciones de software como Microsoft, [9] Google, [10] y Facebook siguen un proceso de revisión de código basado en cambios.
Eficiencia y efectividad de las revisiones
El análisis continuo de Capers Jones de más de 12,000 proyectos de desarrollo de software mostró que la tasa de descubrimiento de defectos latentes de la inspección formal está en el rango del 60-65%. Para la inspección informal, la cifra es inferior al 50%. La tasa de descubrimiento de defectos latentes para la mayoría de las formas de prueba es de alrededor del 30%. [11] [12] Un estudio de caso de revisión de código publicado en el libro Best Kept Secrets of Peer Code Review encontró que las revisiones ligeras pueden descubrir tantos errores como revisiones formales, pero eran más rápidas y rentables [13] en contradicción con la estudio realizado por Capers Jones [11]
También se han estudiado los tipos de defectos detectados en las revisiones de código. Los estudios empíricos proporcionaron evidencia de que hasta el 75% de los defectos de revisión de código afectan la capacidad de evolución / mantenimiento del software en lugar de la funcionalidad, [14] [15] [4] [16] haciendo que las revisiones de código sean una excelente herramienta para las empresas de software con largos ciclos de vida de productos o sistemas . [17] Esto también significa que menos del 15% de los problemas discutidos en las revisiones de código están relacionados con errores. [18]
Pautas
Se encontró que la efectividad de la revisión del código depende de la velocidad de revisión. Las tasas de revisión de código deben estar entre 200 y 400 líneas de código por hora. [19] [20] [21] [22] Inspeccionar y revisar más de unos pocos cientos de líneas de código por hora para software crítico (como software incrustado crítico para la seguridad ) puede ser demasiado rápido para encontrar errores. [19] [23]
Herramientas de apoyo
El software de análisis de código estático reduce la tarea de revisar grandes porciones de código en el desarrollador al verificar sistemáticamente el código fuente en busca de vulnerabilidades y tipos de defectos conocidos. [24] Un estudio de 2012 realizado por VDC Research informa que el 17,6% de los ingenieros de software integrado encuestados actualmente utilizan herramientas automatizadas para respaldar la revisión de código entre pares y el 23,7% espera utilizarlas en un plazo de 2 años. [25]
Ver también
- Revisión de software
- Calidad del software
- Mejores prácticas de codificación
- Lista de filosofías de desarrollo de software
enlaces externos
- Cinco antipatrones de revisión de código ( Revista Java, Lo mejor de 2020 )
Referencias
- ^ a b c Baum, Tobías; Liskin, Olga; Niklas, Kai; Schneider, Kurt (2016). "Un esquema de clasificación por facetas para procesos de revisión de códigos industriales basados en cambios". 2016 IEEE International Conference on Software Quality, Reliability and Security (QRS) . págs. 74–85. doi : 10.1109 / QRS.2016.19 . ISBN 978-1-5090-4127-5. S2CID 9569007 .
- ^ Kolawa, Adam; Huizinga, Dorota (2007). Prevención automatizada de defectos: mejores prácticas en la gestión de software . Prensa de la Sociedad de Computación Wiley-IEEE. pag. 260. ISBN 978-0-470-04212-0.
- ^ a b c Baum, Tobías; Leßmann, Hendrik; Schneider, Kurt (2017). La elección del proceso de revisión del código: una encuesta sobre el estado de la práctica . Mejora del proceso de software centrado en el producto: 18a Conferencia Internacional, PROFES 2017, Actas . Apuntes de conferencias en Ciencias de la Computación. 10611 . págs. 111-127. doi : 10.1007 / 978-3-319-69926-4_9 . ISBN 978-3-319-69925-7.
- ^ a b Bacchelli, A; Bird, C (mayo de 2013). "Expectativas, resultados y desafíos de la revisión del código moderno" (PDF) . Actas de la 35a Conferencia Internacional IEEE / ACM sobre Ingeniería de Software (ICSE 2013) . Consultado el 2 de septiembre de 2015 .
- ^ Baum, Tobías; Liskin, Olga; Niklas, Kai; Schneider, Kurt (2016). "Factores que influyen en los procesos de revisión del código en la industria". Actas del 24o Simposio Internacional ACM SIGSOFT sobre Fundamentos de la Ingeniería de Software 2016 - FSE 2016 . págs. 85–96. doi : 10.1145 / 2950290.2950323 . ISBN 9781450342186. S2CID 15467294 .
- ^ "Estándar IEEE para revisiones y auditorías de software" . doi : 10.1109 / ieeestd.2008.4601584 . Cite journal requiere
|journal=
( ayuda ) - ^ a b Fagan, Michael (1976). "Inspecciones de diseño y código para reducir errores en el desarrollo de programas". Revista de sistemas de IBM . 15 (3): 182–211. doi : 10.1147 / sj.153.0182 .
- ^ Rigby, Peter; Bird, Christian (2013). Prácticas convergentes de revisión por pares de software contemporáneo . Actas de la novena reunión conjunta de 2013 sobre los fundamentos de la ingeniería de software . pag. 202. CiteSeerX 10.1.1.641.1046 . doi : 10.1145 / 2491411.2491444 . ISBN 9781450322379. S2CID 11163811 .
- ^ MacLeod, Laura; Greiler, Michaela; Piso, Margaret-Anne; Bird, Christian; Czerwonka, Jacek (2017). "Revisión de código en las trincheras: desafíos y mejores prácticas" (PDF) . Software IEEE . 35 (4): 34. doi : 10.1109 / MS.2017.265100500 . S2CID 49651487 . Consultado el 28 de noviembre de 2020 .
- ^ Sadowski, Caitlin; Söderberg, Emma; Iglesia, Lucas; Sipko, Michal; Baachelli, Alberto (2018). "Revisión de código moderno: un estudio de caso en Google" . Conferencia internacional sobre ingeniería de software, ingeniería de software en la práctica Track : 181. doi : 10.1145 / 3183519.3183525 . S2CID 49217999 .
- ^ a b Jones, Capers (junio de 2008). "Medición de los potenciales de defectos y eficiencia de eliminación de defectos" (PDF) . Crosstalk, The Journal of Defense Software Engineering. Archivado desde el original (PDF) el 2012-08-06 . Consultado el 5 de octubre de 2010 .
- ^ Jones, alcaparras; Ebert, Christof (abril de 2009). "Software integrado: hechos, cifras y futuro". Computadora . 42 (4): 42–52. doi : 10.1109 / MC.2009.118 . S2CID 14008049 .
- ^ Jason Cohen (2006). Los secretos mejor guardados de la revisión del código por pares (enfoque moderno. Consejos prácticos) . ISBN de Smart Bear Inc. 978-1-59916-067-2.
- ^ Czerwonka, Jacek; Greiler, Michaela; Tilford, Jack (2015). "Las revisiones de código no encuentran errores. Cómo las mejores prácticas de revisión de código actual nos ralentizan" (PDF) . ICSE '15: Actas de la 37ª Conferencia Internacional de Ingeniería de Software . 2 : 27-28. doi : 10.1109 / ICSE.2015.131 . ISBN 978-1-4799-1934-5. S2CID 29074469 . Consultado el 28 de noviembre de 2020 .
- ^ Mantyla, MV; Lassenius, C. (2009). "¿Qué tipos de defectos se descubren realmente en las revisiones de código?" (PDF) . Transacciones IEEE sobre ingeniería de software . 35 (3): 430–448. CiteSeerX 10.1.1.188.5757 . doi : 10.1109 / TSE.2008.71 . S2CID 17570489 . Consultado el 21 de marzo de 2012 .
- ^ Beller, M; Bacchelli, A; Zaidman, A; Juergens, E (mayo de 2014). "Revisiones de código moderno en proyectos de código abierto: ¿qué problemas solucionan?" (PDF) . Actas de la XI Conferencia de trabajo sobre repositorios de software de minería (MSR 2014) . Consultado el 2 de septiembre de 2015 .
- ^ Siy, Harvey; Votta, Lawrence (1 de diciembre de 2004). "¿Tiene valor la inspección del código moderno?" (PDF) . unomaha.edu . Archivado desde el original (PDF) el 28 de abril de 2015 . Consultado el 17 de febrero de 2015 .
- ^ Bosu, Amiangshu; Greiler, Michaela; Bird, Chris (mayo de 2015). "Características de las revisiones de códigos útiles: un estudio empírico en Microsoft" (PDF) . 2015 IEEE / ACM 12th Working Conference on Mining Software Repositories . Consultado el 28 de noviembre de 2020 .
- ^ a b Kemerer, CF; Paulk, MC (17 de abril de 2009). "El impacto de las revisiones de diseño y código en la calidad del software: un estudio empírico basado en datos de PSP". Transacciones IEEE sobre ingeniería de software . 35 (4): 534–550. doi : 10.1109 / TSE.2009.27 . S2CID 14432409 .
- ^ "Métricas de revisión de código" . Abra el proyecto de seguridad de aplicaciones web . Abra el proyecto de seguridad de aplicaciones web. Archivado desde el original el 9 de octubre de 2015 . Consultado el 9 de octubre de 2015 .
- ^ "Mejores prácticas para la revisión del código de pares" . Smart Bear . Software Smart Bear. Archivado desde el original el 9 de octubre de 2015 . Consultado el 9 de octubre de 2015 .
- ^ Bisant, David B. (octubre de 1989). "Un método de inspección de dos personas para mejorar la productividad de la programación" . Transacciones IEEE sobre ingeniería de software . 15 (10): 1294-1304. doi : 10.1109 / TSE.1989.559782 . S2CID 14921429 . Consultado el 9 de octubre de 2015 .
- ^ Ganssle, Jack (febrero de 2010). "Una guía para las inspecciones de códigos" (PDF) . El grupo Ganssle . Consultado el 5 de octubre de 2010 .
- ^ Balachandran, Vipin (2013). "Reducir el esfuerzo humano y mejorar la calidad en las revisiones de código de pares mediante el análisis estático automático y la recomendación del revisor". 2013 35 ° Congreso Internacional de Ingeniería de Software (ICSE) . págs. 931–940. doi : 10.1109 / ICSE.2013.6606642 . ISBN 978-1-4673-3076-3. S2CID 15823436 .
- ^ VDC Research (1 de febrero de 2012). "Prevención automatizada de defectos para la calidad del software integrado" . Investigación de VDC . Consultado el 10 de abril de 2012 .