Articulo de referencia

regresión de software

Una regresión de software es un tipo de error de software en el que una función que antes funcionaba deja de funcionar correctamente. Esto puede ocurrir después de que se apliqu...

Una regresión de software es un tipo de error de software en el que una función que antes funcionaba deja de funcionar correctamente. Esto puede ocurrir después de que se apliquen cambios al código fuente del software , incluyendo la adición de nuevas funciones y correcciones de errores. [ 1 ] También pueden ser introducidos por cambios en el entorno en el que se ejecuta el software, como actualizaciones del sistema, parches del sistema o incluso un cambio al horario de verano . [ 2 ] Una regresión del rendimiento del software es una situación en la que el software sigue funcionando correctamente, pero funciona más lentamente o utiliza más memoria o recursos que antes. [ 3 ] En la práctica se han identificado varios tipos de regresiones de software, incluyendo los siguientes: [ 4 ]

  • Local : un cambio introduce un nuevo error en el módulo o componente modificado.
  • Remoto : un cambio en una parte del software interrumpe la funcionalidad de otro módulo o componente.
  • Desenmascarado : un cambio desenmascara un error preexistente que no tenía ningún efecto antes del cambio.

Las regresiones suelen ser causadas por correcciones de errores incluidas en parches de software. Una forma de evitar este tipo de problema es mediante pruebas de regresión . Un plan de pruebas bien diseñado, que utilice pruebas automatizadas y casos de prueba bien redactados, tiene como objetivo prevenir las regresiones antes del lanzamiento del software o sus actualizaciones. [ 5 ]

Prevención y detección

Se han propuesto técnicas que intentan evitar que se introduzcan regresiones en el software en diversas etapas del desarrollo, como se describe a continuación.

Antes de su lanzamiento

Para evitar que el usuario final vea regresiones después del lanzamiento, los desarrolladores ejecutan regularmente pruebas de regresión después de introducir cambios en el software. Estas pruebas pueden incluir pruebas unitarias para detectar regresiones locales, así como pruebas de integración para detectar regresiones remotas. [ 6 ] Las técnicas de pruebas de regresión a menudo aprovechan los casos de prueba existentes para minimizar el esfuerzo que implica crearlos. [ 7 ] Sin embargo, debido al volumen de estas pruebas existentes, a menudo es necesario seleccionar un subconjunto representativo, utilizando técnicas como la priorización de casos de prueba .

Para detectar regresiones de rendimiento, se realizan pruebas de rendimiento de software periódicamente para monitorizar el tiempo de respuesta y las métricas de uso de recursos del software tras los cambios posteriores. [ 8 ] A diferencia de las pruebas de regresión funcional, los resultados de las pruebas de rendimiento están sujetos a varianza ; es decir, los resultados pueden diferir entre pruebas debido a la varianza en las mediciones de rendimiento. Por consiguiente, es necesario decidir si un cambio en los valores de rendimiento constituye una regresión, basándose en la experiencia y las demandas del usuario final. En ocasiones, se utilizan enfoques como las pruebas de significación estadística y la detección de puntos de cambio para facilitar esta decisión. [ 9 ]

Antes de comprometerse

Dado que depurar y localizar la causa raíz de una regresión de software puede ser costoso, [ 10 ] [ 11 ] también existen algunos métodos que intentan evitar que las regresiones se incorporen al repositorio de código . Por ejemplo, los Git Hooks permiten a los desarrolladores ejecutar scripts de prueba antes de que los cambios de código se confirmen o se envíen al repositorio. [ 12 ] Además, el análisis de impacto de cambios se ha aplicado al software para predecir el impacto de un cambio de código en varios componentes del programa y para complementar la selección y priorización de casos de prueba. [ 13 ] [ 14 ] Los linters de software también se suelen añadir a los ganchos de confirmación para garantizar un estilo de codificación coherente, minimizando así los problemas de estilo que pueden hacer que el software sea propenso a regresiones. [ 15 ]

Localización

Muchas de las técnicas utilizadas para encontrar la causa raíz de errores de software que no son de regresión también pueden utilizarse para depurar regresiones de software, como la depuración mediante puntos de interrupción , la depuración mediante impresión y la segmentación de programas . Las técnicas que se describen a continuación se utilizan con frecuencia específicamente para depurar regresiones de software.

Regresiones funcionales

Una técnica común para localizar regresiones funcionales es la bisección , que toma como entrada una confirmación con errores y una confirmación que funcionaba previamente, e intenta encontrar la causa raíz mediante una búsqueda binaria en las confirmaciones intermedias. [ 16 ] Los sistemas de control de versiones como Git y Mercurial ofrecen métodos integrados para realizar la bisección en un par de confirmaciones. [ 17 ] [ 18 ]

Otras opciones incluyen asociar directamente el resultado de una prueba de regresión con cambios en el código; [ 19 ] establecer puntos de ruptura de divergencia; [ 20 ] o utilizar análisis incremental de flujo de datos , que identifica casos de prueba, incluidos los que fallan, que son relevantes para un conjunto de cambios en el código, [ 21 ] entre otros.

Regresiones de rendimiento

El análisis de rendimiento mide el desempeño y el uso de recursos de varios componentes de un programa, y ​​se utiliza para generar datos útiles para depurar problemas de rendimiento. En el contexto de las regresiones de rendimiento del software, los desarrolladores suelen comparar los árboles de llamadas (también conocidos como "líneas de tiempo") generados por los analizadores de rendimiento tanto para la versión con errores como para la versión que funcionaba anteriormente, y existen mecanismos para simplificar esta comparación. [ 22 ] Las herramientas de desarrollo web suelen proporcionar a los desarrolladores la capacidad de registrar estos perfiles de rendimiento. [ 23 ] [ 24 ]

El registro de eventos también ayuda a localizar la regresión del rendimiento y, de forma similar a los árboles de llamadas, los desarrolladores pueden comparar registros de rendimiento sistemáticamente ubicados de múltiples versiones del mismo software. [ 25 ] Existe una disyuntiva al agregar estos registros de rendimiento, ya que agregar muchos registros puede ayudar a los desarrolladores a identificar qué partes del software están experimentando regresión a niveles más pequeños, mientras que agregar solo unos pocos registros también reducirá la sobrecarga al ejecutar el programa. [ 26 ]

Otros enfoques incluyen escribir pruebas unitarias que tengan en cuenta el rendimiento para ayudar con la localización, [ 27 ] y clasificar los subsistemas en función de las desviaciones del contador de rendimiento. [ 28 ] La bisección también se puede reutilizar para regresiones de rendimiento considerando como errores las confirmaciones que rinden por debajo (o por encima) de un cierto valor de referencia, y tomando el lado izquierdo o el derecho de las confirmaciones en función de los resultados de esta comparación.

Véase también

Referencias

  1. Wong, W. Eric; Horgan, JR; London, Saul; Agrawal, Hira (1997). "Un estudio de las pruebas de regresión efectivas en la práctica". Actas del Octavo Simposio Internacional sobre Ingeniería de Confiabilidad de Software (ISSRE 97) . IEEE. doi : 10.1109/ISSRE.1997.630875 . ISBN 0-8186-8120-9. S2CID 2911517 . 
  2. Yehudai, Amiram; Tyszberowicz, Shmuel; Nir, Dor (2007). Localización de errores de regresión . Conferencia de verificación de Haifa. págs. 218–234 . doi : 10.1007/978-3-540-77966-7_18 . 
  3. Shang, Weiyi; Hassan, Ahmed E.; Nasser, Mohamed; Flora, Parminder (31 de enero de 2015). Detección automatizada de regresiones de rendimiento mediante modelos de regresión en contadores de rendimiento agrupados . ICPE '15: Actas de la 6.ª Conferencia Internacional ACM/SPEC sobre Ingeniería de Rendimiento. ACM. págs. 15–26 . doi : 10.1145/2668930.2688052 . ISBN  978-1-4503-3248-4.
  4. Henry, Jean-Jacques Pierre (2008). The Testing Network: An Integral Approach to Test Activities in Large Software Projects . Springer Science & Business Media. p. 74. ISBN  978-3-540-78504-0.
  5. Richardson, Jared; Gwaltney, William Jr (2006). ¡ Lánzalo! Una guía práctica para proyectos de software exitosos . Raleigh, NC: The Pragmatic Bookshelf. pp. 32, 193. ISBN  978-0-9745140-4-8.
  6. Leung, Hareton KN; White, Lee (noviembre de 1990). «Un estudio de las pruebas de integración y la regresión de software a nivel de integración». Actas de la Conferencia Internacional sobre Mantenimiento de Software . San Diego, CA, EE. UU.: IEEE. doi : 10.1109/ICSM.1990.131377 . ISBN 0-8186-2091-9. S2CID 62583582 . 
  7. Rothermel, Gregg; Harrold, Mary Jean; Dedhia, Jeinay (2000). "Selección de pruebas de regresión para software C++" . Software Testing, Verification and Reliability . 10 (2): 77– 109. doi : 10.1002/1099-1689(200006)10:2 < 77::AID-STVR197 > 3.0.CO ; 2-E . ISSN 1099-1689 . 
  8. Weyuker, EJ; Vokolos, FI (diciembre de 2000). "Experiencia con pruebas de rendimiento de sistemas de software: problemas, un enfoque y un estudio de caso". IEEE Transactions on Software Engineering . 26 (12): 1147– 1156. doi : 10.1109/32.888628 . ISSN 1939-3520 . 
  9. Daly, David; Brown, William; Ingo, Henrik; O'Leary, Jim; Bradford, David (20 de abril de 2020). «El uso de la detección de puntos de cambio para identificar regresiones en el rendimiento del software en un sistema de integración continua». Actas de la Conferencia Internacional sobre Ingeniería del Rendimiento . Association for Computing Machinery. págs. 67–75 . doi : 10.1145/3358960.3375791 . ISBN  978-1-4503-6991-6. S2CID 211677818 . 
  10. Nistor, Adrian; Jiang, Tian; Tan, Lin (mayo de 2013). «Descubrimiento, reporte y corrección de errores de rendimiento». Actas de la Conferencia de Trabajo sobre Minería de Repositorios de Software (MSR) . págs. 237–246 . doi : 10.1109/MSR.2013.6624035 . ISBN  978-1-4673-2936-1. S2CID 12773088 . 
  11. Agarwal, Pragya; Agrawal, Arun Prakash (17 de septiembre de 2014). "Técnicas de localización de fallos para sistemas de software: una revisión de la literatura" . ACM SIGSOFT Software Engineering Notes . 39 (5): 1– 8. doi : 10.1145/2659118.2659125 . ISSN 0163-5948 . S2CID 12101263 .  
  12. "Git - Git Hooks" . git-scm.com . Consultado el 7 de noviembre de 2021 .
  13. Orso, Alessandro; Apiwattanapong, Taweesup; Harrold, Mary Jean (1 de septiembre de 2003). "Aprovechamiento de datos de campo para análisis de impacto y pruebas de regresión" . ACM SIGSOFT Software Engineering Notes . 28 (5): 128– 137. doi : 10.1145/949952.940089 . ISSN 0163-5948 . 
  14. Qu, Xiao; Acharya, Mithun; Robinson, Brian (septiembre de 2012). «Selección de configuración mediante análisis del impacto de los cambios de código para pruebas de regresión». Actas de la Conferencia Internacional sobre Mantenimiento de Software . págs. 129–138 . doi : 10.1109/ICSM.2012.6405263 . ISBN  978-1-4673-2312-3. S2CID 14928793 . 
  15. Tómasdóttir, Kristín Fjóla; Aniche, Mauricio; van Deursen, Arie (octubre de 2017). «Por qué y cómo los desarrolladores de JavaScript usan linters». Actas de la Conferencia Internacional sobre Ingeniería de Software Automatizada . págs. 578–589 . doi : 10.1109/ASE.2017.8115668 . ISBN  978-1-5386-2684-9. S2CID 215750004 . 
  16. Gross, Thomas (10 de septiembre de 1997). "Depuración por bisección". Actas del Taller Internacional sobre Depuración Automática . Linkøping University Electronic Press. págs. 185–191 . 
  17. "Git - git-bisect Documentation" . git-scm.com . Consultado el 7 de noviembre de 2021 .
  18. "hg - bisect" . www.selenic.com . Mercurial . Consultado el 7 de noviembre de 2021 .
  19. "Lectura 11: Depuración" . web.mit.edu . MIT.
  20. Buhse, Ben; Wei, Thomas; Zang, Zhiqiang; Milicevic, Aleksandar; Gligoric, Milos (mayo de 2019). «VeDebug: Herramienta de depuración de regresión para Java». Actas de la Conferencia Internacional sobre Ingeniería de Software: Actas complementarias (ICSE-Companion) . págs. 15–18 . doi : 10.1109/ICSE-Companion.2019.00027 . ISBN  978-1-7281-1764-5. S2CID 174799830 . 
  21. Taha, A.-B.; Thebaut, SM; Liu, S.-S. (septiembre de 1989). «Un enfoque para la localización y revalidación de fallos de software basado en el análisis incremental del flujo de datos». Actas de la Conferencia Anual Internacional sobre Software y Aplicaciones Informáticas . IEEE. págs. 527–534 . doi : 10.1109/CMPSAC.1989.65142 . ISBN  0-8186-1964-3. S2CID 41978046 . 
  22. Ocariza, Frolin S.; Zhao, Boyang (2021). "Localización de regresiones de rendimiento de software en aplicaciones web mediante la comparación de tiempos de ejecución" . Software Testing, Verification and Reliability . 31 (5) e1750. doi : 10.1002/stvr.1750 . ISSN 1099-1689 . S2CID 225416138 .  
  23. "Analizar el rendimiento en tiempo de ejecución" . Desarrolladores de Chrome . Google . Consultado el 7 de noviembre de 2021 .
  24. "Referencia de análisis de rendimiento - Desarrollo de Microsoft Edge" . docs.microsoft.com . Microsoft . Consultado el 7 de noviembre de 2021 .
  25. Yao, Kundi; B. de Pádua, Guilherme; Shang, Weiyi; Sporea, Steve; Toma, Andrei; Sajedi, Sarah (30 de marzo de 2018). «Log4Perf: Sugerencias de ubicaciones de registro para la monitorización del rendimiento de sistemas basados ​​en la web». Actas de la Conferencia Internacional sobre Ingeniería del Rendimiento . Association for Computing Machinery. págs. 127–138 . doi : 10.1145/3184407.3184416 . ISBN  978-1-4503-5095-2. S2CID 4557038 . 
  26. Li, Heng; Shang, Weiyi; Adams, Bram; Sayagh, Mohammed; Hassan, Ahmed E. (30 de enero de 2020). "Un estudio cualitativo de los beneficios y costos del registro desde la perspectiva de los desarrolladores". IEEE Transactions on Software Engineering . 47 (12): 2858– 2873. doi : 10.1109/TSE.2020.2970422 . S2CID 213679706 . 
  27. Heger, Christoph; Happe, Jens; Farahbod, Roozbeh (21 de abril de 2013). «Aislamiento automatizado de la causa raíz de las regresiones de rendimiento durante el desarrollo de software». Actas de la Conferencia Internacional sobre Ingeniería del Rendimiento . Association for Computing Machinery. págs. 27–38 . doi : 10.1145/2479871.2479879 . ISBN  978-1-4503-1636-1. S2CID 2593603 . 
  28. Malik, Haroon; Adams, Bram; Hassan, Ahmed E. (noviembre de 2010). «Identificación de los subsistemas responsables de las desviaciones de rendimiento en una prueba de carga». Actas del Simposio Internacional sobre Ingeniería de la Fiabilidad del Software . págs. 201–210 . doi : 10.1109/ISSRE.2010.43 . ISBN  978-1-4244-9056-1. S2CID 17306870 . 
Obtenido de " https://en.wikipedia.org/w/index.php?title=Software_regression&oldid=1335756828 "