Uso de IA para Generar Pruebas Unitarias en Proyectos Software

Clase 20 de 20Curso de Unit Testing en Python

Contenido del curso

Resumen

Escribir pruebas unitarias puede ser un proceso repetitivo, pero hoy existen herramientas de inteligencia artificial que permiten generar y mejorar pruebas de forma rápida y precisa. Lo fundamental es entender qué código se está generando antes de integrarlo en un proyecto, ya que no todo lo que produce una IA es correcto o seguro para producción.

¿Qué herramientas de IA puedes usar para generar pruebas?

Existen varias opciones que se integran directamente en tu editor de código o se usan desde el navegador [01:00]:

  • GitHub Copilot: extensión para tu editor que permite chatear, dar contexto y solicitar la creación de pruebas.
  • SuperMaven: similar a Copilot, con la ventaja de que permite integrar la API de ChatGPT. Si ya pagas la suscripción de ChatGPT, puedes reutilizarla dentro de tu editor.
  • ChatGPT: funciona como un chat independiente al que puedes pasarle contexto completo de tu código y pedirle pruebas o incluso nuevas funcionalidades.

Antes de instalar cualquiera de estas herramientas, hay una advertencia importante: estas IAs se entrenan con millones de repositorios. Así como existen code bases de alta calidad, también hay código deficiente. No copies y pegues sin revisar, porque podrías introducir un bug generado por la inteligencia artificial directamente en producción [02:17].

¿Cómo configurar SuperMaven en Visual Studio Code?

La instalación es directa [02:40]. Solo hay que dar clic en descargar desde su sitio web, lo que abre Visual Studio Code y permite instalar la extensión. Una vez instalada, puedes configurar si deseas autocompletado para Python y comenzar a trabajar.

La técnica clave al usar estas herramientas es escribir comentarios dentro del archivo de pruebas como si fueran instrucciones o prompts. Por ejemplo, al escribir un comentario como # create a test that doesn't allow the deposit to be negative [03:37], SuperMaven autocompleta con una función de prueba que valida que un depósito negativo lance un ValueError.

¿Cómo funciona el enfoque TDD con inteligencia artificial?

Al ejecutar la prueba generada con PyTest, esta falla inicialmente porque el código fuente no tiene un raise ValueError para depósitos negativos [04:22]. Esto es exactamente el flujo de TDD (Test-Driven Development): primero se escribe la prueba, luego se ajusta el código para que pase.

En el método deposit de la clase BankAccount, se agrega un condicional que lanza ValueError cuando el monto es menor que cero [04:50]. La IA incluso sugiere ese código gracias al contexto de la prueba. Al ejecutar nuevamente, la prueba pasa exitosamente y se ha creado un nuevo feature partiendo de la prueba.

¿Cómo usar ChatGPT para parametrizar pruebas?

ChatGPT es especialmente útil para transformar pruebas existentes [05:30]. El proceso consiste en:

  • Copiar la clase completa y enviarla como contexto con la instrucción save in memory this class.
  • Copiar la prueba y pedir: please modify the test to be parametrizable, include negative and positive deposit.

ChatGPT devuelve una versión parametrizada de la prueba que incluye tres escenarios [06:15]:

  • Depósito negativo (-100): espera que se lance ValueError.
  • Depósito positivo (500): espera que el balance pase de 1000 a 1500.
  • Depósito cero (0): espera que el balance se mantenga en 1000.

La prueba parametrizada utiliza el decorador @pytest.mark.parametrize para recibir los valores de depósito, el resultado esperado y si debe lanzar excepción. Dentro de la función, se evalúa si raise_exception tiene un valor: si lo tiene, valida que se lance el error; si es None, compara el balance resultante con el esperado [06:50].

Al ejecutar, las tres pruebas pasan correctamente con sus respectivos parámetros.

¿Qué buenas prácticas seguir al generar código con IA?

  • Siempre revisa el código generado antes de integrarlo.
  • Usa comentarios claros en inglés como prompts dentro de tus archivos.
  • Borra los comentarios de instrucción una vez que la prueba esté lista.
  • Combina el enfoque TDD con la generación automática para crear features más robustos.
  • Publica tus proyectos con pruebas en repositorios públicos de GitHub para ganar visibilidad y seguir aprendiendo.

¿Ya estás usando alguna de estas herramientas en tus proyectos? Comparte tu experiencia y cuéntanos cuál te ha resultado más útil.