Testing Continuo

El testing continuo permite aumentar la productividad y mejorar la calidad de los desarrollos de software

El testing continuo, o pruebas continuas, fue en un principio la forma de reducir el tiempo de espera de los desarrolladores para ver los resultados de las pruebas

Para conseguirlo, se empezaron a introducir pruebas automatizadas, ejecutadas a partir del propio entorno, además de las clásicas ejecutadas por los propios testers.

¿Qué es el testing continuo?

El testing continuo es un proceso, basado fundamentalmente en pruebas tempranas, pero que además también trata de conseguir que se puedan incrementar la frecuencia y autonomía de las pruebas, por medio de la automatización.

Así, las pruebas continuas, se convierten en una parte imprescindible mediante su incorporación al proceso de entrega o despliegue continuo en el desarrollo de software.

continuous-testing

Ventajas de testing continuo

Feedback

Gracias a la automatización, las ejecuciones de las pruebas se pueden reducir, lo que conlleva que se pueda facilitar los resultados antes a los desarrolladores.

Por otro lado, el ciclo continuo, hace que se pueda aumentar la frecuencia con la que se realizan las pruebas, y de este modo, se pueden realizar iteraciones más cortas y obtener el feedback de cada componente desarrollado de forma más breve.

Detección temprana

El testing continuo, al estar basado en pruebas tempranas, consigue detectar antes los defectos de las aplicaciones.

Y es en las primeras fases de los desarrollos cuando los errores son:

  • Más fáciles de solucionar, ya que el equipo de desarrollo ha programado esa parte recientemente.
  • Más económicos de resolver, pues todavía no entran en juego factores como entornos de producción, y el usuario no se queda sin servicio.

Despliegues

Otra de las ventajas de las pruebas continuas, derivado del mayor número de pruebas, y por consiguiente, mejorar la calidad del producto reduciendo las iteraciones, es que se puede aumentar la frecuencia con la que se despliega.

Y al ritmo que evolucionan las empresas tecnológicas, esa ventaja cobra más valor.

Errores en producción

Por lógica, aumentando el número y calidad de las pruebas realizadas, y detectando más errores en las fases iniciales, podrás ver que los errores en producción de tu desarrollo se reducen drásticamente.

Deuda técnica

El testing continuo permite ir un paso más allá, no limitándose a la detección de bugs o vulnerabilidades, sino anticipándose a su aparición.

Para ello, este proceso permite también analizar los problemas de mantenibilidad, detectando code smells que dificultan la escalabilidad del proyecto, y, por lo tanto, la deuda técnica.

Por otro lado, gracias a mejorar la deuda técnica, dispones de más tiempo para centrarte en desarrollar nuevas características y elementos diferenciadores.

Factores clave

Colaboración

La colaboración es el principal factor clave para llevar a cabo un proceso de testing continuo.

En un entorno DevOps, la colaboración no debe limitarse únicamente a los equipos de desarrollo, testing y operaciones. También es importante que el equipo de negocio participe ya que es frecuente que conozca más detalles de lo que quiere el usuario y que al resto se le pase por alto.

Pruebas incrementales y repetibles

Gracias a la automatización, es posible (e importante), tanto programar las pruebas para determinar su orden, como repetirlas cuando sea necesario.

Recuerda que el hecho de que puedan repetirse, y eso significa que no haya que esperar un considerable tiempo a restablecer un entorno, preparar datos o cualquier otra tarea que lo demore, otorga varias de las ventajas que te trae el testing continuo

Resultados determinantes y significativos

Es importante probar, es muy importante probar mucho, pero es todavía más importante probar lo más importante.

No tiene sentido realizar pruebas de carga en una aplicación a la que acceden unos pocos empleados de una organización, o centrarse en defectos menores de mantenibilidad cuando el código contiene vulnerabilidades importantes.

Los resultados no deben presentar lugar a duda, deben ser claros y específicos.

Mientras que, por otro lado, debe dar los resultados que permitan evaluar los elementos más significativos de tu desarrollo.

Priorización

Por último, y relacionado con los factores anteriores, debes tener muy claras las prioridades del desarrollo.

No se debe probar todo, y, además, siendo realistas, nunca tendremos el tiempo disponible para ello.

Así que tener claro los objetivos que la aplicación debe conseguir, el público a quién va dirigido y el uso que se va a realizar de ella, ayudará a que sea más fácil la toma de decisiones para priorizar tanto las pruebas continuas, como el resto de pasos del despliegue continuo (Y por eso también es tan importante que Negocio colabore con Dev, QA y Ops)

Retos del testing continuo

El principal reto que supone desarrollar un proceso de testing continuo, está relacionado con las dependencias.

Las dependencias impiden que la automatización sea sencilla.

Por lo general, causan que se deban crear varios entornos, cada entorno difiere del resto y existen numerosas variables que impiden que el ciclo de testing continuo sea rápido y homogéneo.

Por eso debes tener en mente, siempre claro en la medida de lo posible, intentar homogeneizar la mayor parte del desarrollo, de forma que un despliegue difiera lo mínimo posible en un entorno de producción o de pruebas, o que la compilación sea igual para cada uno de estos destinos.

Herramientas para pruebas continuas

Aunque no hay una categoría como tal de testing continuo en las herramientas disponibles hoy en día, en mi opinión, un proceso de testing continuo, sobretodo enfocadas a aplicaciones web, debería contar con al menos el siguiente tipo de herramientas:

  • Integración continua: Te servirán para construir el producto y empezar con las pruebas unitarias. Podrías utilizar por ejemplo Jenkins, Azure DevOps o Gitlab.
  • Inspección continua: Para poder analizar el código sin que todavía haya llegado a manos del usuario (Recuerda, cuando los errores son más fáciles y económicos de resolver) Aunque mi recomendación es SonarQube, también existen otras herramientas como Kiuwan, Ripstech o Kritika.
  • Medición de carga / rendimiento: Sobretodo en los casos en que la aplicación está destinada a público final y no a empresas. Puedes contar por ejemplo con JMeter.
  • Pruebas de interfaz: Para finalmente validar que todo está en su sitio, y un usuario puede seguir el camino que tienes pensando. En esta categoría sin duda quien reina es Selenium.

Fuentes:

Deja un comentario