¿Qué son las pruebas unitarias?

Las pruebas unitarias son el proceso en el que se prueba la unidad funcional de código más pequeña. Las pruebas de software ayudan a garantizar la calidad del código y son una parte integral del desarrollo de software. Una práctica recomendada en el desarrollo de software es escribir el software como unidades pequeñas y funcionales, y luego escribir una prueba unitaria para cada unidad de código. Puede escribir primero pruebas unitarias como código. Luego, ejecute ese código de prueba de forma automática cada vez que realice cambios en el código del software. De esta forma, si una prueba falla, puede aislar con rapidez el área del código que tiene el error. Las pruebas unitarias imponen paradigmas de pensamiento modular y mejoran la cobertura y calidad de las pruebas. Las pruebas unitarias automatizadas permiten que usted o sus desarrolladores dispongan de más tiempo para centrarse en la programación.

¿Qué es una prueba unitaria?

Una prueba unitaria es un bloque de código que verifica la precisión de un bloque más pequeño y aislado de código de aplicación, normalmente una función o un método. La prueba unitaria está diseñada para verificar que el bloque de código se ejecuta según lo esperado, de acuerdo con la lógica teórica del desarrollador. La prueba unitaria solo interactúa con el bloque de código a través de entradas y salidas (verdaderas o falsas) capturadas afirmadas. 

Un solo bloque de código también puede tener un conjunto de pruebas unitarias, conocidas como casos de prueba. Un conjunto completo de casos de prueba cubre todo el comportamiento esperado del bloque de código, pero no siempre es necesario definir el conjunto completo de casos de prueba.

Cuando un bloque de código requiere que otras partes del sistema se ejecuten, no se puede utilizar una prueba unitaria con esos datos externos. La prueba unitaria debe ejecutarse de forma aislada. Es posible que el código requiera otros datos del sistema, como bases de datos, objetos o comunicaciones de red, para funcionar de forma correcta. Si ese es el caso, utilice fragmentos de datos en su lugar. Es más fácil escribir pruebas unitarias para bloques de código pequeños y lógicamente sencillos.

Estrategias de pruebas unitarias

Para crear pruebas unitarias, puede seguir algunas técnicas básicas para garantizar que se consideren todos los posibles escenarios de casos de prueba.

Verificaciones lógicas

¿El sistema realiza los cálculos correctos y sigue la ruta adecuada en el código cuando se le proporciona una entrada correcta y esperada? ¿Las entradas proporcionadas consideran todas las posibles rutas del código?

Verificación de los límites

¿Cómo responde el sistema a las entradas proporcionadas? ¿Cómo responde a las entradas típicas, los casos periféricos o las entradas inválidas?

Supongamos que espera una entrada entera entre 3 y 7. ¿Cómo responde el sistema cuando se utiliza un 5 (entrada típica), un 3 (caso periférico) o un 9 (entrada inválida)?

Manejo de errores

¿Cómo responde el sistema cuando hay errores en las entradas? ¿Se le pide al usuario que introduzca otra entrada? ¿Se bloquea el software?

Verificaciones orientadas a objetos

Si el estado de algún objeto persistente cambia al ejecutar el código, ¿se actualiza el objeto como corresponde?

Ejemplo de prueba unitaria

Este es un ejemplo de un método muy básico en Python y algunos casos de prueba con el código de prueba unitario correspondiente.

Método Python

def add_two_numbers(x, y):

    return x + y

Pruebas unitarias correspondientes

def test_add_positives():

    result = add_two_numbers(5, 40)

    assert result == 45

def test_add_negatives():

    result = add_two_numbers(-4, -50)

    assert result == -54

def test_add_mixed():

    result = add_two_numbers(5, -5)

    assert result == 0  

¿Cuáles son las ventajas de las pruebas unitarias?

Las pruebas unitarias benefician a los proyectos de desarrollo de software de muchas maneras.

Detección eficaz de errores

Si hay errores de entrada, salida o basados en la lógica dentro de un bloque de código, las pruebas unitarias ayudan a detectarlos antes de que los errores lleguen a producción. Cuando cambia el código, se ejecuta el mismo conjunto de pruebas unitarias, junto con otras pruebas como las de integración, y se esperan los mismos resultados. Si las pruebas fallan (o como se le suelen llamar pruebas rotas), indica errores basados en la regresión. 

Las pruebas unitarias también ayudan a encontrar errores más rápido en el código. Los desarrolladores no dedican mucho tiempo a las actividades de depuración. Pueden identificar con rapidez la parte exacta del código que tiene un error.

Documentación

Es importante documentar el código para saber exactamente lo que se supone que debe hacer ese código. Dicho esto, las pruebas unitarias también actúan como una forma de documentación.

Otros desarrolladores leen las pruebas para ver qué comportamientos se espera que muestre el código cuando se ejecute. Utilizan la información para modificar o refactorizar el código. Refactorizar el código hace que sea más eficaz y esté mejor compuesto. Puede volver a ejecutar las pruebas unitarias para verificar que el código funciona según lo esperado después de los cambios.

¿Cómo utilizan los desarrolladores las pruebas unitarias?

Los desarrolladores utilizan las pruebas unitarias en varias etapas del ciclo de vida del desarrollo de software. 

Desarrollo basado en pruebas

El desarrollo basado en pruebas (TDD) consiste en que los desarrolladores crean pruebas para verificar los requisitos funcionales de un programa antes de crear el código completo. Al escribir primero las pruebas, el código se puede verificar al instante en función de los requisitos, una vez que se realiza la codificación y se ejecutan las pruebas.

Después de completar un bloque de código

Una vez que un bloque de código se considera completo, deben llevarse a cabo pruebas unitarias, si es que aún no se han hecho, mediante el TDD. Luego, puede ejecutar pruebas unitarias al instante para verificar los resultados. Las pruebas unitarias también se ejecutan como parte del conjunto completo de otras pruebas de software durante las pruebas del sistema. Por lo general, son el primer conjunto de pruebas que se ejecutan durante las pruebas de software del sistema completo.

Eficiencia de DevOps

Una de las actividades principales en la aplicación de DevOps a las prácticas de desarrollo de software es la integración continua y la entrega continua (CI/CD). Cualquier cambio en el código se integra de forma automática en la base de código más amplia, se somete a pruebas automatizadas y se implementa si éstas resultan satisfactorias.

Las pruebas unitarias forman parte del conjunto de pruebas, junto con las pruebas de integración. Se ejecutan de forma automática en la canalización de CI/CD para garantizar la calidad del código a medida que se actualiza y cambia con el tiempo.

¿Cuándo son menos útiles las pruebas unitarias?

Las pruebas unitarias no siempre son necesarias para cada caso de prueba de cada bloque de código de cada proyecto. Estos son algunos ejemplos de casos en los que las pruebas unitarias podrían omitirse. 

Cuando el tiempo es limitado

Incluso con los marcos de pruebas unitarias generativas, escribir nuevas pruebas unitarias le toma a los desarrolladores una cantidad significativa de tiempo. Si bien las pruebas unitarias basadas en entradas y salidas son fáciles de generar, las comprobaciones basadas en la lógica son más difíciles.

Cuando los desarrolladores comienzan a escribir las pruebas surgen oportunidades para refactorizar el bloque de código y eso hace que se distraigan y tarden más en completarlas. Esto conlleva plazos de desarrollo prolongados y problemas presupuestarios.

Aplicaciones UI y UX

Cuando el sistema principal se preocupa por la apariencia más que por la lógica, es posible que no haya muchas pruebas unitarias que ejecutar. En estos caso, otro tipo de pruebas, como las pruebas manuales, son una mejor estrategia que las pruebas unitarias.

Bases de código heredadas

Escribir pruebas para incluir el código heredado existente puede resultar casi imposible, en función del estilo del código escrito. Como las pruebas unitarias requieren datos ficticios, escribir pruebas unitarias para sistemas muy interconectados con mucho análisis sintáctico de datos puede llevar demasiado tiempo.

Requisitos en rápida evolución

Según el proyecto, el software puede crecer, cambiar de dirección o tener partes enteras completamente eliminadas en un sprint de trabajo determinado. Si los requisitos cambian con frecuencia, no hay muchas razones para escribir pruebas unitarias cada vez que se desarrolla un bloque de código.

¿Cuáles son las practicas recomendadas de pruebas unitarias?

Le ofrecemos algunas prácticas recomendadas de pruebas unitarias para aprovechar al máximo su proceso.

Utilice un marco de pruebas unitarias

Es una pérdida de tiempo escribir pruebas unitarias explícitas y totalmente personalizadas para cada bloque de código. Existen marcos de pruebas automatizadas para todos los lenguajes de programación populares.

Por ejemplo, Python tiene pytest y unitteest como dos marcos diferentes para pruebas unitarias. Los marcos de pruebas se utilizan ampliamente en proyectos de desarrollo de software de todos los tamaños.

Automatice las pruebas unitarias

Las pruebas unitarias deben activarse en diferentes eventos dentro del desarrollo de software. Por ejemplo, puede utilizarlos antes de enviar los cambios a una ramificación mediante un software de control de versiones, o antes de implementar una actualización de software.

Las pruebas unitarias también se pueden ejecutar en un proyecto completo siguiendo un cronograma. Las pruebas unitarias automatizadas garantizan que las pruebas se ejecuten en todos los eventos y casos apropiados a lo largo del ciclo de vida del desarrollo.

Afirme una vez

Para cada prueba unitaria, solo debe haber un resultado verdadero o falso. Asegúrese de que solo haya una afirmación en su prueba. Una afirmación fallida en un bloque de varias puede causar confusión sobre cuál de ellas produjo el problema.

Ponga en práctica las pruebas unitarias

Las pruebas unitarias son una parte importante de la creación de software, pero muchos proyectos no le dedican recursos. Cuando los proyectos comienzan como prototipos, son pequeños esfuerzos comunitarios o simplemente se codifican con rapidez, las pruebas unitarias pueden omitirse por falta de tiempo.

Sin embargo, cuando se crean proyectos con pruebas unitarias de forma habitual desde el principio, el proceso resulta mucho más fácil de seguir y de repetir.

¿Cuál es la diferencia entre las pruebas unitarias y los otros tipos de pruebas?

Existen muchos otros métodos de prueba de software además de las pruebas unitarias. Todos desempeñan funciones específicas en el ciclo de vida del desarrollo de software:

  • Las pruebas de integración verifican que las diferentes partes del sistema de software que están diseñadas para interactuar, lo hagan correctamente.
  • Las pruebas funcionales verifican que el sistema de software cumpla con los requisitos de software descritos antes de su creación.
  • Las pruebas de rendimiento verifican que el software funcione según los requisitos de rendimiento esperados, como la velocidad y el tamaño de la memoria.
  • Las pruebas de aceptación se producen cuando las partes interesadas o los grupos de usuarios prueban manualmente el software para comprobar que funcione según lo previsto.
  • Las pruebas de seguridad verifican el software para detectar vulnerabilidades y amenazas conocidas. Esto incluye el análisis de la superficie de amenazas, incluidos los puntos de entrada de terceros al software.

Estos métodos de prueba suelen requerir herramientas especializadas y procesos independientes para verificar el software. Muchos de estos métodos se llevan a cabo una vez desarrollada la funcionalidad básica de la aplicación. 

Por el contrario, las pruebas unitarias se ejecutan cada vez que se crea el código. Pueden escribirse tan pronto como se escriba cualquier código y no requieren ninguna herramienta especial para ejecutarse. Las pruebas unitarias son uno de los tipos de pruebas de software más básicos.

¿Cómo puede ayudarlo AWS con sus necesidades de pruebas unitarias?

Amazon Web Services (AWS) brinda a los desarrolladores una amplia gama de ventajas. Puede desarrollar y ejecutar un código y probar un software mediante pruebas unitarias y pruebas de integración. También puede ejecutar canalizaciones de DevOps y aprovechar muchas oportunidades de desarrollo.

Las herramientas para desarrolladores de AWS ofrecen entornos de desarrollo integrados (IDE), complementos y SDK para varios lenguajes de programación y casos de uso de programación. Entre otros beneficios, estas herramientas hacen que las pruebas unitarias sean más eficientes.

AWS Fargate es un motor de computación sin servidor de pago por uso que permite centrarse en la creación de aplicaciones sin tener que gestionar los servidores. Puede ejecutar fácilmente un software de pruebas unitarias automatizadas en Fargate para optimizar el desarrollo de sus aplicaciones. 

También puede encontrar un software de pruebas unitarias de terceros en AWS Marketplace. Puede implementar el software rápidamente y con los controles que necesita. Los vendedores de AWS Marketplace ofrecen opciones de precios flexibles para que pueda pagar lo que necesite cuando lo necesite.

Para comenzar a utilizar pruebas unitarias en AWS cree una cuenta hoy mismo.

Siguientes pasos en AWS

Descubra otros recursos relacionados con el producto
Consulte los servicios de herramientas para desarrolladores 
Regístrese para obtener una cuenta gratuita

Obtenga acceso instantáneo al nivel Gratuito de AWS.

Regístrese 
Comenzar a crear en la consola

Comience a crear en la consola de administración de AWS.

Iniciar sesión