Hamburger Icon
Introducción al testing de aplicaciones

Introducción al testing de aplicaciones

En este post vamos a ver qué es el testing en ingeniería del software, los diferentes tipos de testing que existen y los motivos de la importancia de su aplicación.

Introducción

De forma general, el testing es una forma de comprobar si una aplicación contiene errores. La idea es ejecutar una serie de tests, de forma manual y/o automatizada, que pongan a prueba las funcionalidades desarrolladas. Esto debería hacerse durante todo el proyecto, desde que se empieza hasta que se acaba.

Tenemos que dar por supuesto que durante el desarrollo se cometen fallos, es lo más normal. El objetivo principal del testing es detectar esos fallos cuanto antes y corregirlos antes de que ese código llegue a producción. Con esto conseguimos que las aplicaciones acaben siendo más robustas, confiables y a prueba de balas.

¿Incremento en tiempos de desarrollo?

Evidentemente, desarrollar tests de calidad lleva su tiempo y puede parecer que haga incrementar el tiempo de desarrollo, pero no es así, todo lo contrario: lo disminuye.

Esto es lo que pasa si no haces tests

Sin pensarlo mucho, puede parecer lógico que si no hacemos tests terminaremos antes, ya que nos ahorraremos el tiempo del desarrollo de los mismos y el tiempo de hacer correcciones para pasar los test satisfactoriamente. ¡Error!

El problema viene luego, cuando al cabo de unos días, semanas o meses aparece el primer bug. No lo dudes, eso va a pasar tarde o temprano, ya que siempre se van a cometer errores durante el desarrollo.

Por lo tanto, al tiempo de desarrollo inicial hay que sumarle el tiempo necesario para hacer las correcciones cada vez que aparezca un error.

¿Y qué sucede cuando nos metemos a revisar código que picamos hace meses? Que casi siempre necesitamos un poquito de tiempo extra para volvernos a meter en el contexto del proyecto y entender cómo funciona todo. Más tiempo.

Si haces tests, terminas antes

Aunque parezca que se vaya a sacrificar un tiempo muy valioso, si durante el desarrollo se dedica tiempo a hacer tests, se reducirá enormemente la aparición de errores a posteriori, con el ahorro de tiempo que conlleva.

¿No habrá nunca ningún bug? Sí, claro que aparecerán bugs, pero con el tiempo, por un lado se van haciendo tests de mejor calidad que cubran mejor la funcionalidad de la aplicación y, por otro lado, se aprende que hay cosas que no podemos controlar y pueden provocar fallos. Aún así, el tiempo total de desarrollo se ve disminuido considerablemente.

Tipos de test

Existen centenares de tipos de test diferentes que se dividen entre funcionales y no funcionales. Algunos de los más habituales son estos.

Tests funcionales

Unitarios: son las pruebas más habituales que se suelen hacer, donde se prepara un test para una parte muy concreta de nuestra aplicación.

Integración: con estos tests se comprueba que las diferentes partes, módulos o unidades de nuestra aplicación interaccionan de forma correcta entre ellas.

E2E: las pruebas End-to-end nos sirven para verificar que el comportamiento, flujo de datos y la integridad de la aplicación son correctos de inicio a fin.

Sistema aquí se prueba toda la aplicación en general, teniendo en cuenta aspectos muy diversos como la seguridad, la funcionalidad, la adaptabilidad entre dispositivos...

Tests no funcionales

Aquí englobaríamos todas las pruebas que hacemos que no están relacionadas con las características propias de la aplicación. Por ejemplo:

  • pruebas de rendimiento
  • tiempos de carga con diferentes volúmenes de datos
  • cómo escala la aplicación
  • pruebas de usabilidad

Por dónde empiezo

Existen una infinidad de librerías para hacer tests en casi cualquier lenguaje.

Si usas JavaScript, tienes disponibles librerías específicas según el framework que uses: Jest para React, Vue Test Utils para Vue, Jasmine para Angular o Svelte Testing Library para Svelte. Ten en cuenta también que muchas librerías de testing se pueden usar entre diferentes frameworks. Otras librerías podrían ser Mocha, Karma, Nightwatch o Cypress. Puedes ver un ejemplo básico en acción en el post Testing de aplicaciones JavaScript con Cypress.

Si usas Python, tienes librerías como Robot Framework, Pytest, PyUnit/Unittest o Doctest, entre otras. Todo depende de qué tipo de test quieras hacer.

Conclusiones

El testing nos ayuda a verificar que la aplicación hace lo que se supone que tiene que hacer. Ya no nos vale con la excusa de "es que no hay tiempo", porque al final con el testing nos ahorramos mucho trabajo posterior. Según qué partes o aspectos de la aplicación se quieran probar, se preparan tests funcionales o no funcionales.

La mejor forma de empezar es por lo más básico, mirando la documentación de alguna de las librerías de testing más populares en el lenguaje que usemos e intentar aplicar algún ejemplo.