¿Qué es la prueba unitaria?
PRUEBA DE UNIDADES es un tipo de prueba de software en el que se prueban unidades o componentes individuales de un software. El propósito es validar que cada unidad del código de software funcione como se espera. Las pruebas unitarias se realizan durante el desarrollo (fase de codificación) de una aplicación por parte de los desarrolladores. Las pruebas unitarias aíslan una sección de código y verifican su exactitud. Una unidad puede ser una función, método, procedimiento, módulo u objeto individual.
En SDLC, STLC, modelo V, la prueba unitaria es el primer nivel de prueba que se realiza antes de la prueba de integración. La prueba unitaria es una técnica de prueba de WhiteBox que suele realizar el desarrollador. Sin embargo, en un mundo práctico debido a la escasez de tiempo o la renuencia de los desarrolladores a las pruebas, los ingenieros de control de calidad también realizan pruebas unitarias.
En este tutorial, aprenderá:
- ¿Por qué pruebas unitarias?
- Cómo hacer pruebas unitarias
- Técnicas de prueba unitaria
- Herramientas de prueba unitaria
- Desarrollo impulsado por pruebas (TDD) y pruebas unitarias
- Mito de las pruebas unitarias
- Ventaja de la prueba unitaria
- Desventajas de las pruebas unitarias
- Mejores prácticas de pruebas unitarias
¿Por qué pruebas unitarias?
Las pruebas unitarias son importantes porque los desarrolladores de software a veces intentan ahorrar tiempo haciendo pruebas unitarias mínimas y esto es un mito porque las pruebas unitarias inapropiadas conducen a un alto costo de reparación de defectos durante las pruebas del sistema, las pruebas de integración e incluso las pruebas beta después de que se construye la aplicación. Si se realizan las pruebas unitarias adecuadas en el desarrollo inicial, al final se ahorra tiempo y dinero.
Estas son las razones clave para realizar pruebas unitarias en ingeniería de software:
- Las pruebas unitarias ayudan a corregir errores en las primeras etapas del ciclo de desarrollo y a ahorrar costes.
- Ayuda a los desarrolladores a comprender la base del código de prueba y les permite realizar cambios rápidamente.
- Las buenas pruebas unitarias sirven como documentación del proyecto
- Las pruebas unitarias ayudan con la reutilización del código. Migre tanto su código como sus pruebas a su nuevo proyecto. Modifica el código hasta que las pruebas se vuelvan a ejecutar.
Cómo hacer pruebas unitarias
Para realizar pruebas unitarias , los desarrolladores escriben una sección de código para probar una función específica en una aplicación de software. Los desarrolladores también pueden aislar esta función para probar de manera más rigurosa, lo que revela dependencias innecesarias entre la función que se está probando y otras unidades para que las dependencias puedan eliminarse. Los desarrolladores generalmente usan el marco UnitTest para desarrollar casos de prueba automatizados para pruebas unitarias.
Las pruebas unitarias son de dos tipos
- Manual
- Automatizado
Las pruebas unitarias suelen estar automatizadas, pero aún pueden realizarse manualmente. La Ingeniería de Software no favorece a uno sobre el otro, pero se prefiere la automatización. Un enfoque manual para las pruebas unitarias puede emplear un documento instructivo paso a paso.
Bajo el enfoque automatizado-
- Un desarrollador escribe una sección de código en la aplicación solo para probar la función. Más tarde comentarían y finalmente eliminarían el código de prueba cuando se implementara la aplicación.
- Un desarrollador también podría aislar la función para probarla de manera más rigurosa. Esta es una práctica de prueba unitaria más completa que implica copiar y pegar código en su propio entorno de prueba que en su entorno natural. Aislar el código ayuda a revelar dependencias innecesarias entre el código que se está probando y otras unidades o espacios de datos en el producto. Entonces, estas dependencias pueden eliminarse.
- Un codificador generalmente usa un UnitTest Framework para desarrollar casos de prueba automatizados. Usando un marco de automatización, el desarrollador codifica criterios en la prueba para verificar la exactitud del código. Durante la ejecución de los casos de prueba, el marco registra los casos de prueba fallidos. Muchos marcos también marcarán e informarán automáticamente, en resumen, estos casos de prueba fallidos. Dependiendo de la gravedad de una falla, el marco puede detener las pruebas posteriores.
- El flujo de trabajo de las pruebas unitarias es 1) Crear casos de prueba 2) Revisar / reelaborar 3) Línea de base 4) Ejecutar casos de prueba.
Técnicas de prueba unitaria
Las técnicas de prueba unitaria se clasifican principalmente en tres partes que son las pruebas de caja negra que implican la prueba de la interfaz de usuario junto con la entrada y la salida, las pruebas de caja blanca que implican probar el comportamiento funcional de la aplicación de software y las pruebas de caja gris que se utilizan para ejecutar la prueba suites, métodos de prueba, casos de prueba y realización de análisis de riesgos.
Las técnicas de cobertura de código utilizadas en las pruebas unitarias se enumeran a continuación:
- Cobertura de estados de cuenta
- Cobertura de decisiones
- Cobertura de sucursales
- Cobertura de condición
- Cobertura de la máquina de estado finito
Para obtener más información, consulte https://www.guru99.com/code-coverage.html
Ejemplo de prueba unitaria: objetos simulados
Las pruebas unitarias se basan en la creación de objetos simulados para probar secciones de código que aún no forman parte de una aplicación completa. Los objetos simulados completan las partes faltantes del programa.
Por ejemplo, es posible que tenga una función que necesite variables u objetos que aún no se hayan creado. En las pruebas unitarias, se contabilizarán en forma de objetos simulados creados únicamente con el propósito de las pruebas unitarias realizadas en esa sección de código.
Herramientas de prueba unitaria
Hay varios software de prueba unitaria automatizados disponibles para ayudar con la prueba unitaria. Proporcionaremos algunos ejemplos a continuación:
- Junit: Junit es una herramienta de prueba de uso gratuito que se utiliza para el lenguaje de programación Java. Proporciona afirmaciones para identificar el método de prueba. Esta herramienta prueba los datos primero y luego los inserta en el fragmento de código.
- NUnit: NUnit es un marco de trabajo de pruebas unitarias ampliamente utilizado para todos los lenguajes .net. Es una herramienta de código abierto que permite escribir scripts manualmente. Admite pruebas basadas en datos que pueden ejecutarse en paralelo.
- JMockit: JMockit es una herramienta de prueba unitaria de código abierto. Es una herramienta de cobertura de código con métricas de línea y ruta. Permite burlarse de API con sintaxis de grabación y verificación. Esta herramienta ofrece cobertura de línea, cobertura de ruta y cobertura de datos.
- EMMA: EMMA es un conjunto de herramientas de código abierto para analizar y reportar código escrito en lenguaje Java. Emma admite tipos de cobertura como método, línea, bloque básico. Está basado en Java, por lo que no tiene dependencias de bibliotecas externas y puede acceder al código fuente.
- PHPUnit: PHPUnit es una herramienta de prueba unitaria para programadores PHP. Toma pequeñas porciones de código que se denominan unidades y prueba cada una de ellas por separado. La herramienta también permite a los desarrolladores utilizar métodos de afirmación predefinidos para afirmar que un sistema se comporta de cierta manera.
Estas son solo algunas de las herramientas de prueba de unidades disponibles. Hay muchos más, especialmente para lenguajes C y Java, pero seguro que encontrará una herramienta de prueba unitaria para sus necesidades de programación, independientemente del lenguaje que utilice.
Desarrollo impulsado por pruebas (TDD) y pruebas unitarias
Las pruebas unitarias en TDD implican un uso extensivo de marcos de prueba. Se utiliza un marco de prueba unitaria para crear pruebas unitarias automatizadas. Los marcos de prueba unitarios no son exclusivos de TDD, pero son esenciales para él. A continuación, analizamos algo de lo que TDD aporta al mundo de las pruebas unitarias:
- Las pruebas se escriben antes del código
- Confíe en gran medida en los marcos de prueba
- Todas las clases de las aplicaciones se prueban
- Es posible una integración rápida y sencilla
Mito de las pruebas unitarias
Mito: Requiere tiempo y siempre estoy sobrecargado. ¡Mi código es sólido como una roca! No necesito pruebas unitarias.
Los mitos, por su propia naturaleza, son suposiciones falsas. Estos supuestos conducen a un círculo vicioso de la siguiente manera:
La verdad es que las pruebas unitarias aumentan la velocidad de desarrollo.
Los programadores creen que las pruebas de integración detectarán todos los errores y no ejecutarán la prueba unitaria. Una vez que las unidades están integradas, los errores muy simples que podrían haberse encontrado y solucionado muy fácilmente en la unidad probada requieren mucho tiempo para ser rastreados y corregidos.
Ventaja de la prueba unitaria
- Los desarrolladores que deseen aprender qué funcionalidad proporciona una unidad y cómo usarla pueden consultar las pruebas unitarias para obtener una comprensión básica de la API de la unidad.
- Las pruebas unitarias permiten al programador refactorizar el código en una fecha posterior y asegurarse de que el módulo aún funciona correctamente (es decir, pruebas de regresión). El procedimiento consiste en escribir casos de prueba para todas las funciones y métodos, de modo que siempre que un cambio cause una falla, se pueda identificar y corregir rápidamente.
- Debido a la naturaleza modular de las pruebas unitarias, podemos probar partes del proyecto sin esperar a que se completen otras.
Desventajas de las pruebas unitarias
- No se puede esperar que las pruebas unitarias detecten todos los errores de un programa. No es posible evaluar todas las rutas de ejecución, incluso en los programas más triviales.
- Las pruebas unitarias, por su propia naturaleza, se centran en una unidad de código. Por lo tanto, no puede detectar errores de integración o errores generales a nivel del sistema.
Se recomienda que las pruebas unitarias se utilicen junto con otras actividades de prueba.
Mejores prácticas de pruebas unitarias
- Los casos de prueba unitaria deben ser independientes. En caso de mejoras o cambios en los requisitos, los casos de prueba unitaria no deberían verse afectados.
- Pruebe solo un código a la vez.
- Siga convenciones de nomenclatura claras y coherentes para sus pruebas unitarias
- En caso de un cambio en el código en cualquier módulo, asegúrese de que haya un caso de prueba de unidad correspondiente para el módulo y que el módulo pase las pruebas antes de cambiar la implementación.
- Los errores identificados durante las pruebas unitarias deben corregirse antes de pasar a la siguiente fase en SDLC
- Adopte un enfoque de "prueba como su código". Cuanto más código escriba sin probar, más rutas tendrá que buscar errores.
Resumen
- PRUEBA DE UNIDADES se define como un tipo de prueba de software en el que se prueban unidades o componentes individuales de un software.
- Como puede ver, puede haber muchas cosas involucradas en las pruebas unitarias. Puede ser complejo o bastante simple dependiendo de la aplicación que se esté probando y las estrategias, herramientas y filosofías de prueba utilizadas. Las pruebas unitarias siempre son necesarias en algún nivel. Eso es una certeza.