02/01/2023
Descubrimos cómo la Inteligencia Artificial ayuda a resolver problemas de testing y qué herramientas de IA usar para realizar nuestros procesos.
En CaixaBank Tech seguimos especialmente de cerca los avances en inteligencia artificial. Una de las últimas tendencias es que la IA está empezando a jugar un papel fundamental en el ciclo de vida del desarrollo de software, y especialmente en la fase de testing de software.
Testing: Inestabilidad en los sets de pruebas
La inestabilidad de los sets de pruebas frente a actualizaciones de software y la dificultad para discernir qué conjuntos de prueba ejecutar ante qué cambios en el código son algunos de los problemas del testing tradicional. Estos problemas no solo dificultan el mantenimiento de las pruebas, sino que además ralentizan la fase de testing y con ello el Time to Market porque se acaban ejecutando grandes subconjuntos de pruebas para probar pequeños cambios en el código.
Soluciones testing con IA
Para combatir estos problemas, actualmente se están desarrollando soluciones de testing que utilizan inteligencia artificial para ayudar a los desarrolladores a centrarse en otras tareas como aumentar la cobertura del código, permitiéndoles desarrollar productos de software de más calidad, con menos recursos y con tiempos de lanzamiento más cortos.
Algunas de las tecnologías basadas en IA que permiten mejorar el proceso de testing son las siguientes:
1. Herramientas de Self-Healing con Inteligencia artificial
El Self-Healing es una tecnología basada en aprendizaje automático que permite reparar de forma automática los sets de pruebas cuando se producen modificaciones en el código de las interfaces gráficas de nuestras aplicaciones o nuestras páginas webs debidas a actualizaciones en alguno de sus componentes.
La aparición de esta tecnología está motivada por las excesivas modificaciones de las baterías de testing que requieren las herramientas de testing tradicionales ante pequeñas modificaciones o actualizaciones de nuestro código. Dichas herramientas provocan que los localizadores que identifican cada uno de los elementos de la web dentro de nuestros sets de pruebas se rompan y las pruebas dejen de ser válidas. Esto obliga a malgastar muchos recursos de tiempo y personas en cada actualización y en el mantenimiento de las pruebas, lo cual ni es óptimo, ni en muchos casos aceptable. Los frameworks de testing basados en Self-Healing (como Healenium) tienen la capacidad de identificar cambios en la página o interfaz y, por medio de algoritmos de Machine Learning, reparar de forma automática las rutas de localizadores rotos en nuestros sets de pruebas minimizando los tiempos de mantenimiento, mejorando la estabilidad de las pruebas automatizadas y permitiendo una mayor adaptabilidad de las pruebas a los cambios en la aplicación y el entorno.
2. Visual Testing basado en IA
Otra de las técnicas que se está implantando en la actualidad es el testing visual basado en algoritmos de visión por computador. Pero ¿qué es el testing visual? ¿Por qué es necesario este tipo de testing y cuál es el papel que juega la IA en él?
Supongamos que queremos hacer testing sobre una web con 21 elementos visuales y que en cada uno de ellos queremos validar características como la visibilidad, la altura, la anchura y el color de fondo. Si necesitamos una aserción de código para testear cada una de estas, necesitaremos 84 aserciones de código. Hasta aquí bien… Pero ahora pensemos: ¿en qué navegador se va a visualizar la web?, ¿Sobre qué sistema operativo se va a ejecutar el navegador?, ¿Cuál es el tamaño de la pantalla en el que se va a proyectar? Todas estas combinaciones podrían dar lugar a miles de líneas de código y cualquier de ellas podría ser susceptible de modificarse con cada nueva versión de la web, haciendo el mantenimiento de las pruebas inviable. Es por ello por lo que necesitamos otro enfoque de testing aparte del testing funcional: el testing visual.
El testing visual captura la parte visual de una web o de una interfaz gráfica de una aplicación y la compara con los resultados esperados por diseño. En otras palabras, ayuda a detectar “bugs visuales” de la página diferentes de los bugs estrictamente funcionales. Los errores visuales ocurren con más frecuencia de la que a priori podamos creer y aunque los tests funcionales validan el comportamiento funcional no están pensados para hacerlo de una forma óptima con el renderizado de las webs. Es por ello por lo que necesitamos test basados en pruebas visuales para detectar errores visuales. El testing visual puede llevarse a cabo principalmente de dos formas: manualmente o mediante pruebas automatizadas.
Testing visual manual
Consiste en que un grupo de personas llevan a cabo las pruebas inspeccionando manualmente pares de capturas de pantallas encontrando las diferencias. Estas diferencias son realmente difíciles de detectar en numerosos casos y cuando el número de combinaciones a testear crece y se tienen múltiples páginas que probar, esta forma de proceder es inviable. Para intentar resolver este problema surgen los tests visuales automatizados.
Testing visual automatizado
Este tipo de tests, que surge como un intento de imitar los tests funcionales automatizados, trata de verificar la apariencia visual de una página completa en lugar de las propiedades de cada elemento visual, con solo una aserción de código. Estos tests se basan en capturar un mapa de bits de una pantalla en varios puntos y comparar el código hexadecimal píxel por píxel con un mapa de bits utilizado como línea base mediante un proceso iterativo. Si el código es diferente se genera un error.
A diferencia de los humanos, son capaces de detectar diferencias de forma rápida y consistente con lo que hacen el mantenimiento de los conjuntos de pruebas más sencillo. Sin embargo, lejos de ser perfectos, estos algoritmos presentan el llamado “problema de prueba de instantánea” o snapshot. Al no ser los píxeles elementos visuales, los algoritmos de suavizado de fuentes o los cambios de tamaño de imágenes pueden generar diferencias a nivel de píxel, y conducir a que el test genere como resultados falsos positivos. Por no hablar de cuando en lugar de contenido estático tenemos también contenido dinámico (noticias, anuncios, etc.). Para solucionar este problema, en los últimos años se han desarrollado herramientas de testing visual impulsados por algoritmos de inteligencia artificial.
Testing visual automatizado mediante IA
Las pruebas automatizadas impulsadas por IA permiten, por medio de algoritmos de visión artificial, detectar e informar de las diferencias entre la renderización final y la visualización prevista para ayudar a focalizar los tests más exhaustivos en los elementos que difieran. En este caso también se toman instantáneas de página a medida que van ejecutando sus pruebas funcionales, pero en lugar de ir comparando píxel por píxel utilizan algoritmos para determinar cuando se han producido errores. Gracias a que la comparación está basada en relaciones (existencia de contenido, ubicaciones relativas) y no en píxeles, estos no necesitan trabajar en entornos de contenido estático para garantizar un alto grado de precisión. Un ejemplo de contenido dinámico podría ser el de la figura 2, en el que disponemos de una web de un periódico con una sección de contenido dinámico (noticias) que va cambiando con el tiempo.
Bots basados en IA
Finalmente, la última tecnología que vamos a presentar es la de testing mediante bots asistidos por IA. A medida que el número de líneas de código de las aplicaciones crece, el set de pruebas a ejecutar para cubrir la cobertura del código se dispara y también la dificultad para saber que pruebas ejecutar ante qué cambios de código. Esto conlleva en muchos casos a ejecutar grandes conjuntos de pruebas o incluso todo el set de pruebas para asegurar pequeñas modificaciones. En otros casos, se opta por no testear todos los escenarios afectados con las posibles consecuencias derivadas de esto, ante la imposibilidad de establecer criterios a seguir para definir qué ejecuciones realizar en cada caso. Para solucionar este problema, se están desarrollando en la actualidad Bots basados en inteligencia artificial y algoritmos de NLP capaces de revisar el estado actual de las pruebas, los cambios recientes en el código, la cobertura y otras métricas, y en base a ello decidir que pruebas son necesarias ejecutar. Esto permite no solo reducir los errores en subidas a producción y aumentar la eficiencia en la automatización de las pruebas, sino que además permite reducir el tiempo de lanzamiento de las versiones al mercado.
Pese al constante progreso que se está logrando con inteligencia artificial en el mundo del testing de software, las tecnologías que hemos presentado se encuentran aún en sus albores, y todavía estamos muy lejos de poder prescindir del testing manual que sigue siendo esencial. No debemos olvidar que aún existen numerosos entornos en los que la contextualización humana es necesaria para asegurar un producto de calidad. Estas tecnologías deben ser siempre un apoyo y no una sustitución de los equipos de testing. Citando a Raj Subramanian, ejecutivo de FedEx: “En lugar de que las soluciones de IA reemplacen a los equipos de control de calidad, aumentemos con ella la cobertura de las pruebas de software”.
tags:
Comparte: