
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 más personas examinan el código fuente de un programa informático , ya sea después de su implementación o durante el proceso de desarrollo. Las personas que realizan la verificación, excluyendo al autor, se denominan "revisores". Al menos un revisor no debe ser el autor del código. [ 1 ] [ 2 ]
La revisión de código difiere de otras técnicas de aseguramiento de la calidad del software, como el análisis estático de código , las autocomprobaciones , las pruebas y la programación en parejas . El análisis estático se basa principalmente en herramientas automatizadas, las autocomprobaciones solo involucran al autor, las pruebas requieren la ejecución del código y la programación en parejas se realiza de forma continua durante el desarrollo, en lugar de como un paso separado. [ 1 ]
Meta
Aunque el descubrimiento directo de problemas de calidad suele ser el objetivo principal, [ 3 ] las revisiones de código se realizan habitualmente para alcanzar una combinación de objetivos: [ 4 ] [ 5 ]
- Mejorar la calidad del código : Mejorar la calidad y la mantenibilidad del código interno mediante una mayor legibilidad, uniformidad y comprensibilidad.
- Detección de defectos : Mejora la calidad en lo que respecta a aspectos externos, especialmente la corrección, pero también detecta problemas como fallos de rendimiento, vulnerabilidades de seguridad y malware inyectado.
- Aprendizaje/Transferencia de conocimiento : compartir conocimientos sobre el código fuente, enfoques de solución y expectativas de calidad, tanto con los revisores como con el autor.
- Incrementar el sentido de responsabilidad mutua : aumentar el sentido de propiedad colectiva del código y la solidaridad.
- Encontrar mejores soluciones : generar ideas para soluciones nuevas y mejores, e ideas que vayan más allá del código específico en cuestión.
- Cumplimiento de las directrices de control de calidad y las normas ISO/IEC : las revisiones de código son obligatorias en algunos contextos, como el software de control de tráfico aéreo y el software crítico para la seguridad .
Tipos de revisión
Existen varias variantes de procesos de revisión de código, con tipos adicionales especificados en IEEE 1028. [ 6 ]
- revisiones de gestión
- Revisiones técnicas
- Inspecciones
- Recorridos
- Auditorías
Inspección (formal)
El primer proceso de revisión de código estudiado y descrito en detalle fue denominado "Inspección" por su inventor, Michael Fagan . [ 7 ] La inspección de Fagan es un proceso formal que implica una ejecución cuidadosa y detallada con múltiples participantes y fases. En las revisiones formales de código, los desarrolladores de software asisten a una serie de reuniones para examinar el código línea por línea, a menudo utilizando copias impresas. [ 8 ] Las investigaciones han demostrado que las inspecciones formales son extremadamente exhaustivas y altamente efectivas para identificar defectos. [ 7 ]
Revisión periódica del código basada en cambios (recorridos)
Los equipos de desarrollo de software suelen adoptar un proceso de revisión más ligero en el que el alcance de cada revisión se relaciona con los cambios en el código base correspondientes a un ticket, historia de usuario, commit u otra unidad de trabajo. [ 9 ] [ 3 ] Además, existen reglas o convenciones que integran la tarea de revisión en el flujo de trabajo de desarrollo a través de convenciones como la revisión obligatoria de todos los tickets, comúnmente como parte de una solicitud de extracción , en lugar de planificar explícitamente cada revisión. Este proceso se denomina "revisión de código regular basada en cambios". [ 1 ] Existen muchas variaciones de este proceso básico.
Una encuesta realizada en 2017 a 240 equipos de desarrollo reveló que el 90 % de los equipos que utilizaban la revisión de código seguían un proceso basado en cambios, y el 60 % utilizaba específicamente la revisión regular basada en cambios. [ 3 ] Entre las principales empresas de software que utilizan la revisión de código basada en cambios se encuentran Microsoft, [ 10 ] Google, [ 11 ] y Facebook. [ 12 ]
Eficiencia y eficacia
Una investigación en curso realizada por Capers Jones, que analizó más de 12 000 proyectos de desarrollo de software, encontró que las inspecciones formales tenían una tasa de detección de defectos latentes del 60-65%, mientras que las inspecciones informales detectaron menos del 50% de los defectos. La tasa de detección de defectos latentes para la mayoría de las formas de prueba es de aproximadamente el 30%. [ 13 ] [ 14 ] 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, [ 13 ] encontrando que las revisiones ligeras pueden descubrir tantos errores como las revisiones formales, siendo además más rápidas y menos costosas. [ 15 ]
Los estudios indican que hasta el 75 % de los comentarios de las revisiones de código afectan la capacidad de evolución y el mantenimiento del software en lugar de la funcionalidad, [ 16 ] [ 17 ] [ 4 ] [ 18 ] lo que sugiere que las revisiones de código son una excelente herramienta para las empresas de software con ciclos de vida de productos o sistemas largos. [ 19 ] Por lo tanto, menos del 15 % de los problemas discutidos en las revisiones de código se relacionan directamente con errores. [ 20 ]
Pautas
La investigación indica que la efectividad de la revisión se correlaciona con la velocidad de la revisión. Las tasas óptimas de revisión de código oscilan entre 200 y 400 líneas de código por hora. [ 21 ] [ 22 ] [ 23 ] [ 24 ] Inspeccionar y revisar más de unos pocos cientos de líneas de código por hora para software crítico (como software embebido crítico para la seguridad ) puede ser demasiado rápido para encontrar errores. [ 21 ] [ 25 ]
Herramientas de apoyo
Las herramientas de análisis de código estático ayudan a los revisores al comprobar automáticamente el código fuente en busca de vulnerabilidades conocidas y patrones de defectos, especialmente en grandes fragmentos de código. [ 26 ] Un estudio de 2012 realizado por VDC Research informa que el 17,6 % de los ingenieros de software embebido encuestados utilizan actualmente herramientas automatizadas para apoyar la revisión de código por pares y el 23,7 % planea utilizarlas en los próximos dos años. [ 27 ]
Véase también
Enlaces externos
- Cinco antipatrones de revisión de código
- Revista Java, Lo mejor de 2020
Referencias
- 1 2 3 Baum, Tobias; Liskin, Olga; Niklas, Kai; Schneider, Kurt (2016). "Un esquema de clasificación facetada para procesos de revisión de código industrial basados en cambios". 2016 IEEE International Conference on Software Quality, Reliability and Security (QRS) . pp. 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. ISBN 978-0-470-04212-0.
- 1 2 3 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 de procesos de software centrada en el producto . Notas de clase en informática. Vol. 10611. págs. 111–127 . doi : 10.1007/978-3-319-69926-4_9 . ISBN 978-3-319-69925-7.
- 1 2 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) . Recuperado 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 de 2016 sobre Fundamentos de la Ingeniería de Software - FSE 2016. págs. 85–96 . doi : 10.1145/2950290.2950323 . ISBN 9781450342186. S2CID 15467294 .
- ↑ Norma 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 . ISBN 978-0-7381-5768-9.
- 1 2 Fagan, Michael (1976). "Diseño e inspecciones de código para reducir errores en el desarrollo de programas". IBM Systems Journal . 15 (3): 182– 211. doi : 10.1147/sj.153.0182 .
- ↑ Fagan, Michael E. (1986). "Avances en inspecciones de software" . IEEE Transactions on Software Engineering . SE-12 (7): 744– 751. doi : 10.1109/TSE.1986.6312976 . ISSN 2326-3881 . Recuperado el 3 de julio de 2026 .
- ↑ Rigby, Peter; Bird, Christian (2013). «Prácticas convergentes de revisión por pares de software contemporáneo». Actas de la 9.ª Reunión Conjunta de 2013 sobre Fundamentos de la Ingeniería de Software . págs. 202–212 . CiteSeerX 10.1.1.641.1046 . doi : 10.1145/2491411.2491444 . ISBN 9781450322379. S2CID 11163811 .
- ↑ MacLeod, Laura; Greiler, Michaela; Storey, Margaret-Anne ; Bird, Christian; Czerwonka, Jacek (2017). "Code Reviewing in the Trenches: Challenges and Best Practices" (PDF) . IEEE Software . 35 (4): 34. doi : 10.1109/MS.2017.265100500 . S2CID 49651487. Recuperado 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. S2CID 49217999 .
- ↑ Savor, Tony; Douglas, Mitchell; Gentili, Michael; Williams, Laurie; Beck, Kent; Stumm, Michael (2016). "Despliegue continuo en Facebook y OANDA" . 2016 IEEE/ACM 38.ª Conferencia Internacional sobre Ingeniería de Software (ICSE-C) . Recuperado el 1 de junio de 2026 .
- 1 2 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 del original (PDF) el 6 de agosto de 2012. Recuperado el 5 de octubre de 2010 .
- ↑ Jones, Capers; Ebert, Christof (abril de 2009). "Software embebido: hechos, cifras y futuro". Computer . 42 (4): 42– 52. Bibcode : 2009Compr..42d..42E . 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. ISBN 978-1-59916-067-2.
- ↑ Czerwonka, Jacek; Greiler, Michaela; Tilford, Jack (2015). "Las revisiones de código no encuentran errores. Cómo la práctica actual de revisión de código nos ralentiza". 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 . ISBN 978-1-4799-1934-5. S2CID 29074469 . Consultado el 28-11-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. Bibcode : 2009ITSEn..35..430M . CiteSeerX 10.1.1.188.5757 . doi : 10.1109/TSE.2008.71 . S2CID 17570489. Recuperado 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) . Recuperado 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 del original (PDF) el 28 de abril de 2015. Recuperado 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 12.ª Conferencia de Trabajo sobre Minería de Repositorios de Software . Recuperado el 28 de noviembre de 2020 .
- 1 2 Kemerer, CF; Paulk, MC (2009-04-17). "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. Bibcode : 2009ITSEn..35..534K . 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 del 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 del 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 para 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. Recuperado el 9 de octubre de 2015 .
- ↑ Ganssle, Jack (febrero de 2010). "Guía para inspecciones de códigos" (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 entre pares mediante análisis estático automático y recomendación de revisores". 35.ª Conferencia Internacional de Ingeniería de Software (ICSE) de 2013. pp. 931–940 . doi : 10.1109/ICSE.2013.6606642 . ISBN 978-1-4673-3076-3. S2CID 15823436 .
- ↑ VDC Research (01/02/2012). "Prevención automatizada de defectos para la calidad del software embebido" . VDC Research . Consultado el 10/04/2012 .
- Código fuente
- Análisis de software
- Revisión por pares