Actividad en la que una o más personas verifican el código de un programa.
La revisión de código (a veces denominada revisión por pares ) es una actividad de control de calidad del software en la que una o más personas verifican un programa , principalmente mediante la visualización y lectura de partes de su código fuente , ya sea después de la implementación o como una interrupción de la implementación. Al menos una de las personas no debe haber sido autor del código. Las personas que realizan la verificación, excluyendo al autor, se denominan "revisores". [1] [2]
Aunque el descubrimiento directo de problemas de calidad suele ser el objetivo principal, [3] las revisiones de código se realizan normalmente para alcanzar una combinación de objetivos: [4] [5]
Mejor calidad del código : mejore la calidad y la capacidad de mantenimiento del código interno (como la legibilidad, la uniformidad y la comprensibilidad)
Detección de defectos : mejorar la calidad en lo que respecta a los aspectos externos, especialmente la corrección, pero también detectar problemas como problemas de rendimiento, vulnerabilidades de seguridad y malware inyectado.
Transferencia de aprendizaje/conocimiento : ayudar a transferir el conocimiento de la base de código, los enfoques de solución y las expectativas de calidad, tanto a los revisores como al autor.
Encontrar mejores soluciones : generar ideas para soluciones nuevas y mejores e ideas que trasciendan el código específico en cuestión.
Cumplimiento de las pautas de control de calidad y estándares ISO/IEC : las revisiones de códigos son obligatorias en algunos contextos, como el software de tráfico aéreo y el software crítico para la seguridad .
Esta definición de revisión de código la distingue de las técnicas de aseguramiento de la calidad del software relacionadas , como el análisis estático de código , las autoverificaciones , las pruebas y la programación en pares . En el análisis estático de código, la verificación principal la realiza un programa automatizado, en las autoverificaciones solo el autor verifica el código, en las pruebas la ejecución del código es una parte integral y la programación en pares se realiza de forma continua 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 detallan a continuación. Otros tipos de revisión forman parte de la norma IEEE 1028.
IEEE 1028-2008 enumera los siguientes tipos de revisión: [6]
Revisiones de gestión
Reseñas técnicas
Inspecciones
Tutoriales
Auditorias
Inspección (formal)
Históricamente, el primer proceso de revisión de código que se estudió y describió 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 de código formales 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 han demostrado ser efectivas para encontrar defectos en el código bajo revisión. [7]
Revisión periódica del 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 en el 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. [8] [3] Además, existen reglas o convenciones que integran la tarea de revisión en el proceso de desarrollo (por ejemplo, "cada ticket debe revisarse"), comúnmente como parte de una solicitud de extracción , 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 utilizan un proceso de revisión que se basa en cambios (si es que utilizan revisiones) y el 60% utiliza una revisión de código regular basada 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 eficacia de las revisiones
El análisis en curso de Capers Jones de más de 12.000 proyectos de desarrollo de software mostró que la tasa de descubrimiento de defectos latentes en la inspección formal se encuentra en el rango del 60-65%. En el caso de la inspección informal, la cifra es inferior al 50%. La tasa de descubrimiento de defectos latentes en 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 contradijo el estudio de Capers Jones, [11] al descubrir que las revisiones ligeras pueden descubrir tantos errores como las revisiones formales, pero eran más rápidas y rentables. [13]
Los estudios han demostrado que hasta el 75% de los comentarios de revisión de código afectan la capacidad de evolución y mantenimiento del software en lugar de su funcionalidad, [14] [15] [4] [16] lo que sugiere que las revisiones de código son una herramienta excelente para las empresas de software con ciclos de vida de productos o sistemas largos. [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 ha descubierto que la eficacia de la revisión de código depende de la velocidad de la 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 integrado 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 fragmentos de código para el desarrollador al verificar sistemáticamente el código fuente en busca de vulnerabilidades conocidas y tipos de defectos. [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 por pares y el 23,7% espera usarlas dentro de dos años. [25]
Cinco antipatrones de la revisión de código (Java Magazine, Best of 2020)
Referencias
^ abc Baum, Tobias; Liskin, Olga; Niklas, Kai; Schneider, Kurt (2016). "Un esquema de clasificación por facetas para procesos de revisión de código industrial basados en cambios". Conferencia internacional IEEE de 2016 sobre calidad, confiabilidad y seguridad del software (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. Wiley-IEEE Computer Society Press. pág. 260. ISBN978-0-470-04212-0.
^ abc Baum, Tobias; Leßmann, Hendrik; Schneider, Kurt (2017). "La elección del proceso de revisión de código: una encuesta sobre el estado de la práctica". Mejora del proceso de software centrado en el producto . Apuntes de clase en informática. Vol. 10611. págs. 111–127. doi :10.1007/978-3-319-69926-4_9. ISBN978-3-319-69925-7.
^ ab Bacchelli, A; Bird, C (mayo de 2013). "Expectativas, resultados y desafíos de la revisión de código moderna" (PDF) . Actas de la 35.ª Conferencia internacional IEEE/ACM sobre ingeniería de software (ICSE 2013) . Consultado el 2 de septiembre de 2015 .
^ Baum, Tobias; Liskin, Olga; Niklas, Kai; Schneider, Kurt (2016). "Factores que influyen en los procesos de revisión de código en la industria". Actas del 24.º Simposio internacional ACM SIGSOFT sobre fundamentos de la ingeniería de software - FSE 2016. págs. 85–96. doi :10.1145/2950290.2950323. ISBN .9781450342186. Número de identificación del sujeto 15467294.
^ Estándar IEEE para revisiones y auditorías de software. IEEE STD 1028-2008. Agosto de 2008. págs. 1–53. doi :10.1109/ieeestd.2008.4601584. ISBN978-0-7381-5768-9.
^ ab Fagan, Michael (1976). "Inspecciones de diseño y código para reducir errores en el desarrollo de programas". IBM Systems Journal . 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 Fundamentos de Ingeniería de Software . págs. 202–212. CiteSeerX 10.1.1.641.1046 . doi :10.1145/2491411.2491444. ISBN .9781450322379.S2CID11163811 .
^ MacLeod, Laura; Greiler, Michaela; Storey, Margaret-Anne; Bird, Christian; Czerwonka, Jacek (2017). "Revisión de código en las trincheras: desafíos y mejores prácticas" (PDF) . IEEE Software . 35 (4): 34. doi :10.1109/MS.2017.265100500. S2CID 49651487 . Consultado el 28 de noviembre de 2020 .
^ Sadowski, Caitlin; Söderberg, Emma; Church, Luke; Sipko, Michal; Baachelli, Alberto (2018). "Revisión de código moderna: un estudio de caso en Google". Actas de la 40.ª Conferencia internacional sobre ingeniería de software: Ingeniería de software en la práctica . pp. 181–190. doi : 10.1145/3183519.3183525 . ISBN .9781450356596. Número de identificación del S2C: 49217999.
^ ab Jones, Capers (junio de 2008). "Medición de 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 2010-10-05 .
^ Jones, Capers; Ebert, Christof (abril de 2009). "Software integrado: hechos, cifras y futuro". Computer . 42 (4): 42–52. doi :10.1109/MC.2009.118. S2CID 14008049.
^ Jason Cohen (2006). Los secretos mejor guardados de la revisión de código entre pares (enfoque moderno. Consejos prácticos) . Smart Bear Inc. ISBN978-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 actuales de revisión de código nos frenan". 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering (PDF) . Vol. 2. págs. 27–28. doi :10.1109/ICSE.2015.131. ISBN978-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) . IEEE Transactions on Software Engineering . 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 modernas en proyectos de código abierto: ¿qué problemas solucionan?" (PDF) . Actas de la 11.ª Conferencia de trabajo sobre minería de repositorios de software (MSR 2014) . Consultado el 2 de septiembre de 2015 .
^ Siy, Harvey; Votta, Lawrence (1 de diciembre de 2004). "¿Tiene valor la inspección de códigos moderna?" (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ódigo ú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 .
^ ab 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". IEEE Transactions on Software Engineering . 35 (4): 534–550. doi :10.1109/TSE.2009.27. hdl : 11059/14085 . S2CID 14432409.
^ "Métricas de revisión de código". Proyecto de seguridad de aplicaciones web abiertas . Archivado desde el original el 9 de octubre de 2015. Consultado el 9 de octubre de 2015 .
^ "Mejores prácticas para la revisión de código entre pares". Smart Bear . Smart Bear Software. 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". IEEE Transactions on Software Engineering . 15 (10): 1294–1304. doi :10.1109/TSE.1989.559782. S2CID 14921429 . Consultado el 9 de octubre de 2015 .
^ Ganssle, Jack (febrero de 2010). "A Guide to Code Inspections" (PDF) . The Ganssle Group . Consultado el 5 de octubre de 2010 .
^ Balachandran, Vipin (2013). "Reducción del esfuerzo humano y mejora de la calidad en las revisiones de código por pares mediante el uso de análisis estático automático y recomendaciones de revisores". 2013 35th International Conference on Software Engineering (ICSE) . págs. 931–940. doi :10.1109/ICSE.2013.6606642. ISBN978-1-4673-3076-3.S2CID 15823436 .
^ VDC Research (1 de febrero de 2012). "Prevención automatizada de defectos para la calidad del software integrado". VDC Research . Consultado el 10 de abril de 2012 .