Actividad donde una o más personas verifican el código de un programa.
Ingenieros de software (“AKA: programadores”) revisando 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 viendo y leyendo 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 autora del código. Las personas que realizan la verificación, excluido el autor, se denominan "revisores". [1] [2]
Aunque el objetivo principal suele ser el descubrimiento directo de problemas de calidad, [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 (como la legibilidad, la uniformidad y la comprensibilidad).
Encontrar defectos : mejorar la calidad con respecto a los aspectos externos, especialmente la corrección, pero también encontrar problemas como problemas de rendimiento, vulnerabilidades de seguridad y malware inyectado.
Transferencia de aprendizaje/conocimiento : ayude a transferir el conocimiento de la base del código, los enfoques de solución y las expectativas de calidad, tanto a los revisores como al autor.
Incrementar el sentido de responsabilidad mutua – Incrementar el sentido de propiedad y solidaridad del código colectivo
Encontrar mejores soluciones : generar ideas para nuevas y mejores soluciones e ideas que trasciendan el código específico en cuestión.
Cumplir con las pautas de control de calidad y los 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 control de calidad del software relacionadas , como el análisis de código estático , las autoverificaciones , las pruebas y la programación en pares . En el análisis de código estático 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 continuamente durante la implementación y no como un paso separado. . [1]
Tipos de reseñas
Existen muchas variaciones de procesos de revisión de código, algunas de las cuales se detallan 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
Auditorías
Inspección (formal)
Históricamente, el primer proceso de revisión de código que se estudió y describió en detalle fue denominado "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 exhaustivas y han demostrado ser efectivas para encontrar defectos en el código bajo revisión. [7]
Revisión periódica del código basado en cambios (tutoriales)
En los últimos años, [ ¿ cuándo? ] muchos equipos de la industria han introducido un tipo más liviano de revisión de código 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 incorporan la tarea de revisión en el proceso de desarrollo (por ejemplo, "cada ticket debe ser revisado"), 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 periódica de código 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 está 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 para la mayoría de las formas de prueba es aproximadamente 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] y descubrió que las revisiones ligeras pueden descubrir tantos errores como las revisiones formales, pero eran más rápidas y costosas. -eficaz. [13]
Los estudios han encontrado que hasta el 75% de los comentarios de revisión de código afectan la capacidad de evolución/mantenimiento del software en lugar de la funcionalidad, [14] [15] [4] [16], lo que sugiere que las revisiones de código son una excelente herramienta para las empresas de software con una larga vida útil de los productos o sistemas. ciclos. [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 descubrió que la eficacia de la revisión del código dependía 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 en busca de software crítico (como el 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 por parte del 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 utilizan actualmente herramientas automatizadas para respaldar la revisión de código por pares y el 23,7% espera utilizarlas dentro de dos años. [25]
Cinco antipatrones de revisión de código (revista Java, lo mejor de 2020)
Referencias
^ abc Baum, Tobías; Liskin, Olga; Niklas, Kai; Schneider, Kurt (2016). "Un esquema de clasificación facetado para procesos de revisión de códigos industriales basados en cambios". Conferencia internacional IEEE 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, Adán; 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.ISBN978-0-470-04212-0.
^ abc Baum, Tobías; Leßmann, Hendrik; Schneider, Kurt (2017). "El proceso de revisión de la elección del código: una encuesta sobre el estado de la práctica". Mejora de procesos de software centrados en el producto . Apuntes de conferencias sobre 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 del código moderno" (PDF) . Actas de la 35ª 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 de código en la industria". Actas del 24º Simposio internacional ACM SIGSOFT de 2016 sobre fundamentos de la ingeniería de software - FSE 2016 . págs. 85–96. doi :10.1145/2950290.2950323. ISBN9781450342186. S2CID 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". Revista de sistemas IBM . 15 (3): 182–211. doi :10.1147/sj.153.0182.
^ Rigby, Pedro; Pájaro, cristiano (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 . págs. 202-212. CiteSeerX 10.1.1.641.1046 . doi :10.1145/2491411.2491444. ISBN9781450322379. S2CID 11163811.
^ MacLeod, Laura; Greiler, Michaela; Piso, Margaret-Anne; Pájaro, cristiano; 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; Soderberg, Emma; Iglesia, Lucas; Sipko, Michal; Baachelli, Alberto (2018). "Revisión de código moderno: 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 . págs. 181-190. doi : 10.1145/3183519.3183525 . ISBN9781450356596. S2CID 49217999.
^ ab Jones, Alcaparras (junio de 2008). "Medición de potenciales defectos y eficiencia de eliminación de defectos" (PDF) . Diafonía, Revista de ingeniería de software de defensa. Archivado desde el original (PDF) el 6 de agosto de 2012 . 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 actuales nos frenan". 2015 IEEE/ACM 37ª Conferencia Internacional IEEE sobre Ingeniería de Software (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) . 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 11.ª Conferencia de trabajo sobre repositorios de software de minería (MSR 2014) . Consultado el 2 de septiembre de 2015 .
^ Sí, 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ódigo útil: un estudio empírico en Microsoft" (PDF) . 2015 IEEE/ACM 12ª Conferencia de Trabajo sobre Repositorios de Software de Minería . Consultado el 28 de noviembre de 2020 .
^ ab Kemerer, CF; Paulk, MC (17 de abril de 2009). "El impacto de las revisiones de código y diseño 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. hdl : 11059/14085 . S2CID 14432409.
^ "Métricas de revisión de código". 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 de códigos por pares". Oso inteligente . Software de oso inteligente. 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 entre pares mediante análisis estático automático y recomendación del revisor". 2013 35ª Conferencia Internacional sobre Ingeniería de Software (ICSE) . págs. 931–940. doi : 10.1109/ICSE.2013.6606642. ISBN978-1-4673-3076-3. S2CID 15823436.
^ Investigación VDC (1 de febrero de 2012). "Prevención automatizada de defectos para la calidad del software integrado". Investigación VDC . Consultado el 10 de abril de 2012 .