- Pruebas unitarias Vs Pruebas de integración Vs Pruebas funcionales
- ¿Qué son las pruebas unitarias?
- ¿Qué son las pruebas de integración?
- Pruebas unitarias frente a pruebas de integración
- Pruebas funcionales
- Conclusión
- Lecturas recomendadas
Comparación detallada de las 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 ninguno de ellos, ni siquiera ambos, pueden sustituir a las pruebas funcionales en ningún momento.
Pruebas unitarias Vs Pruebas de integración Vs Pruebas funcionales
Pruebas unitarias significa probar módulos individuales de una aplicación de forma aislada (sin interacción con dependencias) para confirmar que el código hace las cosas bien.
Pruebas de integración significa comprobar si diferentes módulos funcionan correctamente cuando se combinan como un grupo.
Pruebas funcionales significa probar una parte de la funcionalidad del sistema (puede interactuar con dependencias) para confirmar que el código hace lo correcto.
Las pruebas funcionales están relacionadas con las pruebas de integración, sin embargo, se refieren a las pruebas que comprueban la funcionalidad de toda la aplicación con todo el código ejecutándose conjuntamente, casi una superprueba de integración.
En las pruebas unitarias se comprueba un solo componente del sistema, mientras que en las pruebas funcionales se comprueba el funcionamiento de una aplicación con respecto a la funcionalidad prevista descrita en la especificación de requisitos del sistema. Por otro lado, en las pruebas de integración se comprueban 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 el mayor número posible de pruebas unitarias, menos pruebas de integración y el menor número de pruebas funcionales.
Esto se ilustra mejor en la siguiente pirámide de pruebas:
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 aumenta de las pruebas unitarias a las pruebas funcionales, como se muestra en la pirámide anterior.
Ejemplo:
Comprendamos estos tres tipos de pruebas con un ejemplo demasiado simplificado.
Por ejemplo Para que un teléfono móvil funcione, las principales piezas necesarias son la "batería" y la "tarjeta SIM".
Pruebas unitarias Ejemplo - Se comprueba la vida útil, la capacidad y otros parámetros de la batería. 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 poner en marcha el teléfono móvil.
Ejemplo de prueba funcional - La funcionalidad de un teléfono móvil se comprueba en función de sus características y el uso de la batería, así como las facilidades de la tarjeta sim.
Hemos visto un ejemplo en términos sencillos.
Veamos ahora 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 ello, cada aplicación tiene que tener una página de "Inicio de sesión" que contenga estos elementos:
- Cuenta/Nombre de usuario
- Contraseña
- Botón de inicio de sesión
Para las pruebas unitarias, los casos de prueba pueden ser los siguientes:
- Longitud de campo - campos de nombre de usuario y contraseña.
- Los valores de los campos de entrada deben ser válidos.
- El botón de inicio de sesión sólo se activa cuando se introducen valores válidos (formato y longitud) en ambos campos.
Para las pruebas de integración, los casos de prueba pueden ser los siguientes:
- El usuario ve el mensaje de bienvenida después de introducir valores válidos y pulsar el botón de inicio de sesión.
- El usuario debe ser navegado a la página de bienvenida o página de inicio después de la entrada válida y haciendo clic en el botón de inicio de sesión.
Ahora, una vez realizadas las pruebas unitarias y de integración, veamos las adicionales casos de prueba que se tienen en cuenta para las pruebas funcionales:
- Se comprueba 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 introducir un nombre de usuario y una contraseña válidos.
- ¿Hay algún mensaje de bienvenida que deba aparecer después de iniciar sesión con éxito?
- ¿Hay algún mensaje de error que deba aparecer en caso de inicio de sesión no válido?
- ¿Existen cookies del sitio almacenadas para los campos de inicio de sesión?
- ¿Puede conectarse un usuario desactivado?
- ¿Existe algún enlace de "olvido de contraseña" para los usuarios que hayan olvidado sus contraseñas?
Hay muchos más casos de este tipo que vienen a la mente de un probador funcional, mientras que la realización de pruebas funcionales. Pero un desarrollador no puede tener en cuenta todos los casos, mientras que la unidad de construcción y casos de prueba de integración.
Por lo tanto, hay un montón de escenarios que aún no se han probado incluso después de las pruebas unitarias y de integración.
Ha llegado el momento de examinar una por una las pruebas unitarias, de integración y funcionales.
¿Qué son las pruebas unitarias?
Como su nombre indica, este nivel consiste en probar una "Unidad".
Una 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, un método, etc. Los desarrolladores de software son los que escriben los casos de pruebas unitarias. El objetivo es que coincidan los requisitos y el comportamiento esperado de la unidad.
A continuación se exponen algunos puntos importantes sobre las pruebas unitarias y sus ventajas:
- Los desarrolladores de software realizan las pruebas unitarias antes de las pruebas de integración utilizando técnicas de pruebas de caja blanca.
- Las pruebas unitarias no sólo comprueban el comportamiento positivo, es decir, la salida correcta en caso de entrada válida, sino también los fallos que se producen con una entrada no válida.
- Encontrar problemas/bugs en una fase temprana es muy útil y reduce los costes totales del proyecto. Como las pruebas unitarias se realizan antes de la integración del código, los problemas encontrados en esta fase pueden resolverse muy fácilmente y su impacto es también muy reducido.
- Las pruebas unitarias comprueban pequeños fragmentos de código o funciones individuales, de modo que los problemas/errores detectados en estos casos de prueba son independientes y no afectan a los demás casos de prueba.
- Otra ventaja importante es que los casos de prueba unitarios simplifican y facilitan la comprobación del código, por lo que también resulta más fácil resolver los problemas en una fase posterior, ya que sólo hay que probar el último cambio en el código.
- Las pruebas unitarias ahorran tiempo y costes, y son reutilizables y fáciles de mantener.
JUnit (framework de Java), PHPUnit (framework de PHP), NUnit (.Net framework) etc. son herramientas populares de pruebas unitarias que se utilizan para diferentes lenguajes.
¿Qué son las pruebas de integración?
Las pruebas de integración consisten en comprobar la integración de distintas partes del sistema. 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, fiabilidad y rendimiento del sistema una vez integrado.
Las pruebas de integración se realizan en los módulos que se prueban por unidades en primer lugar y, a continuación, las pruebas de integración definen 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 los desarrolladores.
Existen 3 tipos diferentes de enfoques de las pruebas de integración. Analicemos brevemente cada uno de ellos:
a) Enfoque de integración del Big Bang
En este enfoque, todos los módulos o unidades se integran y prueban como un todo de una sola vez. Suele hacerse cuando todo el sistema está listo para las pruebas de integración en un único momento.
No hay que confundir este enfoque de las pruebas de integración con las pruebas del sistema, ya que sólo se comprueba la integración de módulos o unidades y no todo el sistema, como se hace en las pruebas del sistema.
El enfoque del big bang ventaja es que todo lo integrado se prueba a la vez.
Uno de los principales desventaja es que resulta difícil identificar los fallos.
Ejemplo: En la figura siguiente, las unidades 1 a 6 se integran y prueban utilizando el enfoque Big bang.
b) Enfoque descendente
La integración de las unidades/módulos se comprueba paso a paso desde el nivel superior al inferior.
La primera unidad se prueba individualmente escribiendo STUBS de prueba. Después, los niveles inferiores se integran uno a uno hasta que el último nivel se junta y se prueba.
El enfoque descendente es una forma muy orgánica de integración, ya que es coherente con cómo suceden las cosas en el entorno real.
El único preocupación con este enfoque es que la funcionalidad principal se prueba al final.
c) Enfoque ascendente
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 unidad. Programas estimuladores llamados CONDUCTORES Es más fácil detectar problemas o errores en los niveles inferiores.
Los principales desventaja de este enfoque es que los problemas de nivel superior sólo pueden identificarse al final, cuando se han integrado todas las unidades.
Pruebas unitarias frente a pruebas de integración
Habiendo discutido lo suficiente sobre las pruebas unitarias y las pruebas de integración, repasemos rápidamente las diferencias entre ambas en la siguiente tabla:
Pruebas unitarias | Pruebas de integración |
---|---|
Prueba el componente individual de todo el sistema, es decir, prueba una unidad de forma aislada. | Prueba el funcionamiento conjunto de los componentes del sistema, es decir, prueba la colaboración de varias unidades. |
Ejecución más rápida | Puede funcionar con lentitud |
No hay dependencia externa. Cualquier dependencia externa es burlada o stubbed out. | Requiere interacción con dependencias externas (por ejemplo, base de datos, hardware, etc.) |
Simple | Complejo |
A cargo del promotor | Realizado por el probador |
Es un tipo de prueba de caja blanca | Es un tipo de prueba de caja negra |
Se lleva a cabo en la fase inicial de las pruebas y después puede realizarse en cualquier momento | Debe realizarse después de las pruebas unitarias y antes de las pruebas del sistema. |
Mantenimiento barato | Mantenimiento costoso |
Comienza a partir de la especificación del módulo | Parte de la especificación de la interfaz |
Las pruebas unitarias tienen un alcance limitado, ya que sólo comprueban si cada pequeño fragmento de código hace lo que debe hacer. | Tiene un alcance más amplio, ya que abarca 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 |
Descubre los problemas de funcionalidad de los módulos individuales únicamente. No expone los errores de integración ni los problemas de todo el sistema. | Descubrir los fallos que surgen cuando los distintos módulos interactúan entre sí para formar el sistema global. |
Pruebas funcionales
Una técnica de prueba de caja negra, en la que se comprueba la funcionalidad de la aplicación para generar la salida deseada al proporcionar una entrada determinada, se denomina "prueba funcional".
En nuestros procesos de pruebas 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.
Conclusión
Estos tres tipos de pruebas están correlacionados.
Para lograr una cobertura total, es necesario disponer de pruebas unitarias para las rutas/líneas de código, pruebas funcionales y de integración para garantizar que las "unidades" funcionan juntas de forma cohesionada.
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 pruebas.