Nuestro Blog

Nuestro equipo de especialistas quiso compartir algunos artículos sobre tecnologías, servicios, tendencias y novedades de nuestra industria en la era de la transformación digital.

Buenas prácticas para las Pruebas Automatizadas

Buenas prácticas para las Pruebas Automatizadas

Las pruebas automatizadas han ganado cada vez más popularidad en las empresas de desarrollo de software, así como en los proyectos en los que son incluidas, sin importar la industria de la compañía que recibe el servicio o la naturaleza de este. Como explicamos en una entrada de blog anterior, el auge de la Automatización de Pruebas se basa la gran cantidad de recursos que se ahorran los departamentos de Testing & QA, ya sea en la reducción de mano de obra, así como en la liberación de tiempo y esfuerzo de los Testers , quienes pueden reducir la operatividad para dedicarse a tareas de mayor valor agregado , como el probar funcionalidades nuevas o no cubiertas en la automatización.

Sin embargo, como toda disciplina, la Automatización de Pruebas conlleva una serie de buenas prácticas que han de tomarse seguirse muy de cerca, logrando así que se cumpla la promesa de optimización de los recursos. Entre esas buenas prácticas encontramos:

Correcta asignación de los procesos de automatización por grados
La gran parte del proceso de testing en cualquier proyecto se basa en las pruebas unitarias, luego estaría la prueba de los componentes, posteriormente la integración y finalizando con API, asignando menos esfuerzo en la interfaz de los usuarios, que sería la parte más operativa de la gestión.
Automatizando las secciones más operativas del proyecto dejamos de pasar por alto las facetas más calificadas y funcionales del proyecto, brindando así el mayor valor al usuario final.

Pirámide de Cohn
Explicación de la pirámide de Mike Cohn:

Pruebas Unitarias: Se utilizan para comprobar el correcto funcionamiento de una porción reducida de código, por ejemplo, un método. Son el punto de partida para detectar fallos, si una prueba falla en este punto, lo más probable es que también fallen las pruebas de los subsiguientes niveles (integración, API, funcional etc.)

Pruebas de API, integración de componentes, servicios: Estas pruebas verifican que la comunicación e intercambio de datos, entre los diferentes módulos de la aplicación o con otras aplicaciones. Sirven para detectar fallos en la forma en la que los diferentes módulos de la aplicación actúan y se integran los unos con los otros.

Pruebas de interfaz gráfica: Requieren elevado tiempo de desarrollo y son lentos en su ejecución y con muchas dependencias con otros componentes. La interfaz gráfica es donde los cambios se dan más frecuentemente, por eso también estas pruebas suelen ser las más inestables, requiriendo actualización periódicamente. Sí, hay que automatizar las pruebas de GUI de las funcionalidades críticas, pero es mejor hacerlo después de haber automatizado los niveles más bajos de la aplicación.

Determinar qué pruebas GUI son fundamentales para el proyecto
No todo se puede ni se debe automatizar, hay que definir los casos de prueba que son candidatos a teniendo en cuenta cosas como validaciones, usabilidad, accesibilidad, etc.
¿Qué automatizar? Pruebas críticas, que no requieran intervención humana, que dé resultados que se puedan comprobar inequívocamente, y cuya complejidad para automatizar no sobrepase el valor que puede aportar.

El tema de la selección de las pruebas de interfaz a automatizar es un tema amplio en sí mismo, por lo que debemos enfocarnos en aquellas áreas críticas para la aplicación, que ya están cerradas y que no van a cambiar constantemente.

Involucrar a todo el equipo en el proceso de testing, así como PM y ajenos al proceso
Se debe incorporar a todo el equipo en la estrategia de automatización de pruebas. Si testing y desarrollo no están en sintonía la automatización fallará. Testing necesita de la colaboración de desarrollo en cuando a seguir ciertas prácticas en el desarrollo de la aplicación para favorecer la automatización de las pruebas.

Adicionalmente, la inclusión de diversos profesionales con conocimiento en el core del negocio del cliente permitirá encontrar detalles y puntos de mejora en el desarrollo, teniendo en cuenta que este será usado por miles de usuarios finales, que demostrarán su descontento con un aplicativo ineficiente.

Asignar recursos con las habilidades necesarias para realizar la automatización
La automatización hecha correctamente requiere más que simplemente grabar y reproducir las pruebas de UI con una herramienta. La automatización debe poder integrarse a nivel proceso de desarrollo para que llegue dar verdaderos beneficios.

Una buena práctica es tener roles separados para el tester funcional y quien automatiza pruebas, combinar estas dos tareas para ahorra recursos es la opción más común, pero termina teniendo el efecto opuesto ya estos roles que requieren habilidades diferentes. Desde hace un par de años algunas compañías como Microsoft, empezaron incorporar el perfil de “Software Development Engineer in Test” o SDET cuyas tareas van desde desarrollar y mantener script de pruebas automatizados (no sólo de interfaz de usuario sino también de seguridad, carga, performance, etc.) hasta implementar y mantener la infraestructura necesaria para integrar y correr esos test como integral parte del proceso de desarrollo.
Este perfil no se encarga en ningún momento de las pruebas funcionales, test plans o test cases, esas tareas quedan en manos de los testers manuales.

Mantener un equipo de testing manual
El objetivo de la automatización de pruebas no es eliminar el testing manual, ni suplantar a los testers. Lo que se automatizan son validaciones que los testers manuales previamente han detectado durante pruebas de regresión o smoke testing.
Es incorrecto pensar que las pruebas automatizadas van a encontrar bugs que los testers manuales hayan omitido. Hay que recordar que se trata de scripts que simplemente corren pasos y verifican resultado, pero el script no verificará nada para lo que no se lo haya programado.

Pasos para elaborar una sólida estrategia de Testing

Determinar el alcance de la Automatización de Pruebas: Todos los aspectos deben considerarse al analizar la viabilidad. También es esencial realizar un análisis de factibilidad en el paquete de casos de prueba manual que permite a los ingenieros de automatización diseñar los scripts de prueba.

Seleccionar la prueba a automatizar correcta: Las pruebas de automatización dependen en gran medida de las herramientas. Es por eso que encontrar la herramienta de prueba de automatización adecuada es una fase crítica para un ciclo de vida de prueba de automatización. Cuando busque una herramienta de automatización, debe tener en cuenta el presupuesto, las tecnologías que se utilizan en el proyecto, la familiaridad de la herramienta de su equipo con los recursos a bordo, la intuición, la flexibilidad y más.

Plan + Diseño + Estrategia de Testing: La siguiente es la fase de la metodología del ciclo de vida de las pruebas de automatización que define cómo abordar y lograr el objetivo de la automatización de pruebas. La selección de un marco de automatización de prueba es lo primero y más importante en la fase de Estrategia de prueba del Ciclo de vida de pruebas de automatización.

Una buena documentación facilita la ejecución: Una vez que instale el entorno de prueba, es el momento de ejecutar el script de prueba. Entonces, esta fase del ciclo de vida de las pruebas de automatización está dedicada a la ejecución de todos los scripts de prueba.

Reporte y análisis de resultados de testing: Después de realizar todos los tipos de pruebas, el equipo de pruebas analizó para identificar qué funcionalidad o componente particular experimenta un número relativo de informes de problemas.

Conclusión
Son muchas las variables que determinan la calidad de la automatización, por los que los responsables de llevar a cabo el desarrollo y/o pruebas de calidad necesitan asignar más recursos para garantizar la calidad del desarrollo.
Te invitamos a que visites nuestra página de Testing & QA para que conozcas más sobre nuestra metodología y calidad de servicio.

Beneficios de las Pruebas Automatizadas

Beneficios de las Pruebas Automatizadas

El proceso de Testing & QA es clave para la elaboración de un software de calidad, no solo por que garantiza el lanzar al mercado un aplicativo eficiente que cumpla con las expectativas del usuario, sino porque permite la mejora continua en los procesos productivos, aumentando las tasas de adopción aún más.

Entre la fase de pruebas, encontramos una gran variedad de disciplinas que, según las necesidades de su negocio y/o del desarrollo, ofrecen una serie de ventajas y desventajas a tomar en cuenta. En el caso particular de las Pruebas Automatizadas, encontramos que estas están ganando terreno entre las empresas de desarrollo de software, sin embargo, existen varios temas a considerar antes de aventurarse en realizar este productivo pero calificado proceso.

¿Qué es el testing automatizado?
La automatización de pruebas software hace referencia al diseño, desarrollo y ejecución scripts a fin de que puedan realizarse esas pruebas sin intervención humana. La principal razón por la cual las empresas están decantándose por el testing automatizado tiene que ver con la optimización de los tiempos de desarrollo y la detección de errores en puntos de este proceso de manera que estos errores sean más sencillos de solucionar, permitiéndonos desarrollar con mayor seguridad.

El ejemplo más común es la automatización de pruebas de GUI (Interfaz Gráfica de Usuario) donde a través de una herramienta o framework se reproducen los pasos de un caso de prueba y se verifica si el resultado de esos pasos es el esperado. Pero la automatización de pruebas no se limita a este tipo de pruebas o al menos, no debería hacerlo.

Principales beneficios
Las empresas software, por la naturaleza de su negocio necesitan ser ágiles, esto significa poder sacar al mercado productos o mejoras de sus productos de forma rápida, sin que la calidad se vea sacrificada. Para alcanzar este objetivo, el uso de metodologías ágiles y automatización de ciertos procesos suelen ser estrategias clave.

El uso de metodologías ágiles se basa en la comprobación continua del código para poder integrar poco a poco al código ya existente, las nuevas funcionalidades o mejoras, actualizando y verificando a diario para obtener un resultado mucho más fiable y en el menor tiempo posible. Esto implica que en cada ciclo de desarrollo se ejecuten los mismos casos de prueba con la finalidad de asegurar que las modificaciones que se hicieron en el código no generen defectos.

La automatización se encarga de agilizar cualquier proceso reduciendo el tiempo en el que se prueba el producto. Automatizar las pruebas más básicas y repetitivas que no requieran intervención humana, sirve para que los testers puedan dedicar más tiempo a probar las áreas críticas de la aplicación y/o hacer pruebas más complejas (casos borde, usabilidad, etc) donde se requiere combinar acciones o verificar desde un punto de vista lógico.

Principales ventajas

  • Fiabilidad: Se elimina el error humano. El script tendrá pasos precisos que serán ejecutados siempre de la misma manera. Ejecutar la misma tarea repetitivamente puede volverse tedioso y después de cierto tiempo el tester puede no prestar la misma atención a los detalles de dicha prueba y omitir algún tipo de error. Al ejecutarse repetidamente como parte del desarrollo permite a los desarrolladores comprobar que sus modificaciones no introdujeron errores en partes críticas de la aplicación.
  • Rapidez: Por ser una prueba de naturaleza automática, será ejecutada mucho más rápido que si la ejecutara un tester. Claro que esto dependerá mucho de la infraestructura con la que se cuente y el nivel de integración de las pruebas. No es lo mismo que las pruebas automáticas se lancen de forma automática cada vez que se deploya la aplicación y corran en un ambiente dedicado, a que, como ocurre en muchos casos, deba iniciarlas manualmente un tester, en su computadora, para que corran en un ambiente compartido (como QA o UAT) donde alguien puede cambiar un dato y la prueba podría fallar. Ni hablar que en este caso también se está utilizando el tiempo del tester que por lo general, si son pruebas de UI, no va a poder utilizar su computadora hasta que las pruebas terminen y eso puede llevar tiempo.
  • Mayor cobertura de pruebas: permite dedicar recursos a probar la aplicación en profundidad.

Algunas desventajas

  • La creación de scripts automatizados es un proceso costoso que requiere un gran nivel de habilidades técnicas.
  • No se pueden automatizar una aplicación al 100%: Por lo general, las aplicaciones siempre van a tener alguna funcionalidad que requiera la interacción del usuario, por ejemplo, hacer click en un link que se envío en un mail de confirmación (este caso podría llegar a automatizarse en algunos casos), o comparar que una imagen sea exactamente igual a la esperada (cada browser la mostrará levemente diferente) o un login que solicita seleccionar imágenes para comprobar que no se trata de un robot, se requieren de intervención del tester y no puede ser automatizado. También dependerá del CI/CD (prácticas de continuous integration y continuous delivery) con la que se cuente.
  • Siempre hay que tener en cuenta cual es el coste y cuál es el beneficio: para evaluar si las pruebas se van a realizar de forma manual o automatizada, teniendo en cuenta el conocimiento de la herramienta a utilizar, lenguajes de programación, tiempos y demás.

Conclusión:
La Automatización de Pruebas debe darse a través de un proceso bien planificado para que sea efectiva desde el punto de vista de costo y debe ser usada para que brinde beneficios reales, siendo realistas sobre los recursos y perfiles que se necesitan involucrar para su implementación. Automatizar no es barato, no es rápido y no es sencillo. Mal implementada, esta estrategia puede convertirse en una pérdida de tiempo, esfuerzo y dinero.

Diferencias entre el Testing Funcional y el No Funcional

Diferencias entre el Testing Funcional y el No Funcional

Una de las etapas fundamentales en un proyecto de Desarrollo de Software es la fase Testing & QA, la cual nos permite identificar posibles fallas en el diseño, usabilidad, seguridad y más aspectos. También permite conocer el rendimiento de cada función del software y/o aplicación, así como sus componentes y características.
 
¿Qué es el Testing Funcional?
Su objetivo se basa en comprobar si las funcionalidades del desarrollo se realizaron siguiendo las especificaciones y requisitos del cliente, así como sus necesidades iniciales. De esta manera se detectan las posibles fallas de las fases anteriores.
En todo proceso de testing de funcional solemos encontrar:

  • Smoke Testing.
  • Unit Testing.
  • Integration Testing.
  • Regression Testing.
  • User Acceptance.
  • Localization.

¿Qué es el Testing No Funcional?
Evalúa la forma en la que un desarrollo y/o aplicativo opera, haciendo foco en sus atributos y calidad. Asegurando así una buena experiencia del usuario, más allá de las funcionalidades que debería tener.
Los tipos de Testing No Funcional más comunes son:

  • Volume Testing.
  • Performance Testing.
  • Usability Testing.
  • Scalability Testing.
  • Stress Testing.
  • Load Testing.
  • Portability Testing.
  • Compliance Testing.
  • Disaster Recovery Testing.

Conclusiones
Como mencionamos previamente, la fase de Testing cada vez más toma importancia en las empresas debido a que no solo permite que las compañías lancen al mercado sus desarrollos y aplicativos sin errores ni problemas, sino que también aumenta la calidad de los mismos al prever, de antemano, cuáles son las fricciones más comunes con las que se encuentran los usuarios, desarrollando innovadoras formas de mejorar cada vez más la experiencia del usuario final.

¿Por qué Automatizar las Pruebas?

¿Por qué Automatizar las Pruebas?

“Pruebas manuales vs. pruebas automatizadas” es una vieja discusión entre expertos de software. Ambas técnicas tienen sus ventajas, sin embargo el desafío está en determinar correctamente cuándo es necesario realizar una prueba automatizada. En este artículo explicamos la aplicación inteligente de las pruebas automatizadas y sus ventajas.

Aplicaciones
La automatización del testing involucra el uso de códigos para desarrollar aplicaciones que ejecutan pruebas automatizadas en software. El testing automatizado difiere del manual ya que este requiere que una persona ejecute las pruebas, mientras que el testing automatizado se basa en una aplicación que ejecuta y supervisa las pruebas por si misma. El automatizado es usado frecuentemente para tareas de test de regresión, buscando errores y defectos en aplicaciones.

El test de regresión es habitualmente agotador y requiere de mucho tiempo, por lo que en este caso el testing automatizado facilita la labor de un tester. Además de ser usado en tests de regresión, el testeo automatizado es también empleado de manera habitual en la simulación de interfaces de usuario. Las aplicaciones de testeo automatizado son capaces de replicar funciones del usuario como entradas de teclado y clicks del mouse Las respuestas de la interfaz gráfica de la simulación son guardadas y examinadas en el input automático.

El testing automatizado posee un gran número de ventajas:

Pruebas Eficientes
El testing automatizado es de alta eficiencia. Un equipo de testers puede asignarse de manera estratégica para lidiar con casos específicos de índole más compleja o riesgosa mientras la aplicación de testing automatizado se encarga de los casos interactivos que requieren mayor tiempo y son una parte necesaria del desarrollo de cualquier programa. Es un método ideal que permite ahorrar tiempo, dinero y recursos humanos. También genera un alto retorno de la inversión.

Actualización y Reutilización
Una de las mayores ventajas del testing automatizado es que las aplicaciones son reutilizables. Junto con esto, cada nuevo test y nuevo error identificado permite la actualización y puesta al día continua del directorio de la aplicación. A pesar de que uno de los mayores desafíos es su alto costo, es importante tener en cuenta que es una solución sólida, duradera y reutilizable vale cada peso invertido en ella.

Consistencia
El testing automatizado ofrece consistencia para los requerimientos del testeo. Normalmente aquellos tests para los cuales las pruebas automatizadas son creadas tienden a ser tareas agotadoras. La automatización disminuye significativamente la chance de errors mediante el uso de sus instrucciones pre-programadas. La intención de las pruebas de regresión es la de determinar si la funcionalidad actual de la aplicación se mantiene en una nueva versión de la misma, una característica esencial para el desarrollo de nuevas funcionalidades para una aplicación existente. El testing automatizado ofrece un nivel esencial de confiabilidad para tareas de testeo.

Programación Única y Vida Útil
Más allá de establecer requerimientos precisos de testeo, las aplicaciones de test automático están diseñadas para partes básicas de futuros casos de prueba. Las aplicaciones de testeo automático internas creadas por una empresa de testing están diseñadas de tal manera que poseen un nivel de flexibilidad suficiente para encarar diferentes productos, mientras que al mismo tiempo llegan también al standard de seguridad necesaria y los procedimientos actualizados de testing. Esta característica mejora aún más la funcionalidad de la automatización del test, convirtiéndolo en una poderosa herramienta capaz de ahorrar tiempo y de proveer una gran cantidad de recursos junto a resultados de la más alta calidad.