Aseguramiento de la calidad del software: Pruebas funcionales y no funcionales

Software Testing: Black Box and White Box Testing

En la actualidad existe una gran cantidad de empresas y freelancer dedicados al desarrollo del software. Esto genera una gran competencia, lo que exige que los productos tengan una mayor calidad cada día. Para lograr la calidad requerida en los programas, es necesario la realización de pruebas de software.

¿Qué son las pruebas de software?

La prueba de software es el proceso de evaluar y verificar que un producto o aplicación de software hace lo que se supone que debe hacer.

La detección temprana de fallos críticos puede ahorrar tiempo y dinero a su empresa. Las pruebas de software se deben realizar desde el comienzo del proyecto hasta su terminación, en todas las fases de su desarrollo. Las pruebas pueden ser manuales o automáticas.

Existen muchos tipos de pruebas de software, en dependencia de lo que se desee evaluar y comprobar en cada momento.

Tipos de Pruebas de Software

Los tipos de pruebas de acuerdo a su objetivo, se clasifican en Pruebas Funcionales y Pruebas No Funcionales.

Pruebas funcionales

  1. Unitarias
  2. Componentes
  3. Integración
  4. Sistema
  5. Humo
  6. Aceptación
  7. Regresión
  8. De Interfaz

Pruebas No funcionales

  1. Rendimiento
  2. Carga y Estrés
  3. Seguridad
  4. Escalabilidad
Pruebas de software: Pruebas funcionales y pruebas no funcionales

Las pruebas funcionales, a su vez, se clasifican en Pruebas de caja Negra, y Pruebas de caja Blanca.

Pruebas de Caja Negra

Las pruebas de caja negra son aquellas que se realizan desde la interfaz del usuario. Valida el funcionamiento de la aplicación de acuerdo a los requisitos del sistema, teniendo en cuenta el conjunto de datos de entrada y el conjunto de datos de salida esperado.

Pruebas de Caja Blanca

Las pruebas de caja blanca comprueban el código y ayudan a ganar la mayor cobertura posible de las pruebas. Generalmente son realizadas por desarrolladores e ingenieros de software, pues se necesitan conocimientos técnicos para hacerlas.

Pruebas Unitarias

Las pruebas unitarias se les hace a pequeñas partes del código. Es necesario dividir el sistema en pequeñas unidades, funcionalidades o módulos, para facilitar la verificación de cada funcionalidad de manera independiente. De esta forma es más fácil detectar problemas puntuales en cada unidad. Son las primeras pruebas que se realizan durante la fase de desarrollo del software. Verifican que el sistema funcione de acuerdo a lo establecido en el documento de Levantamiento de requisitos funcionales. Son ejecutadas por el equipo de desarrollo.

¿Qué ventajas tienen las pruebas unitarias?

  • Ayudan a detectar de forma temprana los errores en las nuevas funcionalidades o características desarrolladas.
  • Minimiza los costos de las pruebas a medida que se detectan problemas desde el principio.
  • Facilita la mejora de la calidad del código con una mejor refactorización del mismo.
  • Apoya el proceso de desarrollo ágil.
  • Simplifica la integración y permite una buena documentación.

Pruebas de Integración

Una aplicación de software está formada por diferentes submódulos que trabajan juntos para diferentes funcionalidades. La función de las pruebas de integración es verificar la integración de los diferentes componentes o módulos y detectar los errores y problemas relacionados con estos. Esta prueba se realiza después de las pruebas unitarias. En ocasiones una funcionalidad independiente funciona bien y cuando se integra con otra, generan algún error.

Las buenas prácticas de QA indican que estas pruebas a diferencia de las unitarias, que son realizadas por los desarrolladores, deben ser ejecutadas por equipos especializados en Aseguramiento de Calidad de Software.

¿Qué ventajas tienen las pruebas de integración?

  • Aseguran que todos los módulos de aplicación estén bien integrados y funcionen juntos según lo esperado.
  • Detecta problemas y conflictos interconectados para resolverlos antes de crear un gran problema.
  • Valida la funcionalidad, fiabilidad y estabilidad entre diferentes módulos.
  • Detecta excepciones ignoradas para mejorar la calidad del código.

Pruebas de Humo

Las pruebas de humo son pruebas que verifican la funcionalidad básica de una aplicación. Deben ser pruebas rápidas de ejecutar y tienen como objetivo afirmar que los procesos básicos del sistema funcionan como se espera.

Estas pruebas se deben realizar cuando sacamos una nueva versión del producto o software, para decidir si se ejecutarán otras pruebas más específicas. También es necesario realizarlas justo después de un proceso de deployment, para verificar que la aplicación está funcionando adecuadamente en el nuevo entorno desplegado.

Más detalles sobre los smoke tests:

  • Son un conjunto de pruebas automatizadas de alto nivel, y seleccionadas estrictamente.
  • Tienen lugar entre las pruebas de integración y las pruebas de regresión.
  • Se dice que el término “prueba de humo” tiene su origen en la plomería. Si se podía ver humo saliendo de una tubería, significaba que tenía fugas y era necesario hacer reparaciones.

Pruebas de Aceptación

Antes de comenzar a trabajar en el desarrollo del proyecto, el equipo de responsables del mismo debe definir, junto al cliente, los requisitos y criterios de aceptación del mismo. Durante el desarrollo de la misma pueden existir variaciones en esos criterios y deben quedar reflejados por escrito para su posterior evaluación.

Las pruebas de aceptación son pruebas formales, ejecutadas para verificar si un sistema satisface sus requerimientos de negocio.

Estas pruebas requieren que el sistema se encuentre en funcionamiento, y se centran en replicar el comportamiento de los usuarios, con la finalidad de rechazar cambios si no se cumplen los objetivos. Estos objetivos pueden ir más allá de obtener una respuesta específica, y medir el rendimiento del sistema.

Las pruebas de aceptación por lo general son varias pruebas manuales que se realizan luego de que una fase de desarrollo ha finalizado (de modo que se pueda volver rápidamente e iterar si algo no está correcto). Además, verifican que las características del software cumplen con todas las especificaciones iniciales y criterios de aceptación.

Pruebas de Regresión

Las pruebas de regresión son aquellas que se les realizan a funcionalidades ya probadas y que funcionaban correctamente. Tienen el objetivo de verificar que una modificación en esa funcionalidad no generara un bug.

Este tipo de pruebas de regresión son las más utilizadas a medida que avanza un proyecto, pues se realizan para validar que las correcciones o modificaciones del código no hayan impactado negativamente las funcionalidades existentes del producto. De esta forma verifican que el producto continúa desempeñándose correctamente con las nuevas funcionalidades, arreglos de fallos o cualquier cambio en la función existente.

Por lo general, se recomienda que sean automatizadas para reducir tiempos y esfuerzo en su ejecución.

Pruebas de Rendimiento

Las pruebas de rendimiento son un tipo de prueba no funcional, que se realiza para determinar la velocidad, estabilidad y escalabilidad de una aplicación de software. Como su nombre indica, el objetivo general de esta prueba es verificar el rendimiento de una aplicación contra los diferentes puntos de referencia del sistema y la red, como la utilización de la CPU, la velocidad de carga de la página, el manejo del tráfico máximo, la utilización de recursos del servidor, etc.

Las pruebas de carga, de resistencia, estrés, volumen, picos y escalabilidad son consideradas pruebas de rendimiento.

Con la realización de estas pruebas de software se pueden identificar los cuellos de botella para realizar mejoras de rendimiento. De esta forma podemos optimizar el sistema para así garantiza la fiabilidad del sitio web bajo una gran carga.

Pruebas de Carga y Estrés             

Antes de dar por terminado el proceso de desarrollo de un software es necesario comprobar cuánta tensión puede soportar antes de que se produzca algún error. Con ese obetivo, se envía mucha más información de lo habitual para comprobar en qué punto se satura el sistema. Por lo general, esas pruebas se realizan con herramientas especializadas en ello.

Pruebas de Seguridad

Las pruebas de seguridad de aplicaciones son un proceso de identificación, análisis y corrección de las vulnerabilidades de seguridad de una aplicación web. El proceso consiste en probar el código de la aplicación y su entorno para detectar fallos de seguridad y posibles vulnerabilidades. Una vez identificados, los problemas se abordan y solucionan.

Las pruebas de seguridad de las aplicaciones pueden realizarse manualmente o con herramientas automatizadas.

Pruebas de Escalabilidad

Son aquellas pruebas no funcionales que permiten determinar el grado de escalabilidad que tiene un sistema. Se entiende como escalable la capacidad que tiene el sistema para que, sin aplicar cambios drásticos en su configuración, pueda soportar el incremento de demanda en la operación.

Pruebas manuales vs Pruebas automatizadas

Como hemos mencionado con anterioridad, las pruebas se pueden hacer de forma manual o automatizadas.

Las pruebas manuales son realizadas por personas, quienes a su vez pueden cometer un error y equivocarse u omitir algún paso de la misma. Además del tiempo que debe dedicar a preparar el entorno correcto para la prueba y a su vez a las pruebas.

Las pruebas automatizadas son realizadas ya sea por herramientas o programas específicos para cada tipo de prueba, en el caso de las pruebas no funcionales.

Para conocer más sobre las herramientas de automatización de pruebas puedes leer nuestro artículo

Herramientas de automatización de pruebas de software

Estas pruebas son más rápidas y confiables que las que se llevan a cabo manualmente. Sin embargo, la calidad de estas pruebas automatizadas depende de qué tan bien escritos se encuentren los “tests scripts” (código que determina qué es lo que se hará en la prueba).

Conclusiones

La realización de pruebas durante todo el proceso de desarrollo de un software es de vital importancia para la optimización de los procesos del mismo y para garantizar su calidad. Cada sistema y grupos de trabajo tienen sus propias características, a los que deben ajustarse las pruebas en cada momento. Ya sean automáticas o manuales, lo fundamental es que se realicen con la calidad requerida y logren su objetivo, un sistema con alta calidad.

Ir al contenido