6. Testing dentro del ciclo de vida del software

6.1 Introducción

El software no aparece de una sola vez. Normalmente atraviesa varias etapas: se identifica una necesidad, se analizan requisitos, se diseña una solución, se desarrolla, se prueba, se publica y luego se mantiene. A este recorrido se lo conoce como ciclo de vida del software.

El testing debe acompañar ese ciclo. Si las pruebas se dejan solo para el final, muchos defectos se descubren tarde, cuando corregirlos puede ser más difícil y costoso. En cambio, cuando el testing participa desde el inicio, ayuda a prevenir problemas, aclarar dudas y reducir riesgos.

En este tema veremos cómo se relaciona el testing con cada etapa del desarrollo de software.

6.2 ¿Qué es el ciclo de vida del software?

El ciclo de vida del software es el conjunto de etapas por las que pasa un producto desde que surge la idea hasta que se retira o deja de mantenerse.

Aunque cada organización puede trabajar de manera distinta, un ciclo típico incluye:

  1. Necesidad o problema a resolver.
  2. Análisis de requisitos.
  3. Diseño de la solución.
  4. Desarrollo o implementación.
  5. Pruebas.
  6. Despliegue o publicación.
  7. Operación y mantenimiento.

Estas etapas no siempre ocurren de forma lineal. En metodologías ágiles, por ejemplo, se repiten en ciclos pequeños. Pero la idea general se mantiene: el software evoluciona y el testing debe acompañar esa evolución.

6.3 Testing en la etapa de requisitos

La etapa de requisitos define qué debe hacer el sistema. Si los requisitos son ambiguos, incompletos o contradictorios, es muy probable que el producto tenga defectos.

En esta etapa, el testing puede aportar mucho aunque todavía no exista código. Algunas tareas útiles son:

  • Revisar si los requisitos son claros y verificables.
  • Identificar reglas de negocio incompletas.
  • Preguntar por casos alternativos y errores esperados.
  • Detectar contradicciones entre requisitos.
  • Proponer criterios de aceptación.
  • Pensar datos válidos, inválidos y casos límite.
Si no sabemos qué resultado se espera, no podremos decidir con claridad si una prueba pasa o falla.

6.4 Ejemplo de requisito poco testeable

Un requisito poco claro podría decir:

El sistema debe cargar rápido y mostrar mensajes adecuados.

Este requisito es difícil de probar porque no define qué significa "rápido" ni qué significa "adecuado". Un tester podría ayudar a transformarlo en algo más verificable:

La pantalla de búsqueda debe mostrar resultados en menos de 3 segundos para consultas de hasta 1000 registros. Si no se encuentran resultados, debe mostrar el mensaje: "No se encontraron productos para la búsqueda ingresada".

Ahora sí es posible diseñar pruebas concretas. Esta mejora ocurrió antes de programar, por lo tanto evitó posibles defectos futuros.

6.5 Testing en la etapa de diseño

Durante el diseño se define cómo se organizará la solución: pantallas, flujos, componentes, base de datos, integraciones, permisos y arquitectura general.

El testing puede participar revisando preguntas como:

  • ¿El flujo cubre los casos principales y alternativos?
  • ¿Hay mensajes claros para errores esperados?
  • ¿La solución permite registrar evidencias o trazabilidad?
  • ¿Existen puntos difíciles de probar?
  • ¿Cómo se simularán servicios externos?
  • ¿Qué datos se necesitarán para probar?
  • ¿Qué riesgos técnicos conviene validar primero?

Diseñar pensando en pruebas facilita el trabajo posterior. Un sistema testeable permite observar resultados, preparar datos y aislar problemas con menos esfuerzo.

6.6 Testing durante el desarrollo

Durante la implementación, los desarrolladores escriben código y realizan verificaciones técnicas. En esta etapa aparecen pruebas como las unitarias, pruebas de componentes y validaciones iniciales de integración.

El testing puede colaborar de varias maneras:

  • Aclarar criterios de aceptación.
  • Compartir casos importantes antes de finalizar el desarrollo.
  • Preparar datos de prueba.
  • Validar versiones parciales o prototipos.
  • Detectar rápidamente diferencias entre lo esperado y lo construido.
  • Ayudar a priorizar defectos encontrados durante el desarrollo.

En equipos ágiles, esta colaboración ocurre de forma continua. La funcionalidad no se "tira por encima de una pared" al área de testing, sino que se construye y valida con comunicación frecuente.

6.7 Testing en la etapa formal de pruebas

Cuando una funcionalidad está lista para probarse, se ejecutan pruebas con mayor foco en el comportamiento del sistema. Aquí se verifican requisitos, flujos de usuario, casos alternativos, errores esperados y posibles regresiones.

Algunas actividades habituales son:

  • Ejecutar casos de prueba planificados.
  • Realizar pruebas exploratorias.
  • Registrar resultados obtenidos.
  • Reportar defectos con pasos y evidencia.
  • Reprobar defectos corregidos.
  • Ejecutar pruebas de regresión.
  • Informar el estado de calidad y riesgos pendientes.

Esta etapa es importante, pero no debería ser la primera vez que alguien piensa en calidad. Si el testing participó antes, la etapa formal será más ordenada y efectiva.

6.8 Testing antes del despliegue

Antes de publicar una versión, el equipo necesita comprobar que los riesgos principales están controlados. En esta etapa suelen ejecutarse pruebas de humo, pruebas de regresión seleccionadas y validaciones de configuración.

Algunas preguntas relevantes son:

  • ¿La versión correcta fue preparada para publicar?
  • ¿Los flujos críticos funcionan?
  • ¿Las configuraciones de ambiente son correctas?
  • ¿Las migraciones de base de datos fueron validadas?
  • ¿Los defectos bloqueantes fueron corregidos?
  • ¿Quedan riesgos conocidos y aceptados?
  • ¿Existe un plan de reversión si algo falla?

El testing antes del despliegue no debería descubrir por primera vez problemas básicos. Su objetivo es confirmar que la entrega está en condiciones razonables.

6.9 Testing después del despliegue

Una vez publicada la versión, pueden realizarse pruebas en producción o verificaciones posteriores al despliegue. Estas pruebas deben hacerse con cuidado, especialmente si el sistema maneja datos reales.

Ejemplos de verificaciones posteriores son:

  • Confirmar que la aplicación responde correctamente.
  • Validar que se pueda iniciar sesión.
  • Revisar que los servicios principales estén disponibles.
  • Comprobar que una configuración nueva quedó aplicada.
  • Monitorear errores, logs o alertas.
  • Verificar que no aumenten los tiempos de respuesta.

Estas pruebas no reemplazan las pruebas previas. Son una capa adicional para detectar problemas reales de despliegue, configuración o ambiente.

6.10 Testing durante el mantenimiento

Después de publicar, el software sigue cambiando. Se corrigen defectos, se agregan funcionalidades, se actualizan dependencias, se modifican reglas de negocio y se ajustan configuraciones.

El mantenimiento requiere testing porque cada cambio puede generar efectos secundarios. Algunas actividades habituales son:

  • Reprobar defectos corregidos.
  • Ejecutar pruebas de regresión.
  • Actualizar casos de prueba obsoletos.
  • Agregar pruebas para defectos encontrados en producción.
  • Revisar impacto de cambios en módulos relacionados.
  • Validar compatibilidad luego de actualizar bibliotecas o plataformas.

Un sistema vivo necesita pruebas vivas. Si el producto cambia, los casos de prueba también deben mantenerse.

6.11 Modelos de desarrollo y testing

El testing puede integrarse de distintas formas según el modelo de desarrollo utilizado.

Modelo Características Relación con testing
Cascada Etapas secuenciales: requisitos, diseño, desarrollo, pruebas y entrega. El testing suele concentrarse más tarde, aunque puede participar revisando documentos desde el inicio.
Iterativo El producto evoluciona en versiones parciales. Las pruebas se repiten y ajustan en cada iteración.
Ágil Trabajo incremental con entregas frecuentes y colaboración continua. Testing acompaña cada historia, sprint o incremento.
DevOps Integración entre desarrollo, operaciones y entrega continua. Se automatizan verificaciones y se monitorea el sistema en producción.

El modelo cambia la forma de organizar el trabajo, pero no elimina la necesidad de probar. Solo modifica cuándo, cómo y con qué frecuencia se realizan las pruebas.

6.12 Shift left: probar más temprano

La expresión shift left se usa para describir la idea de mover actividades de calidad hacia etapas más tempranas del ciclo de vida. En lugar de esperar al final, el equipo intenta detectar problemas desde requisitos, diseño y desarrollo.

Ejemplos de shift left son:

  • Revisar historias de usuario antes de implementarlas.
  • Definir criterios de aceptación claros.
  • Diseñar pruebas antes de que el desarrollo termine.
  • Crear pruebas unitarias durante la programación.
  • Ejecutar validaciones automáticas en cada cambio de código.
  • Detectar problemas de seguridad desde el diseño.

El objetivo no es eliminar las pruebas finales, sino evitar que sean el primer momento donde aparecen dudas importantes.

6.13 Shift right: aprender del uso real

También existe la idea de shift right, que consiste en obtener información después del despliegue. Esto incluye monitoreo, métricas, alertas, análisis de errores reales y observación del comportamiento de los usuarios.

Algunos ejemplos son:

  • Monitorear tiempos de respuesta.
  • Registrar errores de producción.
  • Analizar caídas o interrupciones.
  • Observar qué pasos abandonan los usuarios.
  • Evaluar si una funcionalidad realmente se usa.
  • Detectar problemas que no aparecieron en ambientes de prueba.

Shift right no significa probar menos antes de publicar. Significa complementar las pruebas previas con información del mundo real.

6.14 Trazabilidad durante el ciclo de vida

La trazabilidad permite relacionar requisitos, casos de prueba, defectos y versiones. Ayuda a responder preguntas como:

  • ¿Qué pruebas validan este requisito?
  • ¿Qué defectos están asociados a esta funcionalidad?
  • ¿Qué casos deben repetirse si cambia esta regla?
  • ¿Qué requisitos quedaron sin cobertura de pruebas?
  • ¿En qué versión se corrigió una incidencia?

En proyectos pequeños puede bastar con una planilla ordenada. En proyectos más grandes se usan herramientas de gestión de pruebas, tableros de tareas, sistemas de seguimiento de defectos e integración con repositorios de código.

6.15 Ejemplo de testing a lo largo de una funcionalidad

Supongamos que se quiere agregar la funcionalidad "recuperar contraseña". El testing podría participar así:

Etapa Aporte del testing
Requisitos Preguntar cuánto dura el enlace, qué mensaje se muestra y qué ocurre si el correo no existe.
Diseño Revisar flujo, mensajes, seguridad del enlace y datos necesarios para probar.
Desarrollo Compartir casos importantes y validar versiones parciales.
Pruebas Ejecutar casos exitosos, errores, vencimiento de enlaces, usuarios bloqueados y regresión de inicio de sesión.
Despliegue Confirmar configuración de correo, ambiente y disponibilidad del servicio.
Mantenimiento Agregar casos si aparecen incidencias reales o cambia la política de seguridad.

Este ejemplo muestra que el testing puede aportar valor en todo el recorrido de una funcionalidad, no solo al final.

6.16 Errores comunes al ubicar el testing en el ciclo

Algunas prácticas suelen generar problemas:

  • Involucrar al tester recién cuando el desarrollo ya terminó.
  • No definir criterios de aceptación antes de programar.
  • Probar sin datos preparados.
  • No reservar tiempo para regresión.
  • No actualizar casos de prueba después de cambios.
  • Publicar sin validar configuraciones de ambiente.
  • No registrar aprendizajes de defectos encontrados en producción.

Estos errores suelen aumentar retrabajo, incertidumbre y defectos tardíos.

6.17 Qué debes recordar de este tema

  • El testing debe acompañar todo el ciclo de vida del software.
  • Probar tarde aumenta el costo de corrección y el riesgo del proyecto.
  • En requisitos, el testing ayuda a detectar ambigüedades y definir criterios verificables.
  • En diseño, ayuda a pensar flujos, datos, riesgos y testeabilidad.
  • Durante el desarrollo, favorece la colaboración y la detección temprana.
  • Antes del despliegue, ayuda a confirmar que los riesgos principales están controlados.
  • Después del despliegue, el monitoreo aporta información del uso real.
  • Los casos de prueba deben mantenerse a medida que el producto evoluciona.

6.18 Conclusión

El Testing de Software no es una etapa aislada al final del desarrollo. Es una actividad que puede aportar valor desde el análisis inicial hasta el mantenimiento del producto en producción.

Cuando el testing participa temprano, ayuda a prevenir defectos. Cuando acompaña el desarrollo, mejora la comunicación. Cuando se ejecuta antes del despliegue, aporta confianza. Y cuando continúa después de publicar, permite aprender del uso real.

En el próximo tema estudiaremos la diferencia entre verificación y validación, dos conceptos fundamentales para comprender qué significa construir correctamente un producto y construir el producto correcto.