10. Tipos de prueba: funcionales y no funcionales

10.1 Introducción

En el tema anterior vimos los niveles de prueba: unitarias, integración, sistema y aceptación. Esos niveles indican dónde o con qué alcance probamos. En este tema veremos los tipos de prueba, que indican qué aspecto del producto queremos evaluar.

Una clasificación muy importante divide las pruebas en funcionales y no funcionales. Las pruebas funcionales revisan lo que el sistema hace. Las no funcionales revisan cómo lo hace y con qué calidad lo hace.

Un sistema puede cumplir una funcionalidad y aun así tener problemas graves si es lento, inseguro, difícil de usar o incompatible con los dispositivos esperados.

10.2 ¿Qué son las pruebas funcionales?

Las pruebas funcionales verifican que el sistema realice las funciones esperadas según requisitos, reglas de negocio y criterios de aceptación.

Responden preguntas como:

  • ¿La funcionalidad hace lo que debe hacer?
  • ¿El resultado obtenido coincide con el resultado esperado?
  • ¿Las reglas de negocio se aplican correctamente?
  • ¿Los usuarios pueden ejecutar las operaciones permitidas?
  • ¿El sistema maneja correctamente datos válidos e inválidos?

Por ejemplo, si una aplicación permite transferir dinero, una prueba funcional verificará que el monto se descuente de una cuenta, se acredite en la otra y se registre la operación.

10.3 Ejemplos de pruebas funcionales

Algunos ejemplos comunes son:

  • Iniciar sesión con credenciales correctas.
  • Rechazar el acceso con contraseña incorrecta.
  • Crear, editar y eliminar un producto.
  • Calcular el total de una compra con impuestos y descuentos.
  • Enviar un correo de confirmación después de una reserva.
  • Mostrar solo opciones permitidas según el rol del usuario.
  • Validar que un campo obligatorio no pueda quedar vacío.
  • Generar un reporte con los filtros seleccionados.

Estas pruebas suelen estar muy conectadas con requisitos funcionales, historias de usuario, casos de uso y criterios de aceptación.

10.4 Pruebas funcionales positivas y negativas

Dentro de las pruebas funcionales podemos distinguir pruebas positivas y negativas.

Tipo Qué verifica Ejemplo
Positiva Que el sistema funcione correctamente con datos válidos y condiciones esperadas. Ingresar usuario y contraseña correctos para iniciar sesión.
Negativa Que el sistema maneje correctamente datos inválidos, errores o acciones no permitidas. Ingresar contraseña incorrecta y comprobar que el acceso sea rechazado.

Un error frecuente es probar solo el camino exitoso. Las pruebas negativas son esenciales porque los usuarios pueden equivocarse, los datos pueden llegar incompletos y los sistemas externos pueden fallar.

10.5 ¿Qué son las pruebas no funcionales?

Las pruebas no funcionales evalúan atributos de calidad del sistema. No se enfocan únicamente en qué hace el sistema, sino en cómo se comporta bajo ciertas condiciones.

Responden preguntas como:

  • ¿El sistema responde rápido?
  • ¿Puede soportar muchos usuarios al mismo tiempo?
  • ¿Protege adecuadamente la información?
  • ¿Es fácil de usar?
  • ¿Funciona en los navegadores o dispositivos requeridos?
  • ¿Se recupera correctamente ante errores?
  • ¿Es accesible para personas con distintas capacidades?

Estas pruebas suelen depender mucho del contexto. No todas las aplicaciones necesitan el mismo nivel de rendimiento, seguridad o compatibilidad.

10.6 Ejemplos de pruebas no funcionales

Tipo no funcional Qué evalúa Ejemplo
Rendimiento Tiempo de respuesta, velocidad y uso de recursos. La búsqueda debe responder en menos de 3 segundos.
Carga Comportamiento con cierta cantidad de usuarios o transacciones. El sistema debe soportar 500 usuarios simultáneos.
Seguridad Protección de datos, permisos y accesos. Un usuario común no debe acceder a funciones administrativas.
Usabilidad Facilidad de uso y claridad para el usuario. Un usuario nuevo debe completar el registro sin ayuda externa.
Compatibilidad Funcionamiento en plataformas, navegadores o dispositivos esperados. La aplicación debe funcionar en Chrome, Firefox y Edge.
Accesibilidad Uso por personas con distintas capacidades. Los campos deben tener etiquetas legibles por lectores de pantalla.

10.7 Diferencia entre funcional y no funcional

La diferencia puede entenderse con una pregunta simple:

Prueba funcional: ¿el sistema hace lo correcto?
Prueba no funcional: ¿el sistema lo hace con la calidad necesaria?

Ejemplo con una tienda en línea:

  • Funcional: el usuario puede agregar un producto al carrito.
  • No funcional: el producto se agrega al carrito en menos de un segundo y la pantalla responde correctamente en dispositivos móviles.

Ambas miradas son necesarias. Un carrito que calcula bien pero tarda veinte segundos en responder puede ser técnicamente correcto, pero poco aceptable para usuarios reales.

10.8 Pruebas de rendimiento

Las pruebas de rendimiento evalúan cómo responde el sistema en términos de velocidad, estabilidad y uso de recursos. Son importantes cuando el tiempo de respuesta afecta la experiencia del usuario o la operación del negocio.

Ejemplos de preguntas de rendimiento:

  • ¿Cuánto tarda en cargar la pantalla principal?
  • ¿Cuánto demora una búsqueda con muchos registros?
  • ¿El sistema mantiene tiempos aceptables con varios usuarios?
  • ¿El consumo de memoria crece de forma inesperada?
  • ¿La aplicación se degrada después de muchas operaciones?

En este curso solo introducimos el concepto. Más adelante, el curso de pruebas de rendimiento permitirá profundizar técnicas y herramientas específicas.

10.9 Pruebas de seguridad

Las pruebas de seguridad buscan detectar riesgos relacionados con accesos no autorizados, exposición de datos, permisos incorrectos o vulnerabilidades.

Ejemplos básicos:

  • Un usuario sin sesión no debe acceder a páginas privadas.
  • Un usuario común no debe ejecutar acciones de administrador.
  • Las contraseñas no deben mostrarse en texto plano.
  • Los mensajes de error no deben revelar información sensible.
  • El sistema debe cerrar sesión correctamente.
  • Los datos enviados deben validarse del lado del servidor.

La seguridad no se resuelve únicamente con testing, pero las pruebas ayudan a encontrar problemas importantes antes de que lleguen a producción.

10.10 Pruebas de usabilidad

Las pruebas de usabilidad evalúan si el sistema es fácil de entender y utilizar. Una funcionalidad puede estar correctamente programada, pero ser difícil de usar si los textos son confusos, los pasos no son claros o los errores no orientan al usuario.

Preguntas típicas:

  • ¿El usuario entiende qué debe hacer?
  • ¿Los botones y acciones son claros?
  • ¿Los mensajes de error ayudan a corregir el problema?
  • ¿El flujo tiene pasos innecesarios?
  • ¿La información importante está visible?
  • ¿La interfaz mantiene consistencia?

Estas pruebas pueden incluir observación de usuarios reales, revisión heurística o validación con representantes del negocio.

10.11 Pruebas de compatibilidad

Las pruebas de compatibilidad verifican que el sistema funcione en los entornos requeridos: navegadores, dispositivos, sistemas operativos, resoluciones, versiones de base de datos o configuraciones específicas.

Ejemplos:

  • Una aplicación web debe funcionar en Chrome, Firefox y Edge.
  • Una pantalla debe visualizarse correctamente en móviles y escritorio.
  • Una aplicación debe ejecutarse en Windows y Linux.
  • Un sistema debe ser compatible con una versión específica de base de datos.
  • Un correo generado por la aplicación debe verse correctamente en distintos clientes de correo.

No siempre es posible probar todas las combinaciones. Por eso se priorizan las más usadas, críticas o comprometidas contractualmente.

10.12 Pruebas de accesibilidad

Las pruebas de accesibilidad buscan que el software pueda ser utilizado por personas con distintas capacidades. Esto incluye usuarios que navegan con teclado, lectores de pantalla, alto contraste, zoom o tecnologías de asistencia.

Algunos aspectos básicos son:

  • Los campos deben tener etiquetas claras.
  • La navegación con teclado debe ser posible.
  • El contraste entre texto y fondo debe ser suficiente.
  • Las imágenes importantes deben tener texto alternativo.
  • Los mensajes de error deben estar asociados al campo correspondiente.
  • La estructura de encabezados debe ser coherente.

La accesibilidad también es calidad. No debe tratarse como un detalle final, especialmente en aplicaciones públicas o de uso masivo.

10.13 Pruebas de confiabilidad y recuperación

La confiabilidad evalúa si el sistema puede funcionar correctamente durante un período de tiempo y responder de forma controlada ante problemas.

La recuperación analiza cómo se comporta el sistema después de una falla. Por ejemplo:

  • ¿Qué ocurre si se corta la conexión durante una operación?
  • ¿El usuario puede retomar una tarea interrumpida?
  • ¿Los datos quedan consistentes si falla un servicio externo?
  • ¿El sistema informa el problema de forma clara?
  • ¿Existen reintentos o mecanismos de compensación?

Estas pruebas son especialmente importantes en sistemas que no pueden permitirse pérdida de datos o interrupciones frecuentes.

10.14 Relación entre tipos y niveles de prueba

Los tipos de prueba y los niveles de prueba no son lo mismo, pero se combinan. Un tipo de prueba puede ejecutarse en distintos niveles.

Tipo de prueba Nivel posible Ejemplo
Funcional Unitaria Verificar que una función calcule correctamente un impuesto.
Funcional Sistema Comprobar un flujo completo de compra.
Seguridad Integración o sistema Verificar que una API rechace usuarios sin permiso.
Rendimiento Sistema Medir tiempo de respuesta de una búsqueda con muchos usuarios.
Usabilidad Aceptación Observar si usuarios reales completan una tarea sin ayuda.

El nivel indica el alcance; el tipo indica el atributo que evaluamos.

10.15 Ejemplo completo: inicio de sesión

Tomemos una funcionalidad conocida: inicio de sesión.

Tipo de prueba Ejemplo
Funcional positiva Ingresar correo y contraseña correctos y comprobar que se abre la pantalla principal.
Funcional negativa Ingresar contraseña incorrecta y comprobar que el acceso se rechaza.
Seguridad Intentar acceder a una página privada sin sesión activa.
Usabilidad Revisar si el mensaje de error ayuda al usuario a corregir el problema.
Rendimiento Medir si el inicio de sesión responde en menos de dos segundos.
Compatibilidad Probar el flujo en los navegadores soportados.
Accesibilidad Comprobar que el formulario pueda completarse usando teclado.

Una misma funcionalidad puede necesitar varios tipos de prueba si es importante para el producto.

10.16 ¿Qué tipos de prueba elegir?

No siempre se pueden ejecutar todos los tipos de prueba con la misma profundidad. La selección depende del contexto, los riesgos y los recursos disponibles.

Algunas preguntas útiles son:

  • ¿Qué funcionalidades son críticas para el negocio?
  • ¿Qué fallas afectarían más a los usuarios?
  • ¿El sistema maneja datos sensibles?
  • ¿Hay requisitos de rendimiento explícitos?
  • ¿Qué dispositivos o navegadores usan los usuarios?
  • ¿La aplicación debe cumplir normas de accesibilidad?
  • ¿Qué partes cambiaron recientemente?
  • ¿Qué defectos han aparecido históricamente?

La estrategia de testing debe enfocarse en los riesgos más relevantes, no en una lista genérica de pruebas.

10.17 Errores comunes

Al trabajar con tipos de prueba, algunos errores frecuentes son:

  • Probar solo funcionalidad y olvidar rendimiento, seguridad o usabilidad.
  • Confundir pruebas no funcionales con pruebas menos importantes.
  • Dejar seguridad o rendimiento para el final del proyecto.
  • No definir métricas concretas para requisitos no funcionales.
  • Intentar probar todos los tipos con la misma profundidad sin priorizar.
  • Ignorar compatibilidad con dispositivos realmente usados.
  • Hacer pruebas de usabilidad sin observar usuarios o sin criterios claros.

Estos errores pueden producir un sistema que funciona en casos básicos, pero falla cuando se enfrenta a condiciones reales de uso.

10.18 Buenas prácticas

Para aplicar bien los tipos de prueba conviene:

  • Separar claramente qué se quiere evaluar en cada prueba.
  • Derivar pruebas funcionales desde requisitos y criterios de aceptación.
  • Definir requisitos no funcionales medibles cuando sea posible.
  • Priorizar seguridad, rendimiento y compatibilidad según riesgo.
  • Probar caminos exitosos, errores y casos límite.
  • Incluir usabilidad y accesibilidad desde etapas tempranas.
  • No duplicar pruebas sin necesidad entre niveles y tipos.
  • Documentar los riesgos no cubiertos cuando no haya tiempo para todo.

Una buena estrategia combina tipos de prueba para obtener una visión más completa de la calidad.

10.19 Qué debes recordar de este tema

  • Los tipos de prueba indican qué aspecto del producto evaluamos.
  • Las pruebas funcionales verifican que el sistema haga lo esperado.
  • Las pruebas no funcionales evalúan atributos de calidad como rendimiento, seguridad, usabilidad y compatibilidad.
  • Un sistema puede ser funcionalmente correcto y aun así tener mala calidad.
  • Las pruebas positivas y negativas son necesarias.
  • Los tipos de prueba se combinan con los niveles de prueba.
  • La elección de tipos depende del contexto y del riesgo.
  • Los requisitos no funcionales deben ser claros y medibles siempre que sea posible.

10.20 Conclusión

Las pruebas funcionales y no funcionales permiten observar el software desde perspectivas complementarias. Las primeras responden si el sistema hace lo correcto; las segundas responden si lo hace con la calidad necesaria.

Un producto confiable necesita ambas miradas. No alcanza con que una operación dé el resultado correcto si tarda demasiado, expone datos, confunde al usuario o falla en los dispositivos requeridos.

En el próximo tema estudiaremos la diferencia entre pruebas manuales y automatizadas, para comprender cuándo conviene usar criterio humano, cuándo conviene automatizar y cómo se complementan ambos enfoques.