Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Python intermedio para IA, Unidad 9 — Testing y depuración, 9.2 — Introducción al testing ·

Tests simples para funciones

Tests simples para funciones

Introducción

En el desarrollo de software, especialmente cuando se trabaja con inteligencia artificial y ciencia de datos, es crucial garantizar que cada función cumpla con su especificación. Los tests son una herramienta fundamental para detectar errores y asegurar la calidad del código. En este artículo, exploraremos cómo implementar tests simples para funciones en Python, enfocándonos en el contexto de la inteligencia artificial.

Explicación principal

Para empezar, vamos a definir lo que es un test simple. Un test simple, o test unitario, verifica una sola unidad de código (en este caso, una función) en un entorno aislado y controlado. Esto nos permite validar que la función funcione como esperamos sin interferencias del resto del sistema.

Ejemplo

Vamos a considerar una función sencilla para calcular el promedio de una lista de números:

def promedio(lista_numeros):
    return sum(lista_numeros) / len(lista_numeros)

Para probar esta función, podemos escribir un test simple que verifique diferentes casos, como una lista vacía, una lista con números enteros y una lista con decimales.

import unittest

class TestPromedio(unittest.TestCase):
    def test_promedio_vacia(self):
        self.assertEqual(promedio([]), 0)

    def test_promedio_enteros(self):
        self.assertEqual(promedio([1, 2, 3]), 2.0)

    def test_promedio_decimales(self):
        self.assertAlmostEqual(promedio([1.5, 2.5, 3.5]), 2.5)

En este ejemplo, utilizamos unittest para crear una clase de pruebas que hereda de TestCase. Cada método en esta clase es un test simple, y utilizamos assertEqual y assertAlmostEqual para verificar que la función devuelva los resultados esperados.

Errores típicos / trampas

A medida que escribimos tests, nos encontraremos con varios errores comunes:

  1. Pruebas inadecuadas: A menudo, las pruebas son demasiado restrictivas o no cubren todos los casos posibles. Por ejemplo, si una función devuelva None para un caso especial, debemos asegurarnos de que nuestro test lo detecte.
  1. Dependencias externas: Algunas funciones pueden depender de datos externos (como archivos) o servidores web. Para evitar esto en nuestros tests, podemos usar mocks y stubs para simular la salida esperada.
  1. Pruebas ineficientes: Pruebas que toman mucho tiempo a ejecutarse pueden hacer que nuestro proceso de desarrollo sea lento e ineficiente. Es importante mantener nuestras pruebas lo más rápidas posible.

Checklist accionable

A continuación, presentamos una lista de comprobaciones para asegurarte de que tus tests son robustos y efectivos:

  1. Cada función tiene un test: Verifica que todas las funciones importantes en tu proyecto tengan al menos un test simple.
  2. Casos extremos cubiertos: Asegúrate de incluir casos extremos, como listas vacías o límites numéricos.
  3. Pruebas con mocks y stubs: Si la función depende de datos externos, utiliza mocks para simular su comportamiento.
  4. Verifica el tipo de salida: Asegúrate de que los tests verifiquen no solo el valor devuelto, sino también el tipo correcto (por ejemplo, float, int).
  5. Pruebas con errores: Asegúrate de probar cómo la función maneja casos de error, como divisiones por cero.
  6. Usa herramientas de testing automatizado: Utiliza herramientas como pytest o unittest para facilitar el proceso de prueba y asegurar que los tests se ejecuten automáticamente.

Cierre

Siguientes pasos

  1. Incorpora tests en tu flujo de trabajo diario: Hacer tests debe ser parte integral de tu rutina de desarrollo, no solo una tarea pendiente.
  2. Educación continua: Aprende sobre mejores prácticas en testing y considera asistir a talleres o cursos para mejorar tus habilidades.
  3. Documentación de pruebas: Mantén documentadas las pruebas que has escrito y asegúrate de que otros miembros del equipo también las entiendan.

Asegurarte de escribir tests simples y efectivos es una práctica fundamental en el desarrollo de software, especialmente cuando trabajas con inteligencia artificial. Al seguir estos consejos, puedes mejorar la calidad de tu código y evitar errores costosos en producción.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).