differences between unit testing
Una comparación detallada de pruebas unitarias, de integración y funcionales:
Para cualquier aplicación de software, tanto las pruebas unitarias como las pruebas de integración son muy importantes, ya que cada una de ellas emplea un proceso único para probar una aplicación de software.
Pero cualquiera o incluso ambos no pueden reemplazar las pruebas funcionales en ningún momento.
Lo que vas a aprender:
- Pruebas unitarias frente a pruebas de integración frente a pruebas funcionales
- ¿Qué es la prueba unitaria?
- ¿Qué son las pruebas de integración?
- Pruebas unitarias frente a pruebas de integración
- Pruebas funcionales
- Diferencia exacta
- Conclusión
- Lectura recomendada
Pruebas unitarias frente a pruebas de integración frente a pruebas funcionales
Examen de la unidad significa probar módulos individuales de una aplicación de forma aislada (sin ninguna interacción con las dependencias) para confirmar que el código está haciendo las cosas bien.
Pruebas de integración significa comprobar si los diferentes módulos funcionan bien cuando se combinan como un grupo.
Pruebas funcionales significa probar una parte de la funcionalidad en el sistema (puede interactuar con las dependencias) para confirmar que el código está haciendo lo correcto.
Las pruebas funcionales están relacionadas con las pruebas de integración, sin embargo, significan para las pruebas que verifican la funcionalidad de toda la aplicación con todo el código ejecutándose en conjunto, casi una prueba de súper integración.
Las pruebas unitarias consideran la verificación de un solo componente del sistema, mientras que las pruebas de funcionalidad consideran la verificación del funcionamiento de una aplicación con la funcionalidad prevista descrita en la especificación de requisitos del sistema. Por otro lado, las pruebas de integración consideran la verificación de los módulos integrados en el sistema.
Y, lo más importante, para optimizar el retorno de la inversión (ROI), su base de código debe tener tantas pruebas unitarias como sea posible, menos pruebas de integración y la menor cantidad de pruebas funcionales.
Esto se ilustra mejor en la siguiente pirámide de prueba:
Las pruebas unitarias son más fáciles de escribir y más rápidas de ejecutar. El tiempo y el esfuerzo para implementar y mantener las pruebas aumentan desde las pruebas unitarias hasta las pruebas funcionales, como se muestra en la pirámide anterior.
scripts de prueba de muestra para pruebas de software
Ejemplo:
Entendamos estos tres tipos de pruebas con un ejemplo simplificado.
P.ej . Para un teléfono móvil funcional, las partes principales requeridas son 'batería' y 'tarjeta SIM'.
Ejemplo de prueba unitaria - Se comprueba la duración de la batería, su capacidad y otros parámetros. Se comprueba la activación de la tarjeta SIM.
Ejemplo de prueba de integración - La batería y la tarjeta SIM están integradas, es decir, ensambladas para iniciar el teléfono móvil.
Ejemplo de prueba funcional - La funcionalidad de un teléfono móvil se comprueba en términos de sus características y uso de la batería, así como las instalaciones de la tarjeta SIM.
Hemos visto un ejemplo en términos sencillos.
Ahora, tomemos un ejemplo técnico de una página de inicio de sesión:
Casi todas las aplicaciones web requieren que sus usuarios / clientes inicien sesión. Para eso, cada aplicación debe tener una página de 'Inicio de sesión' que tenga estos elementos:
- Nombre de usuario
- Contraseña
- Botón Iniciar sesión / Iniciar sesión
Para las pruebas unitarias, los siguientes pueden ser los casos de prueba:
- Longitud del campo: campos de nombre de usuario y contraseña.
- Los valores del campo de entrada deben ser válidos.
- El botón de inicio de sesión se habilita solo después de que se ingresen valores válidos (formato y longitudinal) en ambos campos.
Para las pruebas de integración, los siguientes pueden ser los casos de prueba:
- El usuario ve el mensaje de bienvenida después de ingresar valores válidos y presionar el botón de inicio de sesión.
- El usuario debe navegar a la página de bienvenida o página de inicio después de una entrada válida y hacer clic en el botón Iniciar sesión.
Ahora, una vez realizadas las pruebas unitarias y de integración, veamos las casos de prueba que se consideran para pruebas funcionales:
- Se verifica el comportamiento esperado, es decir, si el usuario puede iniciar sesión haciendo clic en el botón de inicio de sesión después de ingresar un nombre de usuario válido y valores de contraseña.
- ¿Hay un mensaje de bienvenida que aparecerá después de iniciar sesión correctamente?
- ¿Hay un mensaje de error que debería aparecer en un inicio de sesión no válido?
- ¿Hay cookies de sitio almacenadas para los campos de inicio de sesión?
- ¿Puede iniciar sesión un usuario inactivo?
- ¿Existe algún vínculo de 'contraseña olvidada' para los usuarios que han olvidado sus contraseñas?
Hay muchos más casos de este tipo que le vienen a la mente a un probador funcional mientras realiza pruebas funcionales. Pero un desarrollador no puede ocuparse de todos los casos mientras crea casos de prueba de unidad e integración.
Por lo tanto, hay muchos escenarios que aún no se han probado incluso después de las pruebas unitarias y de integración.
Ahora es el momento de examinar las pruebas unitarias, de integración y funcionales una por una.
¿Qué es la prueba unitaria?
Como sugiere el nombre, este nivel implica probar una 'Unidad'.
Aquí la unidad puede ser la parte más pequeña de una aplicación que se puede probar, ya sea la función individual más pequeña, el método, etc. Los desarrolladores de software son los que escriben los casos de prueba de la unidad. El objetivo aquí es hacer coincidir los requisitos y el comportamiento esperado de la unidad.
A continuación se muestran algunos puntos importantes sobre las pruebas unitarias y sus beneficios:
- Las pruebas unitarias se realizan antes de las pruebas de integración por parte de los desarrolladores de software utilizando técnicas de prueba de caja blanca .
- La prueba unitaria no solo verifica el comportamiento positivo, es decir, la salida correcta en caso de una entrada válida, sino también las fallas que ocurren con una entrada no válida.
- Encontrar problemas / errores en una etapa temprana es muy útil y reduce los costos generales del proyecto. Como las pruebas unitarias se realizan antes de la integración del código, los problemas encontrados en esta etapa se pueden resolver con mucha facilidad y su impacto también es muy inferior.
- Una prueba unitaria prueba pequeños fragmentos de código o funciones individuales para que los problemas / errores encontrados en estos casos de prueba sean independientes y no afecten a los otros casos de prueba.
- Otra ventaja importante es que los casos de prueba unitaria simplifican y facilitan la prueba del código. Por lo tanto, también es más fácil resolver los problemas en una etapa posterior, ya que solo se probará el último cambio en el código.
- La prueba unitaria ahorra tiempo y dinero, y es reutilizable y fácil de mantener.
JUnit ( Marco de Java ), PHPUnit (framework PHP), NUnit (.Net framework), etc.son herramientas populares de prueba unitaria que se utilizan para diferentes lenguajes.
¿Qué son las pruebas de integración?
La prueba de integración está probando la integración de diferentes partes del sistema juntas. Primero se integran dos partes o módulos diferentes del sistema y luego se realizan las pruebas de integración.
El objetivo de las pruebas de integración es comprobar la funcionalidad, la fiabilidad y el rendimiento del sistema cuando se integra.
La prueba de integración se realiza en los módulos que se prueban en la unidad primero y luego la prueba de integración define si la combinación de los módulos da el resultado deseado o no.
Las pruebas de integración pueden ser realizadas por probadores independientes o también por desarrolladores.
Hay 3 tipos diferentes de enfoques de prueba de integración. Analicemos brevemente cada uno de ellos:
a) Enfoque de integración Big Bang
En este enfoque, todos los módulos o unidades se integran y prueban como un todo al mismo tiempo. Esto generalmente se hace cuando todo el sistema está listo para la prueba de integración en un solo momento.
No confunda este enfoque de las pruebas de integración con las pruebas del sistema, solo se prueba la integración de módulos o unidades y no todo el sistema como se hace en las pruebas del sistema.
El mayor enfoque del Big Bang ventaja es que todo lo integrado se prueba a la vez.
Uno mayor desventaja es que se vuelve difícil identificar las fallas.
Ejemplo: En la siguiente figura, la Unidad 1 a la Unidad 6 se integran y prueban utilizando el enfoque Big Bang.
b) Enfoque de arriba hacia abajo
La integración de las unidades / módulos se prueba paso a paso desde el nivel superior al inferior.
La primera unidad se prueba individualmente escribiendo prueba STUBS . Después de esto, los niveles inferiores se integran uno por uno hasta que el último nivel se ensambla y se prueba.
El enfoque de arriba hacia abajo es una forma muy orgánica de integración, ya que es consistente con cómo suceden las cosas en el entorno real.
Lo único preocupación con este enfoque es que la funcionalidad principal se prueba al final.
c) Enfoque de abajo hacia arriba
Las unidades / módulos se prueban desde el nivel inferior al superior, paso a paso, hasta que todos los niveles de unidades / módulos se integran y prueban como una sola unidad. Programas de estimulación llamados CONDUCTORES se utilizan en este enfoque. Es más fácil detectar problemas o errores en los niveles inferiores.
El mayor desventaja De este enfoque es que los problemas de nivel superior solo pueden identificarse al final cuando todas las unidades se han integrado.
Pruebas unitarias frente a pruebas de integración
Habiendo tenido suficiente discusión sobre las pruebas unitarias y las pruebas de integración, veamos rápidamente las diferencias entre las dos en la siguiente tabla:
Examen de la unidad | Pruebas de integración |
---|---|
Se lleva a cabo en la fase inicial de prueba y luego se puede realizar en cualquier momento | Debe realizarse después de la prueba unitaria y antes de la prueba del sistema. |
Prueba el componente único de todo el sistema, es decir, prueba una unidad de forma aislada. | Prueba los componentes del sistema trabajando juntos, es decir, prueba la colaboración de múltiples unidades. |
Más rápido de ejecutar | Puede correr lento |
Sin dependencia externa. Cualquier dependencia externa es burlada o eliminada. | Requiere interacción con dependencias externas (por ejemplo, base de datos, hardware, etc.) |
Simple | Complejo |
Realizado por desarrollador | Realizado por probador |
Es un tipo de prueba de caja blanca. | Es un tipo de prueba de caja negra. |
Mantenimiento económico | Mantenimiento costoso |
Comienza a partir de la especificación del módulo | Comienza desde la especificación de la interfaz |
Las pruebas unitarias tienen un alcance limitado, ya que solo verifican si cada pequeño fragmento de código está haciendo lo que se pretende que haga. | Tiene un alcance más amplio ya que cubre toda la aplicación. |
El resultado de las pruebas unitarias es una visibilidad detallada del código. | El resultado de las pruebas de integración es la visibilidad detallada de la estructura de integración. |
Descubra los problemas dentro de la funcionalidad de módulos individuales únicamente. No expone errores de integración ni problemas en todo el sistema. | Descubra los errores que surgen cuando diferentes módulos interactúan entre sí para formar el sistema general |
Pruebas funcionales
A técnica de prueba de caja negra , donde se prueba la funcionalidad de la aplicación para generar el resultado deseado al proporcionar una determinada entrada, se denomina 'prueba funcional'.
En nuestro procesos de prueba de software , lo hacemos escribiendo casos de prueba según los requisitos y escenarios. Para cualquier funcionalidad, el número de casos de prueba escritos puede variar de uno a muchos.
Los casos de prueba constan básicamente de las siguientes partes:
- Resumen de la prueba
- Requisitos previos (si los hay)
- Pasos de entrada del caso de prueba
- Datos de prueba (si los hay)
- Rendimiento esperado
- Notas (si las hay)
'Basado en requisitos' y 'Basado en escenarios empresariales' son las dos formas de pruebas funcionales que se llevan a cabo.
En las pruebas basadas en requisitos, los casos de prueba se crean según el requisito y se prueban en consecuencia. En una prueba funcional basada en escenarios empresariales, las pruebas se realizan teniendo en cuenta todos los escenarios desde una perspectiva empresarial.
Sin embargo, el mayor desventaja de las pruebas funcionales es la probable redundancia en las pruebas y la posibilidad de perder algunos errores lógicos.
Diferencia exacta
Veamos sus diferencias.
Éstos son algunos de los principales:
Examen de la unidad | Pruebas de integración | Pruebas funcionales | |
---|---|---|---|
Definición y finalidad | Prueba de unidades o módulos más pequeños individualmente. | Prueba de la integración de dos o más unidades / módulos combinados para realizar tareas. | Probar el comportamiento de la aplicación según el requisito. |
Complejidad | Para nada complejo, ya que incluye los códigos más pequeños. | Ligeramente más complejo que las pruebas unitarias. | Más complejo en comparación con las pruebas unitarias y de integración. |
Técnicas de prueba | Técnica de prueba de caja blanca. | Técnica de prueba de caja blanca y caja negra. Prueba de caja gris | Técnica de prueba de caja negra. |
Mayor atención | Módulos o unidades individuales. | Integración de módulos o unidades. | Funcionalidad completa de la aplicación. |
Error / problemas cubiertos | Las pruebas unitarias encuentran problemas que pueden ocurrir con frecuencia en los módulos. | Las pruebas de integración encuentran problemas que pueden ocurrir al integrar diferentes módulos. | Las pruebas funcionales detectan problemas que no permiten que una aplicación realice su funcionalidad. Esto también incluye algunos problemas basados en escenarios. |
Problema de escape | No hay posibilidad de que el problema escape. | Menos posibilidades de que el problema se escape. | Más posibilidades de que el problema se escape ya que la lista de pruebas a ejecutar es siempre infinita. |
Leer también => ¿Qué es la prueba de funciones?
buen bloqueador de ventanas emergentes para chrome
Conclusión
Todos estos tres tipos de pruebas están correlacionados.
Para lograr una cobertura completa, es necesario realizar pruebas unitarias para las rutas / líneas de código, pruebas funcionales y de integración para garantizar que las 'unidades' funcionen juntas de manera cohesiva.
Espero que este artículo le haya dado una idea clara sobre las pruebas unitarias, de integración y funcionales junto con sus diferencias, ¡aunque hay mucho más en estas formas de prueba!
Lectura recomendada
- Mejores herramientas de prueba de software 2021 (Herramientas de automatización de pruebas de control de calidad)
- Spock para pruebas funcionales y de integración con selenio
- Pruebas funcionales versus pruebas no funcionales
- Descarga del libro electrónico Testing Primer
- Las 10 mejores herramientas de prueba de integración para escribir pruebas de integración
- Diferencias clave entre las pruebas de caja negra y las pruebas de caja blanca
- Guía completa de pruebas funcionales con sus tipos y ejemplo
- Pruebas funcionales frente a pruebas de rendimiento: ¿deben realizarse simultáneamente?