Video Summary and Transcription
Esta charla discute la integración del aprendizaje automático en las pruebas de software, explorando su uso en diferentes etapas del ciclo de vida de las pruebas. Destaca la importancia de los datos de entrenamiento y los patrones ocultos en el aprendizaje automático. La charla también cubre la generación de código relevante para la automatización de pruebas utilizando el aprendizaje automático, así como las capacidades de observación y detección de valores atípicos de los algoritmos de aprendizaje automático. Enfatiza el uso del aprendizaje automático en el mantenimiento, la gestión de bugs y la clasificación de bugs basada en niveles de gravedad. La charla concluye con los resultados de la clasificación y la gestión de bugs, incluyendo el uso de clustering.
1. Integrando el Aprendizaje Automático en las Pruebas de Software
En esta sesión, quiero hablar sobre la integración del aprendizaje automático en nuestras actividades diarias de pruebas de software. Discutiremos la integración de las actividades de aprendizaje automático en diferentes etapas de las pruebas de software. Comenzaremos desde la primera etapa en el ciclo de vida, analizaremos los requisitos, diseñaremos casos de prueba, implementaremos código de prueba y discutiremos las actividades de mantenimiento. Necesitamos usar el aprendizaje automático para mejorar nuestras actividades debido a la complejidad de los sistemas que probamos, la necesidad de cubrir diferentes interfaces e integraciones, y los problemas de tiempo y recursos que enfrentamos. Las máquinas y los robots pueden ayudarnos, como ya lo hacen en nuestra vida diaria.
¡Hola a todos! Mi nombre es Mesut Turkal. Soy un ingeniero de aseguramiento de calidad de software, y en esta sesión, quiero hablar sobre la integración del machine learning en nuestras actividades diarias de pruebas de software. El machine learning es hoy en día un tema muy candente, todo el mundo habla de ello, todo el mundo intenta sacar ventaja para mejorar su eficiencia. Entonces, ¿qué pasa con las actividades de aseguramiento de calidad, verdad? También podemos mejorar nuestra eficiencia, quizás podemos reducir algunas tareas manuales, y podemos de alguna manera sacar provecho del uso del machine learning en nuestras actividades en diferentes etapas. Entonces, esto es lo que haremos. Discutiremos la integración, o el aprovechamiento de las actividades de machine learning en diferentes etapas de las pruebas de software. Comenzaremos desde la primera etapa en el ciclo de vida, que es incluso analizar los requisitos y diseñar algunos casos de prueba, y luego discutiremos cómo podemos implementar el código de prueba también, porque la automation de pruebas es muy importante, y finalmente discutiremos algunas actividades de mantenimiento con la ayuda de las actividades de machine learning. Entonces, esto es lo que vamos a hacer. Primero que nada, vamos a revisar el contexto y por qué necesitamos mejorar nuestras actividades con la ayuda del machine learning. Y en la segunda parte de la presentación, esta es probablemente la parte más importante en la que pasaremos por todas las etapas en el ciclo de vida de las pruebas de software, y finalmente en la última parte compartiré un ejemplo práctico donde intenté usar el machine learning en mi proyecto personal y explicaré lo que hice y compartiré algunos resultados. Así que comencemos con la primera parte, la parte de introducción y las necesidades o el contexto de uso del machine learning en las pruebas de software. Necesitamos usar el machine learning para mejorar o apoyar nuestras actividades porque tenemos varios desafíos. Las pruebas de software ya no son fáciles. Las aplicaciones, los sistemas que estamos probando son demasiado complejos, demasiado complicados. Tenemos varias interfaces o interacciones y las aplicaciones que estamos probando están hablando, comunicándose con diferentes aplicaciones en diferentes plataformas, ¿verdad? Así que tenemos que probar o cubrir diferentes interfaces o integraciones. Esto significa que tenemos un amplio alcance para probar y, por supuesto, tenemos una restricción de tiempo. El tiempo es precioso. Es muy valioso. Y si nuestros casos de prueba están ralentizando los pipelines, entonces después de algún tiempo no será aceptable, ¿verdad? Porque los desarrolladores o los gerentes de producto comenzarán a quejarse de los casos de prueba, de los casos de prueba que se ejecutan lentamente, porque queremos solucionar nuestros fallos o los problemas lo más pronto posible. Queremos porque esta es una de las mejores entregas, una de las dimensiones de calidad en el contexto de la calidad. Pero para apoyar una entrega rápida, tenemos que hacer frente al tiempo. Tenemos que adaptar rápidamente nuestras soluciones. Tenemos que cubrir rápidamente un gran alcance e integraciones. Así que tenemos restricciones de tiempo, alcance, recursos, por supuesto, el presupuesto es un problema de recursos, quiero decir, costos y problemas de presupuesto. Así que desde muchas dimensiones diferentes, tenemos varios desafíos. Así que parece un poco difícil y duro hacer frente a este desafío. Pero quizás podemos encontrar alguna ayuda. Podemos obtener ayuda de alguien. Y ¿podrían las máquinas o los robots ser alguien que pueda ayudarnos? En realidad, pueden, porque incluso en nuestras rutinas diarias, en nuestra vida diaria, podemos ver en varias situaciones diferentes, ya nos están ayudando. Incluso si estamos viendo en algunas redes sociales
2. Aprendizaje Automático en Pruebas de Software
En esta parte, discutimos cómo funciona el aprendizaje automático y su principio de funcionamiento en las pruebas de software. Exploramos el uso de herramientas de aprendizaje automático, como los algoritmos de procesamiento de lenguaje natural, en las prácticas de pruebas de software. También destacamos la importancia de los datos de entrenamiento y cómo se revelan los patrones ocultos para generar un modelo para predecir futuras reacciones o resultados. Además, trazamos paralelismos entre el aprendizaje automático y el aprendizaje biológico, enfatizando la necesidad de aprendizaje y observación en las pruebas. Finalmente, examinamos el ciclo de vida de las pruebas de software y las etapas involucradas, desde el análisis de los requisitos hasta la ejecución de los casos de prueba y la realización de mantenimiento.
o leyendo algunos artículos, vemos que nos están recomendando. Incluso si leo un artículo, veo que podría estar interesado en algunos artículos similares. Y la mayoría de las veces, es muy preciso, ¿verdad? ¿Cómo funciona? ¿Cómo me conocen? ¿Qué tipo de alcance o contexto podría interesarme? Porque me observan, me conocen, ya saben previamente qué artículos visité, en qué contexto estaba interesado. Y de manera similar, la predicción sería, ¿en qué tipo de alcance similar podría estar interesado? Entonces, hay un patrón subyacente en mis acciones y cuando este patrón oculto se revela después de la observación, que se llama aprendizaje en machine learning, entonces, por supuesto, las acciones futuras serían predichas fácilmente. Entonces, este es el principio de funcionamiento del machine learning, ¿verdad? De manera similar, puede funcionar en nuestras actividades de testing de software también. Por ejemplo, cuando verifico qué tipo de herramientas están utilizando solo el machine learning, esas herramientas que están realizando testing performance, incluso esta consulta puedo hacerla con la ayuda del machine learning. Hoy en día, por supuesto, todos sabemos que hay varios algoritmos o protocolos de procesamiento de lenguaje natural con los que podemos comunicarnos. Entonces, después de enviar nuestras consultas, podemos encontrar varias respuestas precisas. Así que no solo los protocolos o algoritmos de NLP, sino muchos algoritmos que podemos usar en nuestras prácticas de testing de software y veremos cuán rápidos, cuán confiables están trabajando. Y una vez más, recordemos rápidamente cómo funcionan los algoritmos dimensionales. Por supuesto, los data de entrenamiento son muy importantes para predecir algunos resultados precisos porque si no nos aprenden muy bien entonces quizás los resultados que están generando podrían no ser tan precisos o los resultados esperados. Entonces, después de tener suficientes y precisos data consistentes, luego después de observar estos data los patrones ocultos se revelan y se genera un modelo, por lo que cada vez que llega un data próximo, este modelo puede generar qué, cómo o de qué manera reaccionará este data de entrada. El sistema react de qué manera. Esta reacción o el resultado pueden ser predichos por el modelo y este será nuestro resultado y cuando completemos nuestro modelo podemos evaluar el performance y si estamos convencidos con el performance o satisfechos con el performance del modelo, entonces podemos ir y simplemente desplegarlo en producción, pero de lo contrario, podemos intentar mejorar continuamente cambiando los parámetros, haciendo algunas actividades de ajuste fino, jugando con las opcionales o los parámetros del modelo. Entonces, se parece mucho a nuestro aprendizaje biológico porque intenté dar algunos ejemplos previamente en las diapositivas anteriores, como cómo aprendemos algunas cosas. Primero que nada, observamos, intentamos aprender cómo funciona todo el sistema y luego para las situaciones venideras intentamos predecir cuáles podrían ser las reacciones o los resultados relacionados. Por ejemplo, como tester humano, si me pides que pruebe tu sistema, mi respuesta sería probablemente que está bien si tengo recursos o ancho de banda, por supuesto, puedo probar tu sistema, pero primero que nada, por favor enséñame, por favor, déjame aprender tu sistema, incluso si tú mismo no me enseñas, lo aprenderé mediante algunas actividades exploratorias o aprendiendo los documentos, revisando los materiales, haré el aprendizaje, observaré, haré algunas acciones exploratorias, haré clic en los botones, tal vez navegaré a diferentes páginas y observaré, veré cómo el sistema react a mis acciones y luego, finalmente, después de completar mi aprendizaje, puedo adivinar cuáles pueden ser los resultados. Por ejemplo, cuando veo que las API están trabajando de manera segura, entonces probablemente puedo adivinar que si envío una solicitud con tokens o credenciales no autenticados, entonces probablemente tendré un código de respuesta 403. Esta es mi predicción, ¿verdad? Porque ya aprendí, ya observé que el sistema está trabajando de manera segura. Esto funcionará de la misma manera con las máquinas y veamos cómo funciona en nuestros ciclos de vida de testing de software o las etapas. Este es un ciclo de vida muy habitual que seguimos. Por supuesto, ya no está funcionando de manera secuencial o en cascada hoy en día. Está trabajando de manera iterativa, de manera ágil. Pero básicamente así es como funciona, incluso a través de las iteraciones. Comenzamos analizando los requisitos, entendiendo las características, y luego diseñamos algunos casos de prueba para cubrir esos requisitos o las características. Entonces, cuando diseñamos nuestros casos de prueba, tenemos que ejecutarlos. Y podemos ejecutar de manera manual o automatizada. Entonces, si estamos haciendo el testing automatizado, deberíamos el código de prueba. Esta es la implementación que es parte de la etapa de configuración del entorno. Después de la ejecución, la ejecución del caso de prueba es la siguiente después de la configuración del entorno. Y finalmente,
3. Aprovechando el Aprendizaje Automático en el Ciclo de Vida del Caso de Prueba
Si tenemos algún problema en el caso de prueba en sí, podemos mejorar el código de prueba. De lo contrario, si encontramos algún problema con el producto, entonces podemos levantar los bugs o los tickets. Por lo tanto, en cada etapa, podemos de alguna manera aprovechar las actividades de aprendizaje automático. Comencemos a discutir cada etapa una por una, comenzando con el análisis de los requisitos y luego generando de manera relevante algunos casos de prueba. Un número ISBN es una combinación de diferentes números en un formato diferente. Después de observar esto, puedo generar algunos otros casos de prueba inyectando algunos valores diferentes. Pero, por supuesto, hay una forma mucho más sencilla de hacerlo hoy en día, utilizando los protocolos de NLP o los algoritmos.
después de la ejecución, cerramos nuestra actividad de testing realizando el mantenimiento. Si tenemos algún problema en el caso de prueba en sí, podemos mejorar el código de prueba. De lo contrario, si encontramos algún problema con el producto, entonces podemos levantar los bugs o los tickets. Esta es la última etapa de un solo ciclo de vida del caso de prueba. Por lo tanto, en cada etapa, podemos de alguna manera aprovechar las actividades de machine learning. Comencemos a discutir cada etapa una por una, comenzando con el análisis de los requisitos y luego generando de manera relevante algunos casos de prueba. De nuevo, después de observar, después de hacer nuestro aprendizaje, después de hacer nuestro entrenamiento, entonces podemos generar algunos casos de prueba. Por ejemplo, permítanme pasar inmediatamente a un ejemplo, que podría ser una API que vamos a probar. La API de la Interfaz de Protocolo de Aplicación de una biblioteca. Por ejemplo, tenemos una biblioteca y dentro tenemos varios libros. Cada entidad de libro tiene algunos atributos diferentes, como el número ISBN, el precio o el año de publicación del libro. Siempre que envío algunas consultas, obtendré la respuesta relevante. Después de obtener estas respuestas, puedo ver qué tipo de valores representan estos atributos. Un número ISBN es una combinación de diferentes números en un formato diferente. Primero que nada, tenemos un dígito y luego tenemos el carácter guión y luego tres dígitos más y otro carácter guión. Este es un formato diseñado para representar el número ISBN. Este es ya un entrenamiento, ya un aprendizaje. Después de observar esto, puedo generar algunos otros casos de prueba inyectando algunos valores diferentes. No este valor exacto sino algunos valores similares e incluso algunos valores intencionalmente incorrectos. Por ejemplo, si comienzo con dos dígitos, ¿qué sucede? Porque estaría violando el estándar definido para este número ISBN. Estará generando también casos de prueba negativos, que generamos intencionalmente, inyectando algunos valores inesperados. Así que, esto es todo lo que podemos hacer después de aprender, después de ver y hacer nuestras observaciones. Pero, por supuesto, hay una forma mucho más sencilla de hacerlo hoy en día, utilizando los protocolos de NLP o los algoritmos. Así que, podemos simplemente enviar nuestra consulta. Por ejemplo, en este ejemplo, que estoy compartiendo en las diapositivas. Solo estoy explicando mi problema, como, soy un tester, tengo que design algunos casos de prueba y mi escenario de uso es algo así, los usuarios van a esta página web, y luego realizan algunas consultas enviando algunas palabras clave a los campos de texto en la página web. Así que, este es mi escenario. Por favor, define algunos casos de prueba para mí, y puedo ver que ya genera quizás seis, siete casos de prueba, incluyendo escenarios positivos, casos límite, y muchos puntos de cobertura diferentes. Después de que design nuestros casos de prueba, la siguiente etapa es generar el código, implementar el código de prueba, que puede ser nuevamente realizado utilizando NLP. En este ejemplo,
4. Generando Código Relevante para la Automatización de Pruebas
En esta parte, discutimos la generación de código relevante para la automatización de pruebas utilizando el aprendizaje automático. Exploramos el uso de diferentes lenguajes de programación, bibliotecas y marcos, como Python con Selenium, Cypress, Playwrights y Selenium. El código generado es similar a lo que implementaríamos manualmente. El aprendizaje automático ayuda a automatizar el proceso de generación de código y ahorra tiempo y esfuerzo.
Estoy compartiendo en esta diapositiva. Ahora, estoy explicando mi problema, los pasos de la prueba. Paso número uno, ir a esta página, navegar a esta URL. Paso número dos, encontrar, localizar este elemento, y hacer la interacción del usuario como hacer clic en el botón o tal vez escribir algunas palabras clave en los campos de texto, y luego puedo ver que se genera el código relevante. Este era, creo, Python con Selenium y algunas otras bibliotecas. No solo lenguajes de programación específicos o las bibliotecas, sino que también puedo pedir que se genere el código relevante en algunos marcos de automation frameworks. Por ejemplo, en este ejemplo, estoy pidiendo generar el código con un escenario similar, no el mismo pero un escenario similar, en Cypress. Pero también puedo pedir diferentes frameworks, como Playwrights, o Selenium, o cualquier otro. Así que de nuevo, puedo ver que está generando un código que es muy similar a lo que yo implementaría. Porque si no lo hubiera pedido, probablemente implementaría un código muy similar.
5. Generación de Código y Ejecución de Pruebas
Ahora, en términos de generación de código, estoy siguiendo un camino diferente. Comienzo con una consulta de Postman y la convierto a diferentes lenguajes de programación. La implementación de casos de prueba en la automatización de la interfaz de usuario requiere el reconocimiento visual de los elementos. En lugar de usar atributos tradicionales, podemos reconocer visualmente los elementos. Podemos entrenar el código para que coincida visualmente utilizando iconos similares. Después de la implementación, podemos ejecutar el caso de prueba y recopilar métricas como la duración de la ejecución.
Ahora, en el tercer ejemplo, en términos de code generation, esta vez estoy siguiendo un camino diferente. Estoy comenzando con una consulta de Postman, y le pido que convierta esta consulta de Postman a diferentes lenguajes de programación, como, no solo Python, sino JavaScript, y algunos otros también. Entonces, primero, implemento mi consulta de Postman, y copio el valor de curl, y totalmente automatizado, ¿verdad? No pierdo tiempo. Todo es muy rápido, muy preciso, muy confiable. El código que se genera eventualmente es algo que puedo inyectar directamente en mi entorno de automation de pruebas. Continuando, hablando de la implementación de casos de prueba, cuando estamos haciendo la automation de la interfaz de usuario, el reconocimiento visual de los elementos es mucho más importante, ¿verdad? Porque tenemos que localizar los elementos en las páginas web, y cómo lo hacemos en las terminologías de automation de la interfaz de usuario, tenemos que localizar los elementos. De hecho, el código debería localizar los elementos. Normalmente, cómo lo hacemos es que usamos los atributos tradicionales de los elementos, o tal vez la ruta, o las clases, los ID de los elementos, pero todos sabemos que a veces son inestables. Podrían ser cambiados por el equipo de desarrollo. Pueden cambiar el diseño de la página, y a veces los localizadores se rompen. Entonces, ¿qué deberíamos hacer? Tal vez deberíamos, en lugar de usar esos atributos tradicionales o las clases, las rutas, ¿por qué no intentamos reconocer visualmente, como lo hacemos como seres humanos? Por ejemplo, cada vez que estamos escaneando la página web, con nuestros ojos, estamos tratando de ver dónde están los elementos, ¿verdad? ¿Dónde están los botones? En la esquina más a la izquierda, o en el medio de la página, ¿dónde está? Podemos verlo con nuestros ojos. Entonces, de la misma manera, podemos dejar que el código intente coincidir visualmente. Como, si lo entrenamos con varios iconos similares. Por ejemplo, en esta página, estoy compartiendo un repositorio abierto. Como es abierto, lo estoy compartiendo sin ninguna preocupación comercial. Puedes ir y comprobar. Hay varios iconos. Por ejemplo, en este caso, era un carrito de compras en línea. Si estás testing un sitio web en línea, entonces puedes entrenar de esta manera. Y cada vez que tengas un icono similar, no necesariamente 100% igual, pero uno similar, será reconocido como un carrito de compras. Y cada vez que hagas clic en él, puede ser reconocido allí, la ubicación. Y el código puede hacer clic en el elemento reconocido. Y podemos continuar con el resto de los pasos de la prueba. Continuando. Después, después de completar nuestra implementación, entonces podemos ejecutar el caso de prueba. Y lo que podemos hacer durante la ejecución de la prueba, podemos recopilar varias métricas. Por ejemplo, la duración de la ejecución. ¿Cuánto tiempo necesitamos para ejecutar para completar nuestra ejecución de la prueba? Por ejemplo, digamos que son 15 segundos por caso de prueba.
6. Observación y Detección de Valores Atípicos
Los algoritmos de machine learning pueden detectar valores atípicos en los tiempos de ejecución, notificándonos automáticamente de situaciones riesgosas o inesperadas. Al analizar las observaciones y compararlas con los resultados anteriores, podemos identificar posibles problemas e investigar más a fondo.
Y esto es la observación. Esto es el entrenamiento, ¿verdad? Y siempre que tengamos una nueva ejecución, si no toma 15 segundos, sino dos minutos, por ejemplo, no 15 segundos, no 20 segundos, sino dos minutos, es obviamente un valor atípico, ¿verdad? Entonces, en este caso, el algoritmo de machine learning puede advertirme, puede modificarme. Mi resultado esperado era alrededor de 15 segundos, porque esta fue mi observación anterior. Pero esta vez, tomó dos minutos. Por favor, ve y verifica si hay algo mal. Podría haber algunas respuestas que llegaron tarde por parte del sistema, o podría ser algo más. Entonces, todas estas observaciones se pueden hacer automáticamente. Y en lugar de ir a través de todas las ejecuciones, una por una, podemos ser notificados automáticamente sobre lo riesgoso, sobre la ejecución, que podría tener algunos valores atípicos o situaciones inesperadas.
7. Mantenimiento, Gestión de Bugs y Machine Learning
En la etapa de mantenimiento, podemos enseñar a las máquinas a hacer revisiones de código e identificar anti-patrones. Los casos de prueba que fallan por sí mismos pueden ayudar a identificar las causas raíz y proporcionar opciones de solución. La migración entre marcos puede lograrse a través del entrenamiento de modelos. Se compartirá un estudio de caso sobre la gestión de bugs, centrándose en la clasificación de bugs basada en niveles de gravedad. El preprocesamiento y la extracción de características son pasos clave en el machine learning. Convertir el texto en números permite que las computadoras comprendan los datos. La clasificación es la siguiente etapa, seguida de la recopilación de resultados.
Y la etapa final es el mantenimiento. Y la refactorización es una actividad, una opción que podemos hacer en la etapa de mantenimiento. Por ejemplo, revisar el código, o mejorar la refactorización del código. Entonces, si podemos enseñar de alguna manera a las máquinas a hacer revisiones de código, como si les enseñáramos las prácticas raíz, o incluso los anti patterns que debemos evitar, entonces pueden hacer las revisiones de código. Por ejemplo, siempre que tengo un número mágico codificado con dificultad dentro del código, y si enseño a las máquinas que no es un anti-patrón que quiero evitar, entonces puede, siempre que lo detecte, puede notificarme, encontré el anti-patrón aquí, por favor ve y revisa. Acelerará nuestros procesos porque de lo contrario lo que podríamos hacer, podríamos hacer solo revisiones por pares, y tomaría algún tiempo, verdad, enviaría mi código a un compañero de equipo, y él o ella revisará el código, proporcionará la retroalimentación. Revisaré de nuevo, tomará algún tiempo, irá de ida y vuelta, pero de esta manera ya podemos completar o incluso hacer la primera revisión con la ayuda de las máquinas. Y el auto-fallo es otra opción que podemos realizar, que es como siempre que un caso de prueba está fallando, podemos intentar entender la causa raíz automáticamente, y proporcionará algunas opciones para hacer la corrección para evitar este fallo. Y migrar, lo discutí en una de las diapositivas anteriores, como migrar de Cypress a Playwright o convertir de un marco a otro marco, todo eso se puede lograr entrenando nuestros modelos. Y finalmente, la última parte será un case study donde compartiré mis experiencias personales relacionadas con la gestión de bugs y explicaré cómo podemos incluso gestionar nuestros bugs o tickets en nuestros proyectos usando machine learning. Entonces, en este proyecto donde apliqué machine learning, tenía casi 900 tickets en nuestro sistema de seguimiento de problemas. Y en primer lugar, exporté estos tickets de la herramienta de gestión de proyectos a una hoja de cálculo de Excel, y tenía tres niveles de gravedad diferentes. Gravedad 1, 2, 3, ¿verdad? Y esos son diferentes niveles de criticidad, o niveles de prioridad. Entonces, lo que estoy tratando de hacer es clasificar esos bugs en diferentes niveles de gravedad. Entonces, lo que hice para este propósito es, en primer lugar, hice el preprocesamiento, como limpiar los data. Si necesito algún texto en las cadenas en las descripciones que se levantan dentro de los tickets, entonces los elimino, los elimino. O hago algunas formaciones, como eliminar la puntuación, o hacer que todas las palabras sean minúsculas. Entonces, hago este tipo de formaciones. Y luego hago la extracción de características. ¿Qué es la extracción de características? Como todos sabemos en la máquina learning, la descripción normal en inglés que escribo para describir mi problema, para describir mi bug, no puede ser entendida por las máquinas, ¿verdad? Porque este es nuestro idioma como humanos. Pero si queremos hablar, no a otro humano, sino a una PC, entonces no tengo que usar, o debería usar algunos otros idiomas, no inglés. Y es el lenguaje de la máquina. Y ¿cómo funciona? Tengo que convertir estas cadenas, estos valores de texto, en algunos números, básicamente ceros y unos. Esto es lo que una computadora entiende. Entonces, ¿cómo puedo hacer esta conversión? Puedo seguir diferentes enfoques. Pero lo que hice en el caso específico fue simplemente contar el número de frecuencias de palabras en cada oración. Y luego tendré los unos y ceros. Por ejemplo, si una palabra específica ocurre dos veces, tres veces en una oración, entonces la forma binaria de este número sería mi característica para esta muestra. Y después de tener las características, la siguiente etapa es hacer la clasificación en sí. Y finalmente, podemos recoger los resultados de estos modelos.
8. Resultados de la Clasificación y Gestión de Bugs
En el primer ciclo, tuve una matriz de confusión con alrededor del 73% de precisión. Fusioné la clase 2 y 3 para evitar sesgos, ya que la clase 2 era importante para detectar. Recopilé todas las demás clases en una. La precisión resultante fue del 82%, pero aún no es suficiente para todas las actividades. También podemos usar el clustering para gestionar bugs.
Permíteme compartir algunos resultados. En el primer ciclo, esta es la matriz de confusión que tenía. Y tenía alrededor del 73% de precisión. Luego intenté recoger la clase 2 y 3 juntas, y las etiquetas para eso eran 3 y 4. Fusioné esos dos solo para evitar sesgos, porque la clase 2 es la clase donde la mayoría de los bugs están etiquetados. Así que combiné 3 y 4. Lo que significa que la clase 2 para mí era importante detectar. Si tengo un ticket de problema de clase 2, entonces era un bloqueador de lanzamiento para mí, para decidir si la clase 2 o no es una decisión importante. Así que recopilo todas las demás en una clase. Y en este caso, tenía un 82% tal vez aún no es 100% suficiente para aprovechar en mis actividades porque era un problema difícil. Incluso para nosotros mismos, como humanos, a veces discutimos mucho sobre el triage de bugs, ¿verdad? Para mí, a veces es 72. Para alguien más, es un 73 o 4. Así que además de la clasificación, también podemos hacer el clustering. Y podemos gestionar nuestros bugs. Así que en resumen, podemos aprovechar machine learning en varias etapas diferentes, comenzando desde la generación de casos de prueba, y luego podemos hacer la code generation, la implementación, y finalmente las etapas de ejecución y mantenimiento también. Incluso desde nuestros bugs, tickers, podemos clasificarlos para hacer el triage de bugs, o tal vez agruparlos en diferentes grupos para gestionar fácilmente. Así que las palabras finales serían un tema muy candente, ¿las máquinas nos reemplazarán? ¿Perderemos nuestros trabajos debido a machine learning? Porque machine learning está llegando, todo el mundo está asustado, temeroso, hay una falta de claridad sobre lo que haremos en el futuro. Así que por ahora, por supuesto, no sé qué pasará en el futuro, pero por ahora, lo que diría es, si eres un gerente, si eres un CEO de una empresa, ¿qué harías? Contratarías a una persona sin una PC o una PC sin alguien que los opere. Por supuesto, lo que harías es contratar a una persona y darle una PC, ¿verdad? Así que harías una colaboración, harías uso de la colaboración entre esos dos. Entonces, ¿por qué estamos tratando de comparar, pero no solo tratando de hacer una colaboración? Así que estas serían las palabras finales, y muchas gracias por escucharme, y si tienes alguna pregunta, estaré encantado de intentar responderla. Supongo que tendremos un canal para eso, e incluso después del evento, estaré más que encantado de conectarme a través de las redes sociales que estoy compartiendo.
Comments