"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Generación de pruebas unitarias con IA temprana

Generación de pruebas unitarias con IA temprana

Publicado el 2024-11-08
Navegar:693

Acelerar la generación de pruebas unitarias y mejorar la calidad del código

Recientemente, tuve la oportunidad de profundizar en Early, un agente de IA diseñado para la generación automática de pruebas unitarias. Como alguien que trabaja habitualmente con TypeScript y ExpressoTS Framework, tenía muchas ganas de ver cómo Early podía optimizar mi flujo de trabajo. Decidí probar la extensión vscode que crearon en mi nueva biblioteca NPM que estaba desarrollando llamada @expressots/share.

Impresiones iniciales

Lo primero que me llamó la atención de Early fue su capacidad para generar automáticamente pruebas unitarias para mi código base existente. En lugar de crear pruebas desde cero, podría concentrarme en refinar las pruebas generadas y mejorar la solidez y capacidad de prueba de mi código. Este cambio aceleró significativamente mi proceso de desarrollo. El otro aspecto interesante que noté es que al 83% del código generado no le hice ningún ajuste, funcionó de inmediato y aumentó la cobertura de mi código. Ahorrame mucho tiempo.

Ahorro de tiempo y mayor cobertura

En sólo 8,5 horas, logré:

  • Generar pruebas unitarias para aproximadamente 3000 líneas de código.
  • Solucionar problemas y mejorar la capacidad de prueba del código.
  • Logra una cobertura total de código del 88% con 96 pruebas.

El hecho de que pudiera lograr todo esto en un solo día fue extraordinario. El escenario ideal en la prueba unitaria es hacerlo mientras estás desarrollando tus funciones. Lo hice después de que ya tenía una biblioteca, por lo que fueron necesarios algunos ajustes para que el código fuera comprobable.

Resultados positivos

Generación automática de pruebas de casos extremos. Por ejemplo, generó pruebas unitarias para escenarios que involucraban cadenas vacías, incluso cuando se requerían parámetros:

export function printSuccess(message: string, component: string): void {
  stdout.write(chalk.green(`${message}:`, chalk.bold(chalk.white(`[${component}] ✔️\n`))));
}

Al principio, no habría creado pruebas para cadenas vacías en una función tan sencilla. Sin embargo, el enfoque de Early promovió prácticas de programación defensiva, lo que me impulsó a manejar casos extremos que podría haber pasado por alto.

Detección de problemas potenciales

Mientras refinaba las pruebas generadas, encontré un problema de discrepancia de tipos:

Problema: jest.fn() devuelve cualquiera, pero process.exit devuelve nunca, lo que provoca una falta de coincidencia de tipos en TypeScript.
Solución: modifique el simulacro para que coincida con la firma de proceso.exit, garantizando la corrección del tipo.
Este descubrimiento me impulsó a ajustar mi código para mejorar la seguridad de los tipos, destacando cómo Early puede ayudar a identificar problemas sutiles que de otro modo podrían pasar desapercibidos.

Áreas de mejora

A pesar de la experiencia positiva general, encontré algunos desafíos que, si se abordan, podrían mejorar la usabilidad de Early:

  • Compatibilidad de la versión de la biblioteca. Las primeras pruebas generadas utilizan métodos Jest obsoletos en algunos casos, por ejemplo:

Usando Jest 29.7

expect(Compiler.loadConfig()).rejects.toThrowError("process.exit() was called with code 1");

// Versión corregida

expect(Compiler.loadConfig()).rejects.toThrow("process.exit() was called with code 1");
  • Opciones de personalización para la generación de pruebas Si bien generar pruebas para casos extremos fue beneficioso, en algunos escenarios puede que no sea necesario:

Observación: Generar pruebas para cada entrada posible, incluidas cadenas vacías, a veces puede ser excesivo.

Sugerencia: introduzca opciones para personalizar el nivel de generación de pruebas, lo que permitirá a los desarrolladores optar por pruebas de programación defensiva según sea necesario.

  • Mejoras en la interfaz de usuario en la extensión VSCODE La navegación entre Early y otras herramientas destacó algunas limitaciones de la interfaz de usuario:

Visibilidad de los resultados de las pruebas: tuve que cambiar entre Early y Jest para ver qué pruebas pasaron o fallaron.

Estado del árbol de archivos: la jerarquía del proyecto en Early colapsa cuando vuelvo desde otras aplicaciones, lo que me obliga a volver a abrir carpetas repetidamente.
Sugerencia: Mejore la interfaz de usuario para mostrar los resultados de las pruebas en Early, reflejando la estructura de Jest. Mantener el estado del árbol de archivos también mejoraría la experiencia del usuario.

Unit Test Generation with Early AI

  • Burla y seguridad tipográfica El problema con jest.fn() que devuelve any sugiere la necesidad de una burla más precisa:

Observación: El uso de cualquier tipo en simulacros puede generar discrepancias de tipos y potencialmente enmascarar errores.
Sugerencia: perfeccione la generación simulada para utilizar firmas precisas, promoviendo una mejor seguridad tipográfica y reduciendo la necesidad de correcciones manuales.

Conclusión

En general, mi experiencia con Early fue muy positiva. La herramienta aceleró significativamente mi proceso de pruebas unitarias, lo que me permitió concentrarme en refinar las pruebas en lugar de escribirlas desde cero. También me animó a considerar casos extremos y mejorar la solidez de mi código.

Las áreas de mejora son relativamente menores y giran en torno a mejorar la usabilidad y la personalización. Abordar estos problemas convertiría a la herramienta en un aliado aún más poderoso en el desarrollo de software.

¡Felicitaciones al equipo de Early por su excelente trabajo! Me entusiasma ver cómo evoluciona la herramienta y me encantaría seguir brindando comentarios para ayudar a perfeccionarla aún más.

Declaración de liberación Este artículo se reproduce en: https://dev.to/rsaz/unit-test-generation-with-early-ai-31co?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3