26. Introducción a las pruebas de software

26.1 Introducción

Las pruebas de software son actividades orientadas a obtener información sobre el comportamiento y la calidad de un sistema. Ayudan a detectar defectos, validar requisitos, reducir riesgos y aumentar la confianza antes de entregar o modificar una versión.

Probar no significa demostrar que el sistema es perfecto. Significa evaluar, bajo ciertas condiciones, si el software se comporta como se espera y qué riesgos siguen presentes.

En Ingeniería de Software, las pruebas forman parte del proceso completo: se relacionan con requisitos, diseño, construcción, integración, entrega, mantenimiento y calidad del producto.

26.2 ¿Por qué probamos software?

El software es construido por personas y puede contener errores de comprensión, diseño, programación, configuración o integración. Además, los sistemas reales tienen muchas combinaciones de datos, usuarios, permisos, dispositivos y condiciones de uso.

Las pruebas ayudan a:

  • Detectar defectos antes de que afecten a usuarios.
  • Comprobar que se cumplen requisitos.
  • Validar reglas de negocio.
  • Reducir riesgo en cambios y entregas.
  • Generar evidencia para tomar decisiones.
  • Prevenir regresiones en funcionalidades existentes.
  • Mejorar la confianza del equipo y de los interesados.
Idea clave: las pruebas no eliminan todos los defectos, pero ayudan a descubrir problemas importantes y a decidir con mejor información.

26.3 Pruebas y calidad

Las pruebas están muy relacionadas con la calidad, pero no son lo mismo. La calidad del software depende de requisitos claros, buen diseño, código mantenible, arquitectura adecuada, revisión, pruebas, documentación y operación responsable.

Las pruebas permiten evaluar aspectos de calidad como:

  • Corrección funcional.
  • Seguridad.
  • Rendimiento.
  • Usabilidad.
  • Compatibilidad.
  • Disponibilidad.
  • Confiabilidad.
  • Mantenibilidad.

Una prueba puede revelar un problema, pero la mejora de calidad ocurre cuando el equipo analiza y corrige las causas.

26.4 Verificación y validación

Dos conceptos importantes son verificación y validación.

Concepto Pregunta que responde Ejemplo
Verificación ¿Construimos correctamente lo especificado? Comprobar que una regla fue implementada según el requisito.
Validación ¿Construimos lo que el usuario realmente necesita? Confirmar con usuarios que el flujo de reserva resuelve su tarea.

Un sistema puede estar verificado contra una especificación y aun así no estar validado si la especificación no representaba bien la necesidad real.

26.5 Error, defecto y falla

Conviene distinguir tres conceptos básicos:

Concepto Significado Ejemplo
Error Equivocación humana al comprender, diseñar, programar o configurar. Un analista interpreta mal una regla de descuento.
Defecto Problema introducido en código, diseño, datos, configuración o documentación. La fórmula implementada calcula mal el total.
Falla Comportamiento incorrecto observable durante la ejecución. El usuario ve un importe incorrecto al finalizar la compra.

26.6 Niveles de prueba

Las pruebas pueden organizarse por nivel, según el alcance de lo que se evalúa.

Nivel Qué evalúa Ejemplo
Unitarias Partes pequeñas de código, como funciones o clases. Probar el cálculo de descuento.
Integración Colaboración entre módulos o servicios. Probar pedido junto con pago e inventario.
Sistema El sistema completo funcionando como una unidad. Probar el flujo completo de compra.
Aceptación Cumplimiento de necesidades y criterios del usuario o negocio. Validar que la reserva de turnos cumple los criterios acordados.

26.7 Tipos de prueba

También pueden clasificarse según el objetivo que persiguen.

  • Funcionales: verifican que el sistema haga lo que debe hacer.
  • No funcionales: evalúan atributos como rendimiento, seguridad o usabilidad.
  • Regresión: comprueban que cambios nuevos no rompan funcionalidades existentes.
  • Humo: verifican rápidamente que una versión es mínimamente usable para seguir probando.
  • Exploratorias: investigan el sistema con criterio y aprendizaje durante la prueba.
  • Aceptación: validan que la solución cumple expectativas acordadas.

Un proyecto puede combinar varios tipos de pruebas según riesgos, alcance y criticidad.

26.8 Casos de prueba

Un caso de prueba describe una situación específica que se desea verificar. Incluye condiciones iniciales, datos, pasos y resultado esperado.

Una estructura simple puede incluir:

Objetivo Qué se quiere verificar.
Precondiciones Qué debe cumplirse antes de ejecutar la prueba.
Datos de entrada Valores o información necesaria.
Pasos Acciones a realizar.
Resultado esperado Comportamiento que debe observarse.
Resultado obtenido Lo que ocurrió durante la ejecución.

26.9 Ejemplo de caso de prueba

Para la funcionalidad de cancelar una reserva:

Objetivo Verificar que una reserva puede cancelarse con más de dos horas de anticipación.
Precondiciones Existe un usuario autenticado y una reserva activa para dentro de tres horas.
Pasos Ingresar a mis reservas, seleccionar la reserva, presionar cancelar y confirmar.
Resultado esperado La reserva queda cancelada, el cupo vuelve a estar disponible y se muestra confirmación.

Este caso debería complementarse con otros: reserva fuera de plazo, reserva inexistente, usuario sin permiso y reserva ya cancelada.

26.10 Pruebas manuales y automatizadas

Las pruebas pueden ejecutarse manualmente o automatizarse mediante programas.

Tipo Ventajas Limitaciones
Manual Flexible, útil para exploración, usabilidad y validación inicial. Puede ser lenta, repetitiva y depender mucho de la persona.
Automatizada Repetible, rápida para regresión y útil en integración continua. Requiere mantenimiento y no reemplaza el criterio humano.

Automatizar todo no siempre conviene. Se deben priorizar pruebas repetitivas, críticas y estables.

26.11 Pruebas basadas en riesgo

Como no es posible probar todas las combinaciones, conviene priorizar según riesgo. El riesgo combina probabilidad de falla e impacto si ocurre.

Se deberían probar con especial atención:

  • Funcionalidades críticas para el negocio.
  • Partes modificadas recientemente.
  • Integraciones con sistemas externos.
  • Reglas de negocio complejas.
  • Operaciones con dinero o datos sensibles.
  • Flujos usados por muchos usuarios.
  • Casos límite y excepciones.

26.12 Pruebas y requisitos

Las pruebas deben relacionarse con los requisitos. Los criterios de aceptación son una fuente directa para diseñar pruebas.

Ejemplo:

Requisito Pruebas derivadas
El usuario puede cancelar una reserva hasta dos horas antes. Cancelar con tres horas de anticipación, cancelar con una hora, cancelar reserva ya cancelada.
Solo administradores pueden modificar precios. Modificar con administrador, intentar modificar con usuario común, intentar sin autenticación.
La búsqueda debe responder en menos de dos segundos. Medir búsqueda con volumen de datos definido y condiciones acordadas.

26.13 Pruebas durante el ciclo de vida

Las pruebas no deberían comenzar cuando el sistema ya está terminado. Pueden aparecer en distintas actividades del ciclo de vida:

  • Durante requisitos, revisando ambigüedades y criterios de aceptación.
  • Durante diseño, evaluando riesgos y casos importantes.
  • Durante construcción, con pruebas unitarias e integración.
  • Durante integración, validando colaboración entre componentes.
  • Antes de entrega, verificando flujos críticos.
  • Después de cambios, ejecutando pruebas de regresión.
  • Durante operación, monitoreando fallas reales.

Probar temprano suele reducir costo de corrección y mejora la comprensión del producto.

26.14 Reporte de defectos

Cuando se encuentra un defecto, debe comunicarse de forma clara para que pueda reproducirse, analizarse y corregirse.

Un reporte básico debería incluir:

  • Título claro.
  • Descripción del problema.
  • Pasos para reproducirlo.
  • Resultado esperado.
  • Resultado obtenido.
  • Datos utilizados.
  • Ambiente donde ocurrió.
  • Evidencia, si corresponde.
  • Severidad o impacto.

Un buen reporte ahorra tiempo y reduce discusiones innecesarias.

26.15 Responsabilidad de la calidad

Aunque algunos equipos tengan testers o responsables de calidad, la calidad no pertenece a una sola persona. Todo el equipo influye en ella.

  • Analistas ayudan a definir requisitos claros.
  • Desarrolladores escriben código verificable y mantenible.
  • Testers diseñan pruebas y analizan riesgos.
  • Diseñadores cuidan usabilidad y accesibilidad.
  • Operaciones cuida despliegue, monitoreo y disponibilidad.
  • Usuarios o referentes validan si la solución resuelve la necesidad real.

Las pruebas son una parte de una cultura de calidad más amplia.

26.16 Errores comunes

Al probar software suelen aparecer errores como:

  • Dejar las pruebas solo para el final.
  • Probar únicamente el caso exitoso.
  • No relacionar pruebas con requisitos.
  • No registrar resultados ni defectos claramente.
  • Automatizar pruebas inestables o poco valiosas.
  • Ignorar pruebas no funcionales importantes.
  • No repetir pruebas después de cambios relevantes.
  • Confundir ausencia de defectos encontrados con ausencia de defectos reales.

26.17 Buenas prácticas

Algunas buenas prácticas iniciales son:

  • Definir criterios de aceptación claros.
  • Diseñar pruebas para casos normales, alternativos y excepciones.
  • Priorizar pruebas según riesgo e impacto.
  • Probar temprano y con frecuencia.
  • Automatizar verificaciones repetitivas y críticas.
  • Mantener trazabilidad entre requisitos, pruebas y defectos.
  • Registrar defectos con información reproducible.
  • Revisar pruebas cuando cambian requisitos.

26.18 Qué debes recordar de este tema

  • Las pruebas de software aportan información sobre calidad y riesgos.
  • Probar no demuestra que el sistema sea perfecto.
  • Verificación y validación responden preguntas diferentes.
  • Existen niveles de prueba: unitarias, integración, sistema y aceptación.
  • Las pruebas pueden ser funcionales, no funcionales, de regresión, humo o exploratorias.
  • Los casos de prueba deben tener resultados esperados claros.
  • La calidad es responsabilidad de todo el equipo.

26.19 Conclusión

Las pruebas de software son una práctica esencial para construir sistemas confiables. Permiten detectar defectos, validar requisitos, reducir riesgos y aportar evidencia para tomar decisiones durante el desarrollo y la entrega.

Para quien comienza, la idea principal es esta: probar software significa observar su comportamiento de forma planificada para compararlo con lo que debería hacer y descubrir riesgos relevantes.

En el próximo tema veremos verificación, validación y gestión de defectos, profundizando en cómo se detectan, comunican y administran los problemas encontrados.