Integrantes
Matías Chiappe, Agustín Rodriguez
Porque no queremos que todo explote.
El testing de aplicaciones es el arte de intentar romper un software antes de que lo haga un usuario furioso.
Se trata de poner a prueba la paciencia de la aplicación, encontrando errores, fallos y cualquier cosa que pueda hacer que la app decida lanzar un error en plena acción.
Consiste en la ejecución de diversas pruebas para identificar errores, defectos o vulnerabilidades.
Testing de Aplicaciones: Porque no queremos que todo explote
Testing de Aplicaciones: Porque no queremos que todo explote
Confiar en que "todo va a salir bien" solo funciona en las películas.
Los tests automatizados sirven para:
Verificar el correcto funcionamiento del software en distintos escenarios.
Detectar errores tempranamente, reduciendo costos de corrección.
Facilitar cambios al proporcionar un "colchón de seguridad".
Problemas que resuelven:
Existen diferentes tipos de pruebas, dependiendo del objetivo y el nivel de evaluación:
Testing de Aplicaciones: Porque no queremos que todo explote
Su propósito es asegurar que cada unidad haga exactamente lo que se espera sin depender de otros módulos o sistemas.
✅ Ventajas:
Testing de Aplicaciones: Porque no queremos que todo explote
🚀 Ejemplo en JavaScript utilizando Jest:
Testing de Aplicaciones: Porque no queremos que todo explote
Los test de integración verifican que varios módulos o componentes trabajen correctamente juntos.
Se usan cuando una unidad de código necesita interactuar con bases de datos, APIs, servicios externos o incluso módulos dentro de la misma aplicación.
✅ Ventajas:
Testing de Aplicaciones: Porque no queremos que todo explote
🚀 Ejemplo en Node.js con Axios (API Express):
Testing de Aplicaciones: Porque no queremos que todo explote
Es una prueba que valida el funcionamiento completo de una aplicación, simulando el recorrido de un usuario real desde el inicio hasta el final de un proceso.
Se utilizan para asegurarse de que todas las partes del sistema, desde la interfaz de usuario hasta la base de datos o servicios externos, interactúan correctamente y logran el resultado esperado.
✅ Ventajas:
Testing de Aplicaciones: Porque no queremos que todo explote
🚀 A continuación, se presenta un ejemplo utilizando Cypress:
Testing de Aplicaciones: Porque no queremos que todo explote
Preguntas clave que pueden ayudar a replantear y comparar el uso de distintos tipos de test.
Testing de Aplicaciones: Porque no queremos que todo explote
¿Cuáles de los tipos de test anteriores reconocen?
Preguntas clave que pueden ayudar a replantear y comparar el uso de distintos tipos de test.
Testing de Aplicaciones: Porque no queremos que todo explote
¿Cuáles de los tipos de test anteriores reconocen?
¿Qué estamos buscamos validar?
Preguntas clave que pueden ayudar a replantear y comparar el uso de distintos tipos de test.
Testing de Aplicaciones: Porque no queremos que todo explote
¿Cuáles de los tipos de test anteriores reconocen?
¿Qué estamos buscamos validar?
¿Qué tan frecuente cambiará el código testeado?
Preguntas clave que pueden ayudar a replantear y comparar el uso de distintos tipos de test.
Testing de Aplicaciones: Porque no queremos que todo explote
¿Cuáles de los tipos de test anteriores reconocen?
¿Qué estamos buscamos validar?
¿Qué tan frecuente cambiará el código testeado?
¿Qué tan costoso es mantener los tests?
Preguntas clave que pueden ayudar a replantear y comparar el uso de distintos tipos de test.
Testing de Aplicaciones: Porque no queremos que todo explote
¿Cuáles de los tipos de test anteriores reconocen?
¿Qué estamos buscamos validar?
¿Qué tan frecuente cambiará el código testeado?
¿Qué tan costoso es mantener los tests?
¿Dónde queremos detectar los errores?
La elección entre distintos tipos de tests depende de varios factores, como el tipo de proyecto, la complejidad del software, los recursos disponibles y la cultura de pruebas dentro del equipo.
Testing de Aplicaciones: Porque no queremos que todo explote
Según la opinión de algunos expertos:
Equipos pequeños:
✅ Unitarios y algunos de integración (para asegurar calidad sin sobrecarga).
❌ Tests E2E pesados, ya que son costosos de mantener.
Equipos medianos con desarrollo ágil:
✅ Unitarios, integración y tests exploratorios.
⚠️ Tests E2E limitados solo en flujos críticos.
Grandes empresas / Software crítico:
✅ Combinación de unitarios, integración y E2E bien estructurados.
✅ Pruebas de rendimiento, seguridad y exploratorias.
Testing de Aplicaciones: Porque no queremos que todo explote
La estrategia de testing debe adaptarse al contexto del equipo y del software.
En general, la recomendación de expertos es:
Estrategia recomendada:
✅ 70% test unitarios
✅ 20% test de integración
✅ 10% test UI/E2E (solo lo esencial)
Testing de Aplicaciones: Porque no queremos que todo explote
Uno de los enfoques más populares es la pirámide de pruebas propuesta por Mike Cohn en su libro Succeeding with Agile:
Este modelo sugiere que la estrategia de pruebas debe basarse en tres niveles, priorizando los tests más rápidos y menos costosos en la base:
Testing de Aplicaciones: Porque no queremos que todo explote
Los test de UI (end-to-end o E2E) verifican el comportamiento completo de la aplicación:
❌ Desventajas:
Si tu aplicación tiene una arquitectura bien desacoplada, los test de integración pueden cubrir la mayor parte de los casos sin necesidad de pruebas UI excesivas.
Testing de Aplicaciones: Porque no queremos que todo explote
Imagina el siguiente escenario en el que se implementa un test E2E para verificar el proceso de inicio de sesión:
Testing de Aplicaciones: Porque no queremos que todo explote
El test valida que, después de un inicio de sesión exitoso, se muestre el mensaje "Bienvenido, usuario".
Supongamos que se decide actualizar el mensaje a "¡Hola, Juan! Bienvenido de nuevo.".
Aunque el proceso de autenticación sigue funcionando correctamente, el test fallará porque el mensaje esperado ya no coincide exactamente con el texto mostrado.
Testing de Aplicaciones: Porque no queremos que todo explote
El valor del test se limita a avisar sobre cambios en el diseño en lugar de validar que el proceso de login funcione correctamente.
El uso de tests E2E no reemplaza la necesidad de que miembros del equipo revisen la aplicación como usuarios. Ambos enfoques son complementarios.
Testing de Aplicaciones: Porque no queremos que todo explote
La evaluación humana es crucial para detectar aspectos de usabilidad, experiencia de usuario y detalles subjetivos que las pruebas automatizadas no pueden captar.
¿Qué tipo de errores puede detectar la revisión humana?
¿Podemos encontrar una nueva forma de testear en equipo?
Para complementar y mejorar la capa de testing es recomendable combinar la inspección humana con diversas herramientas y metodologías de automatización.
Testing de Aplicaciones: Porque no queremos que todo explote
1. Integración de Tests Automatizados en el Flujo de PR
Configura flujos de trabajo (por ejemplo, con GitHub Actions) que se disparen automáticamente al crear o actualizar una PR.
2. Uso de Plantillas y Checklists para PRs
Establece plantillas de PR que incluyan secciones específicas donde se requiera indicar qué pruebas se han agregado o actualizado.
3. Revisión y Retroalimentación Enfocada en Tests
Durante la revisión de la PR, los revisores deben prestar especial atención a la parte de testing.
4. Cultura de Test Driven Development (TDD) y Revisiones Colaborativas
Promueve TDD para que la creación de nuevas funcionalidades vaya siempre acompañada de tests.
Gracias.