Want to make creations as awesome as this one?

Transcript

Introducción a la automatización de las pruebas
Imagina que estás creando un nuevo videojuego. Este videojuego es como una gran máquina con muchas piezas que deben funcionar juntas de manera perfecta. Para asegurarte de que todo funcione como debería, necesitas probarlo una y otra vez, en diferentes situaciones y con diferentes jugadores.

Introducción

Permite probar más cosas: Puedes crear muchos programas diferentes para probar el juego en diferentes situaciones, como con diferentes tipos de jugadores o en diferentes dispositivos.

Es más preciso: Los programas no se cansan ni se distraen, por lo que pueden encontrar problemas que a un humano se le podrían pasar por alto.

Ahorra tiempo: En lugar de pasar días o semanas probando el juego manualmente, puedes dejar que el programa lo haga en cuestión de horas.

Ahora bien, ¿Por que es útil automatizar pruebas?

El software que utilizamos para realizar estas pruebas se llama "software de prueba". Este software sigue una serie de instrucciones (llamadas casos de prueba) para interactuar con el SSP (tu teléfono) y verificar que funcione como se espera.

Ahora imagina que quieres asegurarte de que todas las funciones de tu teléfono funcionen correctamente. Para hacer esto, realizarías una serie de pruebas, como llamar a un número, enviar un mensaje de texto o tomar una foto. Estas pruebas son lo que hacemos en las pruebas de software.

Imagina que tienes un nuevo teléfono móvil. Este teléfono es como un pequeño ordenador con muchas funciones: hacer llamadas, enviar mensajes, tomar fotos, etc. Este teléfono sería tu SSP.

Sistema Sujeto a Prueba (SSP): Una Explicación Sencilla

No es solo ejecutar pruebas automáticamente. Es como construir una pequeña fábrica para hacer pruebas. Para que esta fábrica funcione, necesitas:

la automatización de pruebas

Pruebas a través de servicios externos: Es como probar cómo se conecta el celular con otros servicios, como internet o el correo electrónico.

Pruebas a través de la interfaz de usuario: Es como usar el celular normalmente, tocando la pantalla y presionando los botones.

Pruebas a través de las interfaces internas: Es como mirar dentro del celular y probar directamente las partes que no vemos, como el software que controla la cámara.

Además, existen diferentes formas de probar un software:

La automatización de pruebas es como tener un ejército de robots programadores que ejecutan estas pruebas por ti. Estos robots son scripts o programas que interactúan con tu software de la misma manera que lo haría un usuario, pero mucho más rápido y con mayor precisión.

Imagina que tienes un software complejo, como un sistema bancario. Este software tiene miles de líneas de código y muchas funcionalidades diferentes. Para asegurarte de que funcione correctamente, necesitas realizar una gran cantidad de pruebas.

Objetivos de la automatización

¿Por qué es tan importante automatizar las pruebas?

Escribir código: utilizando lenguajes de programación y herramientas específicas. Entender el software que estás probando: para diseñar pruebas efectivas. Trabajar en equipo: colaborar con otros miembros del equipo de desarrollo. Resolver problemas: identificar y solucionar los errores que surjan durante las pruebas.

En resumen: para realizar pruebas automatizadas, necesitas una combinación de conocimientos técnicos y habilidades de resolución de problemas. Debes ser capaz de:

¿Qué necesitas para automatizar tus pruebas?

  • Los costos adicionales están involucrados.
  • Requiere tecnologías adicionales.
  • El equipo necesita tener habilidades de desarrollo y automatización.
  • Puede distraerse de los objetivos de las pruebas, p. ej., centrarse en la automatización de los casos de prueba a expensas de la ejecución de pruebas.
  • Las pruebas se pueden volver más complejas.
  • Se pueden introducir errores adicionales por la automatización.
  • Las pruebas pueden ser más complejas.
  • Las pruebas se ejecutan más rápido.
  • Las pruebas están menos sujetas a errores del operador.
  • Uso más efectivo y eficiente de los recursos de prueba.
  • Retroalimentación más rápida con respecto a la calidad del software.
  • Mejora de la consistencia de las pruebas.

Ventajas y desventajas de la automatización

Cuando implementamos la automatización de pruebas, el éxito a largo plazo depende de varios factores clave. Estos factores no solo influyen en la etapa inicial del proyecto, sino que son fundamentales para mantener y escalar la automatización en el tiempo.

Factores Clave para el Éxito en la Automatización de Pruebas

Imagina el TAF como la base sobre la cual construyes tu ejército de pruebas automatizadas. Un buen TAF te proporciona las herramientas y la estructura necesarias para crear, ejecutar y mantener tus pruebas de manera eficiente.

El Marco de Trabajo de Automatización de la Prueba (TAF)

Dependencias: el código de automatización depende de muchos factores externos, como la interfaz de usuario, los datos de prueba y el entorno de ejecución.

Evolución constante: tanto el software como las herramientas de automatización evolucionan constantemente, lo que obliga a actualizar el código de las pruebas.

Complejidad: el código de automatización puede ser tan complejo como el código del software que estás probando.

importancia de mantener el código de automatización

Alta dependencia: El código puede ser muy sensible a cambios en la interfaz de usuario, los datos de prueba y el entorno.

Dificultad de comprensión: Si el código no está bien estructurado y documentado, puede ser difícil de entender y modificar.

Fragilidad: Pequeños cambios en el software pueden causar que muchas pruebas fallen.

Los principales desafíos del mantenimiento al código de automatización son:

Mejores Prácticas para Mantener el Código de Automatización

Beneficios de aplicar SOLID en la automatización de pruebas:

Buenas Prácticas de Desarrollo y Generación de Software de Pruebas con Lenguajes Orientados a Objetos

Principios SOLID

Ejemplo

Ejemplo

Ejemplo

Ejemplo

Ejemplo

D: inversión de dependencia

I: segregación de interfaz

L: sustitución de Liskov

S: responsabilidad única

O: abierto/cerrado

Buenas Prácticas de Desarrollo y Generación de Software de Pruebas con Lenguajes Orientados a Objetos

Principios SOLID

Factores del SSP que Influyen en la Automatización de Pruebas

Al evaluar el contexto del SSP y su entorno, se debe detectar los factores que influyen en la automatización para determinar una solución adecuada.

Factores del SSP que Influyen en la Automatización de Pruebas

Interfaces del SSP

API: Interfaz de Programación de Aplicaciones

Factores del SSP que Influyen en la Automatización de Pruebas

Software de terceros

A menudo, el SSP no sólo consiste

En algunos contextos

SAP: Solución de Automatización de Prueba

Factores del SSP que Influyen en la Automatización de Pruebas

Niveles de intrusión

Distintas arquitecturas del Sistema Sujeto a Pruebas pueden requerir diferentes soluciones de automatización de pruebas.

Factores del SSP que Influyen en la Automatización de Pruebas

Diferentes arquitecturas del SSP

Info

Ejemplo

Tamaño y complejidad del SSP

Para sistemas grandes y complejos, un enfoque muy flexible o complejo es correcto.
Para un SSP pequeño y simple, un enfoque sencillo puede ser más adecuado.
Considerar el tamaño y la complejidad del SSP actual y los planes de desarrollo a futuro.

Factores del SSP que Influyen en la Automatización de Pruebas

Factores del SSP que Influyen en la Automatización de Pruebas

IAP: Ingeniero de Automatización de Pruebas.

El IAP

Pero

Muchos factores ya explicados son conocidos cuando el SSP se encuentra disponible.

Durante el desarrollo de la arquitectura y el diseño técnico, se puede emprender el diseño de interfaces software para soportar las pruebas.

Cuando se conocen los requisitos, se pueden seleccionar elementos para la automatización junto con la identificación de los medios para probarlos.

Factores del SSP que Influyen en la Automatización de Pruebas

Incluso cuando el SSP aún no existe, puede iniciarse la planificación de la automatización de pruebas. Por ejemplo:

¿Qué es?
Utilizado

Capa Intermedia

Capa superior

Capa inferior

Hace hincapié
Los probadores
Principio base
Solo sirve

Pirámide de Prueba en la prueba automatizada

Puede ser representativa de la cantidad de pruebas requeridas para cada capa, pero no necesariamente refleja el esfuerzo de la prueba y el tiempo de ejecución.

No refleja ningún criterio de cobertura.

No ofrece información sobre las prioridades de las pruebas o las relaciones entre diferentes pruebas.

Muestra que diferentes pruebas tienen diferentes niveles de granularidad.

Consideraciones sobre la pirámide de prueba:

Pirámide de Prueba en la prueba automatizada

Para el éxito de un proyecto se debe tener una estrategia de prueba donde la automatización agregue valor considerando lo siguiente:

Buenas prácticas en la automatización de pruebas

Gracias por su atención

La capa de pruebas de integración se centra en verificar las interacciones entre diferentes componentes o módulos de la aplicación, junto con su correcto funcionamiento.
Pruebas de Servicio

Imagínate que quieres construir un robot para que juegue tus videojuegos por ti. Necesitarías saber cómo programar el robot (lógica, variables, etc.), entender las reglas del juego (patrones de automatización), y tener un lugar para guardar y organizar las instrucciones del robot (control de versiones).

Aquí es donde entra la automatización de pruebas. En lugar de jugar el juego tú mismo una y otra vez, puedes crear un programa (una especie de robot virtual) que juegue por ti. Este programa seguirá una serie de instrucciones muy precisas y repetirá las mismas acciones una y otra vez, buscando cualquier error o problema.

Page Object Model (POM): una estructura para organizar y mantener los elementos de una interfaz de usuario, lo que facilita la creación y mantenimiento de pruebas.

Patrones de automatización:
Metodologías ágiles:

Entender cómo encaja la automatización en un ciclo de desarrollo ágil: saber cuándo y cómo automatizar las pruebas para que se ajusten a los ritmos de desarrollo ágil.

Conocimientos básicos de programación:

Lógica condicional: saber cómo tomar decisiones en función de ciertas condiciones.Variables: almacenar información que puede cambiar durante la ejecución de la prueba.Bucles: repetir una secuencia de acciones varias veces.Funciones: crear bloques de código reutilizables para realizar tareas específicas.

Diseño para la testabilidad: el software debe diseñarse desde el principio con la testabilidad en mente. Esto implica desacoplar la interfaz de usuario de los datos y exponer las partes internas del software para facilitar las pruebas.

Capacidad de ser probado del software:

¿Cómo harías esto manualmente? Tendrías que jugar el juego una y otra vez, anotando cualquier defecto o problema que encuentres. Esto llevaría muchísimo tiempo y sería muy aburrido. Además, es muy fácil cometer errores cuando haces algo tantas veces.

Comprender el concepto de SSP es fundamental para cualquier persona involucrada en pruebas de software, ya sea un ingeniero de pruebas, un desarrollador o un gestor de proyectos. Al identificar claramente el SSP, podemos:

¿Por qué es importante el concepto de SSP?

En el proyecto actual, notamos que durante los primeros sprints, los puntos de historia completados varían significativamente de 8 a 16. Por ejemplo, en el sprint 3 se completaron 8 puntos de historia, mientras que en el sprint 12 se completaron 16 puntos de historia. Conforme avanza el proyecto y el equipo adquiere más experiencia con el software, la cantidad de puntos de la historia logrados tiende a converger. A continuación se muestra la extrapolación de los números superior e inferior de puntos de la historia.

Velocidad

Extrapolación de límites lineales para estimar la velocidad

Extrapolación

Punto de HU

Conclusión

Depuración: Encontrar y corregir errores en tus scripts de prueba.

Resolución de errores:
¿Por qué son importantes estos conocimientos?

Eficiencia: La automatización te permite ejecutar muchas pruebas en poco tiempo.Confiabilidad: Las pruebas automatizadas son más consistentes y menos propensas a errores humanos.Cobertura: Puedes probar más escenarios y funcionalidades de tu software.Mantenibilidad: Un código de prueba bien estructurado es más fácil de mantener y actualizar.

Control de versiones (Git):

Gestionar los cambios en el código de las pruebas: Saber cómo guardar, versionar y recuperar diferentes versiones de tus scripts de prueba.

  • No todas las pruebas manuales pueden ser automatizadas
  • La automatización solo puede verificar los resultados interpretables por la máquina
  • La automatización solo puede verificar los resultados reales que pueden ser verificados por un oráculo de prueba automatizado
  • No es un reemplazo para las pruebas exploratorias
Las limitaciones de la automatización de la prueba incluyen:
Enfocadas a la interfaz de usuario, por ejemplo: verificando que los botones, formularios y menús funcionen correctamente. Normalmente solo son requeridas algunas pruebas de GUI para obtener una cobertura razonable.
Pruebas de GUI

Alineación con la arquitectura del software: la AAP debe estar diseñada de manera que soporte los requisitos funcionales y no funcionales del software que se está probando.

Arquitectura de Automatización de la Prueba (AAP):

En el proyecto actual, notamos que durante los primeros sprints, los puntos de historia completados varían significativamente de 8 a 16. Por ejemplo, en el sprint 3 se completaron 8 puntos de historia, mientras que en el sprint 12 se completaron 16 puntos de historia. Conforme avanza el proyecto y el equipo adquiere más experiencia con el software, la cantidad de puntos de la historia logrados tiende a converger. A continuación se muestra la extrapolación de los números superior e inferior de puntos de la historia.

Velocidad

Extrapolación de límites lineales para estimar la velocidad

Extrapolación

Punto de HU

Conclusión

Consideración de los costos y beneficios: se debe evaluar cuidadosamente el costo de implementar la automatización en diferentes partes del software y los beneficios que se obtendrán.

Estrategia de Automatización:
Enfocadas en probar componentes individuales o unidades de código de forma aislada. Las pruebas tienen un alcance pequeño, son rápidas de ejecutar y son utilizadas para evaluar si los componentes básicos del software funcionan como se espera.
Pruebas unitarias