Pruebas de regresión

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 6 de septiembre de 2022; la verificación requiere 1 edición .

Pruebas de regresión ( eng.  pruebas de regresiónlat.  regressio  “retroceder, regresar, retirarse”) es un nombre colectivo para todos los tipos de pruebas de software destinadas a detectar errores en secciones ya probadas del código fuente . Dichos errores, cuando, después de realizar cambios en el programa, algo que debería haber seguido funcionando deja de funcionar, se denominan errores de regresión . 

Pruebas de regresión (para algunos[ ¿Qué? ] fuentes) incluye una nueva corrección de errores  : comprobar la corrección de un defecto recién encontrado, una corrección de errores  anterior: comprobar que un defecto corregido y verificado previamente no se reproduzca en el sistema de nuevo, y también un efecto secundario  : comprobar que el funcionamiento anterior la funcionalidad no se ha roto, si su código podría verse afectado al corregir algunos defectos en otra funcionalidad. Los métodos de prueba de regresión comúnmente utilizados incluyen repeticiones de pruebas anteriores, así como la verificación de errores de regresión en la próxima versión como resultado de la fusión del código.

Por la experiencia del desarrollo de software, se sabe que la aparición repetida de los mismos errores es un caso bastante frecuente. A veces esto se debe a técnicas de control de versiones débiles oa un error humano en el control de versiones . Pero con la misma frecuencia, la solución a un problema es “de corta duración”: después del próximo cambio en el programa, la solución deja de funcionar. Y finalmente, al reescribir cualquier parte del código, a menudo aparecen los mismos errores que estaban en la implementación anterior.

Por lo tanto, se considera una buena práctica al corregir un error para crear una prueba y ejecutarlo periódicamente con los cambios posteriores en el programa. Si bien las pruebas de regresión se pueden realizar manualmente, generalmente se realizan con la ayuda de programas especializados que le permiten realizar todas las pruebas de regresión automáticamente . Algunos proyectos incluso usan herramientas para ejecutar automáticamente pruebas de regresión en un intervalo de tiempo determinado. Esto generalmente se hace después de cada compilación exitosa (en pequeños proyectos) ya sea cada noche o cada semana.

Las pruebas de regresión son una parte integral de la programación extrema . Esta metodología reemplaza la documentación de diseño con pruebas extensibles, repetibles y automatizadas de todo el paquete de software en cada etapa del proceso de desarrollo de software .

Uso

Las pruebas de regresión se pueden usar no solo para verificar la corrección de un programa, sino que a menudo también se usan para evaluar la calidad del resultado. Entonces, al desarrollar un compilador , al ejecutar pruebas de regresión, se considera el tamaño del código resultante, la velocidad de su ejecución y el tiempo de compilación de cada uno de los casos de prueba.

Clasificación

En su artículo, S. Yoo y M. Harman [1] brindan la siguiente clasificación de las pruebas de regresión:

Problema de minimización de conjunto

La prueba de minimización de conjuntos busca reducir el tamaño del conjunto de prueba eliminando los casos de prueba del conjunto de prueba en función de un criterio dado. Hay tres enfoques, el primero de los cuales utiliza pruebas de seguridad automatizadas para detectar vulnerabilidades mediante el examen de fallas de aplicaciones que pueden detectar malware conocido como virus o gusanos. Este enfoque considera que solo las pruebas fallidas de la versión anterior se volverán a ejecutar en la nueva versión del sistema después de que se solucione el problema.

Otro enfoque está diseñado para detectar y corregir vulnerabilidades en versiones menores de aplicaciones web. Establece un enlace duro con las páginas de la versión anterior utilizando iteradores que se seleccionan para examinar las páginas web que contienen vulnerabilidades.

Y, finalmente, el tercer enfoque ofrece pruebas con autoadaptación del sistema para fallas ya conocidas. Los autores evitan reproducir errores ya conocidos al considerar que solo se ejecutarán aquellas pruebas que revelaron fallas conocidas en versiones anteriores.

La tarea de priorizar

El problema de la prueba de priorización consiste en ordenar las pruebas correctamente, lo que maximiza las propiedades deseadas, como la detección temprana de fallas. Además, los enfoques de priorización actuales solo consideran las vulnerabilidades.

Un método ofrece pruebas de prioridad basadas en errores que explotan directamente el conocimiento de su capacidad para detectar fallas.

El otro ofrece un sistema modificable de grabación y reproducción que le permite reescribir la versión grabada y ejecutada de la aplicación en una nueva y modificada. Su ejecución se prioriza debido a la determinación de la reescritura modificada óptima en función de la función de costo y la medición de la diferencia entre la ejecución original y la modificada en el reintento.

Problema de selección de prueba

El método de selección le permite seleccionar un subconjunto o todos los casos de prueba para probar las partes modificadas del software. Los siguientes enfoques prueban tanto los mecanismos de seguridad como las vulnerabilidades.

  1. Enfoque de prueba de regresión basado en diagramas de estado (basado en UML) para requisitos de seguridad de autenticación, confidencialidad, disponibilidad, autorización e integridad. Las pruebas, presentadas como un diagrama de secuencia , se seleccionan en función de la prueba de cambio de requisitos.
  2. Enfoque para mejorar las pruebas de regresión basadas en requisitos no funcionales de ontologías. Las pruebas se seleccionan en función de los cambios y los impactos del análisis de los requisitos no funcionales, como la seguridad, el rendimiento y la confiabilidad. Cada prueba está asociada con un requisito modificado que se selecciona para la prueba de regresión.
  3. Un enfoque para proporcionar verificación de evidencia adicional para la certificación de los requisitos de seguridad del servicio. Este enfoque se basa en la detección de cambios en el modelo de servicio de prueba, lo que determinará si se deben crear nuevos casos de prueba o seleccionar los existentes para volver a ejecutarlos en un servicio dedicado.
  4. Aproximación al desarrollo de sistemas seguros evaluados por criterios comunes. En este enfoque, los elementos de prueba de seguridad se crean manualmente y se presentan como un diagrama de secuencia. Si se modifica, se escriben nuevas pruebas según sea necesario y luego todas las pruebas se ejecutan en la nueva versión.
  5. Enfoque de los requisitos de prueba de seguridad para lanzamientos de servicios web. Un usuario del servicio puede volver a ejecutar periódicamente un conjunto de pruebas contra el servicio para verificar que el usuario todavía tiene los derechos correctos.
  6. Método de selección basado en cobertura para pruebas evolutivas de políticas de seguridad, cada una de las cuales incluye una secuencia de reglas para determinar quién tiene acceso a un recurso y bajo qué condiciones.

Ventajas y desventajas 

Las pruebas de regresión se realizan cuando se realizan cambios en la funcionalidad existente del software o si hay una corrección de errores en el software. Las pruebas de regresión se pueden implementar a través de varios enfoques. Pasar todas las pruebas con éxito por parte del programa modificado brinda confianza de que los cambios realizados en el software no afectan la funcionalidad existente, que debe permanecer sin cambios en cualquier caso.

En un proceso ágil de gestión de proyectos donde el ciclo de vida de desarrollo de software es muy corto, los recursos son escasos y los cambios de software se realizan con mucha frecuencia. Las pruebas de regresión pueden generar muchos gastos generales innecesarios.

Por lo general, las pruebas de regresión se realizan mediante herramientas de automatización, pero la generación actual de herramientas de prueba de regresión no está diseñada para manejar aplicaciones de bases de datos. Por esta razón, cuando se ejecuta una prueba de regresión en aplicaciones que usan bases de datos, puede haber un costo no planificado porque requiere mucho trabajo manual.

Cotizaciones

Un problema fundamental en el mantenimiento de software es que la corrección de un error tiene una alta probabilidad (20-50%) de provocar la aparición de uno nuevo. Por lo tanto, todo el proceso sigue el principio de "dos pasos adelante, un paso atrás".

¿Por qué no podemos corregir los errores con mayor precisión? Primero, incluso un defecto oculto se manifiesta como una falla en un lugar. En realidad, a menudo tiene ramificaciones en todo el sistema, generalmente no obvias. Cualquier intento de arreglarlo con el mínimo esfuerzo arreglará lo que es local y obvio, pero a menos que la estructura sea muy clara o la documentación sea muy buena, los efectos a largo plazo de esta solución pasarán desapercibidos. En segundo lugar, los errores generalmente no los corrige el autor del programa, sino a menudo un programador junior o un aprendiz.

Debido a la introducción de nuevos errores, el mantenimiento del programa requiere mucha más depuración del sistema por declaración que cualquier otra forma de programación. Teóricamente, después de cada reparación, debe ejecutar el conjunto completo de casos de prueba con los que se verificó el sistema antes, para asegurarse de que no se haya dañado de alguna manera incomprensible. En la práctica, tales pruebas de retroceso (regresión) deberían aproximarse a este ideal teórico, y son muy costosas.

- F. Brooks El mítico hombre-mes o cómo se crean los sistemas de software [2]

Véase también

Notas

  1. S. Yoo y M. Harman. Minimización, selección y priorización de pruebas de regresión: una encuesta.. - 2010. - S. 121-141.
  2. F. Brooks, El mítico hombre-mes o cómo se fabrican los sistemas de software . Por. De inglés. - San Petersburgo: Symbol-Plus, 2001. - 304 p.: il. (págs. 113-114).

Enlaces

Literatura