Algoritmos de Aprendizaje Automático

Cuando comencé a investigar y a estudiar el tema, primero busqué entender sus partes, o sea, ¿Qué es un algoritmo? ¿Qué es el Aprendizaje Automático? para luego integrar los conceptos. Lo siguiente es algo básico pero permite comenzar a comprender el alcance que ofrece la inteligencia artificial, no sólo para el testing sino para cualquier otra rama de la industria.

Repaso el concepto principal y su relación con nuestra área de conocimiento y práctica: software testing.

Sobre la inteligencia artificial (IA)

La inteligencia artificial (IA) es un campo de la tecnología que se centra en crear máquinas y programas de computadora capaces de realizar tareas que normalmente necesita inteligencia humana o las realizan los seres humanos. Las actividades normales por ahora son: entender el lenguaje natural, reconocer patrones, tomar decisiones, y aprender de la experiencia. Con estas actividades con la IA se busca imitar o replicar algunas de nuestras capacidades humanas para facilitar la realización de ciertas tareas complejas de manera autónoma. Nota: ésto de “de manera autónoma” es para ser discutido en otro momento.

La inteligencia artificial (IA) nos está atravesando a una velocidad que pocos se dan cuenta, fundamentalmente aquellos que no están en nuestra área de manera directa, y transformando el campo del software testing de varias maneras, mejorando la eficiencia, la precisión y la cobertura de las pruebas. 

Automatización Mejorada

La IA puede automatizar tareas repetitivas en el testing de software (Nota: Te invito a pensar cuáles son las actividades que realizas a diario en tu proceso de control de calidad) que requieren intervención manual. Ejemplos: generación de casos de prueba basados en los requisitos del software representados en Historias de Usuario y la ejecución automática de pruebas para detectar errores o problemas de rendimiento. De esta forma nos podemos concentrar en mayores desafíos, entender el negocio que tenemos a cargo y/o mejorar nuestra práctica dentro del proceso de control de calidad que se haya establecido.

Al automatizar estas tareas, la IA reduce el tiempo y el esfuerzo necesarios para las pruebas, permitiendo que los testers se concentren en desafíos más complejos y en la mejora de la calidad del software.

Detección de Patrones y Anomalías

Los algoritmos de IA son excelentes para identificar patrones en grandes volúmenes de datos. En el contexto del testing, esto significa que la IA puede analizar de manera muy rápida los resultados de las pruebas para identificar comportamientos inusuales o errores recurrentes. Esto ayuda a que podamos priorizar las áreas junto con los devs y así corregir defectos más rápidamente.

Pruebas Predictivas y Adaptativas

La IA permite que podamos aplicar técnicas de aprendizaje automático para predecir áreas potenciales de riesgo y sugerir casos de prueba que probablemente descubran errores (Nota: aplicando testing bajo riesgos). Adaptando de esta manera con la IA, estrategias de prueba basándonos en los resultados obtenidos, optimizando continuamente el proceso de prueba para cubrir mejor las funcionalidades críticas del software que tenemos a cargo.

Mejora en la Calidad del Testing

La IA puede analizar nuestro código fuente para sugerir mejoras y detectar posibles puntos de falla antes de que el software entre en la fase de prueba. Esto no solo mejora la calidad del software sino que también reduce el número de ciclos de prueba necesarios, acelerando el tiempo de comercialización. En este sentido, es el mismo concepto aplicable al código de nuestros scripts automatizados.

Testing de Experiencia del Usuario

Con los modelos de IA se puede simular el comportamiento del usuario para probar cómo interactúan las personas reales con una aplicación o software. Esto incluye pruebas de usabilidad, accesibilidad y experiencia del usuario, proporcionando insights valiosos que pueden ser difíciles de obtener solo con métodos de prueba tradicionales. En este punto podemos tener un gran avance.

Mantenimiento Continuo

En entornos de producción, la IA puede continuar monitoreando el software para detectar problemas emergentes, ajustando las pruebas y mantenimientos necesarios en tiempo real. Esto es especialmente útil en entornos de despliegue continuo y prácticas DevOps, donde el software se actualiza con frecuencia y requiere un monitoreo constante para estar atento a las alertas y actuar inmediatamente en consecuencia los equipos que estén a cargo.

Ejemplo Práctico en Agile Testing

En un entorno de desarrollo ágil, por ejemplo, la IA podemos aplicarla para revisar continuamente las historias de usuario y los registros de errores de sprints anteriores para predecir y crear automáticamente los escenarios de prueba más relevantes para el próximo sprint. 

Esto asegura que las pruebas son tanto exhaustivas como eficientes, permitiendo que los equipos respondan rápidamente a los cambios sin comprometer la calidad.

Sobre el aprendizaje automático (Machine Learning, ML)

El aprendizaje automático (Machine Learning, ML) es una rama de la inteligencia artificial que se enfoca en el desarrollo de sistemas que sean capaces de aprender y mejorar su rendimiento a partir de la experiencia adquirida, sin tener que programar de manera explícita. El ML utiliza algoritmos que analizan y reconocen patrones en los datos, lo que les permite hacer predicciones o tomar decisiones basadas en información pasada. Este enfoque permite que podamos mejorar el rendimiento de tareas específicas de manera autónoma a medida que exponemos más cantidad de datos.

Sobre el algoritmo

Un algoritmo es un conjunto de instrucciones o reglas definidas y ordenadas que se siguen para realizar una tarea o resolver un problema específico (Nota: un ejemplo muy tonto pero válido, la receta para preparar una determinada comida). En el contexto de la informática y la matemática, un algoritmo usualmente se implementa como un programa de computadora que procesa datos y produce un resultado. Los algoritmos son fundamentales para realizar cálculos simples hasta operaciones complejas como el procesamiento de datos, la navegación web, y la ejecución de aplicaciones de software.

Muy bien, hecho este preámbulo, voy al punto central de este contenido.

Concepto Principal de los Algoritmos de Aprendizaje Automático

Los algoritmos de aprendizaje automático (Machine Learning, ML) son esencialmente instrucciones matemáticas que permiten al software aprender de los datos sin estar explícitamente programadas para cada tarea específica. Estos algoritmos mejoran su rendimiento al procesar más datos, aprendiendo patrones y tomando decisiones basadas en estadísticas, probabilidades y análisis.

Relación con la Inteligencia Artificial

El aprendizaje automático es un subcampo de la inteligencia artificial (IA) que se centra en desarrollar técnicas que permitan al software aprender. Mientras que la IA en general puede incluir cualquier técnica que permita imitar el comportamiento humano, el ML es específico en el uso de datos para aprender. Esto permite que las soluciones de IA sean más eficientes, adaptables y escalables.

Aplicaciones en la Industria del Desarrollo de Software

En el desarrollo de software, el ML se utiliza para:

  • Optimización de pruebas: Automatización y priorización de casos de prueba basados en los datos históricos de fallos y cambios en el código.
  • Análisis de código: Detectar patrones y sugerir mejoras en el código.
  • Gestión de proyectos: Predecir retrasos en los proyectos basándose en el rendimiento anterior y en las tendencias actuales.
  • Interacción con el usuario: Chatbots y asistentes virtuales que mejoran la experiencia del usuario al aprender de las interacciones pasadas.

Riesgos de la Gestión de Algoritmos de ML

Gestionar algoritmos de ML implica ciertos riesgos:

  • Sesgo en los datos: Los modelos pueden replicar o amplificar sesgos si los datos de entrenamiento están sesgados.
  • Seguridad de los datos: Los modelos ML requieren grandes cantidades de datos, que pueden incluir información sensible.
  • Dependencia de los modelos: Dependencia excesiva en modelos automáticos sin entender completamente su funcionamiento o limitaciones.
  • Obsolescencia: Los modelos pueden volverse obsoletos rápidamente debido a cambios en los patrones de datos subyacentes.

Camino para Aprender a Gestionar Algoritmos de ML

Aprender a gestionar algoritmos de ML requiere un enfoque estructurado:

  • Educación básica en matemáticas y estadísticas: Comprender los fundamentos detrás de los algoritmos.
  • Aprendizaje práctico de ML: Usar plataformas como TensorFlow para experimentar y construir modelos.
  • Cursos y certificaciones: Cursos online ofrecidos en las distintas plataformas a las cuales tengamos acceso, considerando que algunos son free mientras que otros son arancelados.
  • Proyectos prácticos: Aplicar el ML en proyectos del mundo real para comprender los desafíos y soluciones.

Ejemplo de Agile Testing con IA

Imagina que estás trabajando en un proyecto de desarrollo de software usando metodologías ágiles, y luego de haber hecho un cierto análisis, te das cuenta que puedes implementar inteligencia artificial para acelerar la comprensión de las historias de usuario y extraer automáticamente los escenarios de prueba. Aquí va un ejemplo concreto de cómo podría funcionar:

Contexto: Un equipo de desarrollo está trabajando en una nueva funcionalidad para una aplicación web de comercio electrónico. Las historias de usuario describen varias interacciones del usuario con un nuevo carrito de compras.

Implementación de IA:

  • Entrenamiento de un Modelo de ML: Primero, se entrena un modelo de ML usando datos de historias de usuario anteriores y cómo se tradujeron en escenarios de prueba. Este modelo aprende a identificar patrones en el lenguaje de las historias de usuario. Aclaración: los datos de las historias de usuario y las historias de usuario deben haber pasado por un proceso previo de calidad que asegure que esté todo bien definido, alcanzado y actualizado.
  • Integración con las Herramientas de Gestión de Proyectos: El modelo se integra con herramientas como JIRA, donde se recopilan y se escriben las historias de usuario.Aclaración: En este caso habrá que crear un proyecto especial y tal vez con una cierta estructura distinta al resto para que se pueda integrar a los proyectos existentes.
  • Extracción Automática de Escenarios: Cuando se introduce una nueva historia de usuario en el sistema, el modelo de ML analiza el texto y automáticamente sugiere escenarios de prueba basados en los patrones aprendidos. Por ejemplo, si una historia menciona «añadir un producto al carrito», el modelo podría sugerir un escenario de prueba que incluya «Verificar que el contador de productos en el carrito se incremente».

Automatización de Pruebas con Selenium WebDriver y Gherkin:

  • Generación de Casos de Prueba: Los escenarios sugeridos por el modelo se transforman en casos de prueba escritos en Gherkin, facilitando su lectura y comprensión.
  • Scripting en Selenium con Java: Los desarrolladores o testers escriben scripts en Java usando Selenium WebDriver para automatizar los casos de prueba. Por ejemplo, se automatiza el proceso de añadir un producto al carrito y verificar el contador de productos.
  • Ejecución y Validación: Los casos de prueba se ejecutan automáticamente en cada sprint o después de cada cambio importante, verificando que la nueva funcionalidad trabaje como se espera y detectando regresiones.

Este enfoque no sólo acelera el proceso de comprensión y creación de casos de prueba, sino que también asegura que las pruebas sean relevantes y exhaustivas, reduciendo el riesgo de errores humanos y mejorando la calidad del software. (Nota: para lograr definir e implementar este proceso como te imaginarás habrá que definir e implementar otras iniciativas previamente y aquí es donde los OKR’s nos pueden ser de mucha utilidad. Sobre esta metodología de planificación, he publicado varios contenidos y lo seguiré haciendo.)

Nota final: Me puedes seguir en LinkedIn donde también publico artículos y si quieres dejarme tu opinión, comentarios y Like, serán muy bien recibidos. Gracias por seguirme.

Gus Terrera

Apasionado por el agile testing y la ia.