36. Caso práctico integrador: de una necesidad a una solución de software

36.1 Introducción

En este último tema integraremos los conceptos principales del curso mediante un caso práctico. La idea no es construir código completo, sino recorrer el razonamiento de la Ingeniería de Software desde una necesidad inicial hasta una solución que pueda desarrollarse, probarse, entregarse y mantenerse.

El caso mostrará cómo se conectan requerimientos, análisis, diseño, arquitectura, construcción, pruebas, calidad, despliegue, documentación, mantenimiento y gestión del proyecto.

36.2 Situación inicial

Una clínica recibe muchas llamadas telefónicas para reservar, cambiar o cancelar turnos médicos. El personal administrativo dedica varias horas por día a estas tareas, los pacientes no siempre logran comunicarse y se producen confusiones con horarios, profesionales y especialidades.

La organización plantea una necesidad general: quiere un sistema que permita gestionar turnos de manera más ordenada, reducir llamadas y mejorar la experiencia de pacientes y personal interno.

Punto de partida: todavía no tenemos una solución técnica. Tenemos un problema del mundo real que debe analizarse antes de decidir qué software construir.

36.3 Identificación de interesados

Antes de definir funcionalidades, conviene identificar a las personas y grupos afectados por el sistema. Cada interesado puede tener necesidades, restricciones y expectativas diferentes.

Interesado Necesidad principal
Pacientes Reservar, consultar, cambiar o cancelar turnos de forma simple.
Personal administrativo Gestionar agendas, resolver consultas y corregir problemas.
Profesionales médicos Consultar su agenda y conocer los pacientes asignados.
Dirección de la clínica Reducir costos operativos y mejorar la calidad del servicio.
Equipo técnico Construir, desplegar, mantener y proteger el sistema.

36.4 Objetivos del sistema

Los objetivos permiten orientar el proyecto y evaluar si la solución aporta valor. Deben expresar resultados esperados, no solamente funciones aisladas.

  • Permitir que pacientes reserven turnos disponibles sin llamar por teléfono.
  • Reducir errores en la asignación de horarios y profesionales.
  • Facilitar la administración de agendas médicas.
  • Enviar recordatorios para disminuir ausencias.
  • Proteger los datos personales de pacientes y profesionales.
  • Ofrecer información confiable sobre turnos confirmados, cancelados y pendientes.

36.5 Alcance inicial

Definir el alcance ayuda a separar qué se construirá en una primera versión y qué quedará para futuras etapas. Esto evita que el proyecto crezca sin control.

Incluido en la primera versión Fuera de la primera versión
Registro e inicio de sesión de pacientes. Historia clínica completa.
Búsqueda de turnos por especialidad, profesional y fecha. Videoconsultas médicas.
Reserva, cancelación y consulta de turnos. Facturación y pagos en línea.
Panel administrativo básico para agendas. Integración con sistemas externos de obras sociales.
Recordatorios por correo electrónico. Aplicación móvil nativa.

36.6 Requerimientos funcionales

Los requerimientos funcionales describen comportamientos o servicios que el sistema debe ofrecer. Para este caso, algunos ejemplos son:

  • El paciente debe poder crear una cuenta con sus datos básicos.
  • El paciente debe poder buscar turnos disponibles por especialidad.
  • El sistema debe mostrar profesionales, fechas y horarios disponibles.
  • El paciente debe poder confirmar un turno seleccionado.
  • El paciente debe poder cancelar un turno con anticipación.
  • El personal administrativo debe poder crear, modificar o bloquear horarios de atención.
  • El sistema debe enviar un recordatorio antes del turno confirmado.

36.7 Requerimientos no funcionales

Los requerimientos no funcionales definen condiciones de calidad, restricciones y atributos que la solución debe cumplir.

  • El sistema debe proteger los datos personales de los pacientes.
  • Las funciones principales deben poder usarse desde teléfonos móviles.
  • La búsqueda de turnos debe responder en un tiempo aceptable para el usuario.
  • El sistema debe registrar operaciones importantes para auditoría.
  • Las pantallas principales deben ser comprensibles para usuarios sin experiencia técnica.
  • El sistema debe permitir recuperación ante fallas sin perder turnos confirmados.

36.8 Historias de usuario y criterios de aceptación

Una historia de usuario permite expresar una necesidad desde la perspectiva de quien usará el sistema. Los criterios de aceptación ayudan a definir cuándo esa historia puede considerarse cumplida.

Historia: como paciente, quiero buscar turnos disponibles por especialidad para elegir un horario que se ajuste a mi disponibilidad.

  • El sistema muestra una lista de especialidades disponibles.
  • Al seleccionar una especialidad, se muestran profesionales y horarios disponibles.
  • Los turnos ya ocupados no aparecen como disponibles.
  • Si no hay turnos, el sistema informa la situación con un mensaje claro.

36.9 Modelo de dominio inicial

El modelo de dominio identifica conceptos importantes del negocio y sus relaciones. No es todavía una base de datos ni una implementación, sino una forma de comprender el problema.

  • Paciente: persona que solicita atención médica.
  • Profesional: médico o especialista que atiende turnos.
  • Especialidad: área médica asociada a uno o más profesionales.
  • Agenda: disponibilidad de atención de un profesional.
  • Turno: reserva de un horario para un paciente con un profesional.
  • Recordatorio: aviso enviado antes de un turno confirmado.

36.10 Diseño de responsabilidades

A partir del análisis, el sistema puede dividirse en responsabilidades. Esta división ayuda a organizar el código y reducir acoplamiento.

Módulo Responsabilidad
Usuarios y acceso Registro, inicio de sesión, roles y permisos.
Agenda médica Disponibilidad de profesionales y horarios de atención.
Turnos Búsqueda, reserva, cancelación y consulta de turnos.
Notificaciones Envío de recordatorios y avisos.
Administración Gestión interna de especialidades, profesionales y agendas.

36.11 Decisiones de arquitectura

Para una primera versión, el equipo podría elegir una aplicación web con interfaz para pacientes y personal administrativo, una API para la lógica de negocio y una base de datos relacional para almacenar usuarios, profesionales, agendas y turnos.

Esta decisión debe justificarse según el contexto: permite acceso desde navegadores, facilita una primera entrega, centraliza datos y deja abierta la posibilidad de integrar una aplicación móvil en el futuro.

36.12 Seguridad, privacidad y confiabilidad

Como el sistema trabaja con datos personales, la seguridad y la privacidad deben considerarse desde el diseño.

  • Los pacientes solo pueden consultar sus propios turnos.
  • El personal administrativo accede según permisos definidos.
  • Las operaciones importantes quedan registradas.
  • Los datos sensibles no se muestran en mensajes de error.
  • Las reservas deben evitar turnos duplicados para el mismo horario.
  • El sistema debe poder recuperarse ante fallas sin perder confirmaciones.

36.13 Usabilidad y accesibilidad

La solución debe ser fácil de usar, especialmente para pacientes que pueden tener distintos niveles de experiencia digital. La interfaz debe guiar la tarea principal: encontrar y confirmar un turno.

  • Usar textos claros y evitar términos internos de la clínica.
  • Mostrar pasos simples: especialidad, profesional, horario y confirmación.
  • Permitir corregir la selección antes de confirmar.
  • Indicar claramente errores o falta de disponibilidad.
  • Ofrecer contraste suficiente y navegación con teclado.
  • Funcionar correctamente en pantallas móviles.

36.14 Estrategia de construcción

El equipo puede construir el sistema en incrementos. Así obtiene retroalimentación temprana y evita esperar hasta el final para descubrir problemas de alcance, diseño o experiencia de usuario.

  1. Crear gestión básica de usuarios y roles.
  2. Implementar carga de profesionales, especialidades y agendas.
  3. Permitir búsqueda de turnos disponibles.
  4. Agregar reserva y cancelación de turnos.
  5. Incorporar recordatorios por correo electrónico.
  6. Mejorar reportes, auditoría y soporte operativo.

36.15 Estrategia de pruebas

Las pruebas deben cubrir tanto reglas funcionales como atributos de calidad. Para este caso, algunas pruebas importantes son:

  • Verificar que un paciente pueda reservar un turno disponible.
  • Comprobar que no se puedan reservar dos turnos iguales para el mismo profesional y horario.
  • Validar que un paciente no pueda ver turnos de otro paciente.
  • Probar cancelación y liberación del horario.
  • Revisar mensajes de error cuando no hay disponibilidad.
  • Probar la interfaz en dispositivos móviles.
  • Verificar recuperación ante fallas durante una reserva.

36.16 Documentación necesaria

La documentación debe concentrarse en información útil para operar, mantener y evolucionar el sistema.

  • Descripción del alcance de la primera versión.
  • Reglas de negocio para disponibilidad y cancelación de turnos.
  • Modelo de dominio y decisiones de arquitectura.
  • Guía de instalación, configuración y despliegue.
  • Manual breve para personal administrativo.
  • Procedimiento de soporte ante incidentes frecuentes.
  • Registro de decisiones técnicas relevantes.

36.17 Planificación, riesgos y seguimiento

El equipo debe estimar el trabajo, identificar riesgos y hacer seguimiento continuo. En este caso, algunos riesgos relevantes podrían ser:

Riesgo Acción posible
Reglas de agenda poco claras. Realizar entrevistas y validar ejemplos con personal administrativo.
Recordatorios que no llegan correctamente. Probar temprano el servicio de correo y registrar fallos.
Usuarios con poca experiencia digital. Validar prototipos con pacientes representativos.
Datos sensibles expuestos por error. Revisar permisos, mensajes, registros y pruebas de acceso.

36.18 Despliegue y operación

Antes de pasar a producción, se debe definir cómo se configurará, desplegará, monitoreará y respaldará el sistema. También es necesario preparar un plan de comunicación para usuarios internos y pacientes.

  • Separar ambientes de desarrollo, pruebas y producción.
  • Versionar la aplicación y los scripts de base de datos.
  • Proteger credenciales y configuraciones sensibles.
  • Monitorear errores, disponibilidad y envío de recordatorios.
  • Definir respaldo y recuperación de datos.
  • Preparar un procedimiento de reversión si la nueva versión falla.

36.19 Mantenimiento y evolución

Después de la primera entrega, aparecerán nuevas necesidades: integración con pagos, aplicación móvil, reportes para dirección, conexión con sistemas externos o mejoras en la experiencia de usuario.

Para evolucionar sin perder calidad, el equipo deberá gestionar cambios, priorizar solicitudes, mantener pruebas, revisar deuda técnica, actualizar documentación y cuidar la arquitectura.

36.20 Recorrido del caso

Etapa Pregunta guía Resultado esperado
Necesidad ¿Qué problema real queremos resolver? Reducir llamadas y ordenar la gestión de turnos.
Requerimientos ¿Qué debe hacer el sistema y bajo qué condiciones? Funcionalidades, restricciones y criterios de aceptación.
Análisis ¿Qué conceptos del negocio debemos comprender? Modelo de dominio inicial.
Diseño ¿Cómo organizaremos responsabilidades y componentes? Módulos, interfaces y decisiones de arquitectura.
Construcción ¿Cómo implementaremos la solución por incrementos? Versiones funcionales progresivas.
Pruebas ¿Cómo verificaremos comportamiento y calidad? Casos de prueba, pruebas de calidad y evidencias.
Operación ¿Cómo desplegaremos y sostendremos el sistema? Ambientes, monitoreo, soporte y recuperación.
Evolución ¿Cómo seguirá cambiando el producto? Mantenimiento, priorización y control de deuda técnica.

36.21 Errores que el caso permite evitar

  • Construir una solución sin entender el problema real.
  • Confundir una idea general con requerimientos claros.
  • Diseñar solo pantallas sin comprender reglas de negocio.
  • Postergar seguridad, privacidad y accesibilidad hasta el final.
  • Probar únicamente el camino ideal y no los casos de error.
  • Entregar una versión sin preparar operación, soporte y recuperación.
  • Ignorar mantenimiento, evolución y deuda técnica después de la primera entrega.

36.22 Qué debes recordar

  • La Ingeniería de Software transforma necesidades reales en soluciones sostenibles.
  • El código es solo una parte del producto; también importan requerimientos, diseño, pruebas y operación.
  • Las decisiones tempranas influyen en la calidad, el costo y la evolución del sistema.
  • Un sistema debe pensarse para usuarios, negocio, equipo técnico y mantenimiento futuro.
  • La calidad se construye durante todo el ciclo de vida, no solamente al final.

36.23 Conclusión del curso

Este caso práctico muestra que desarrollar software profesionalmente requiere mucho más que programar. La Ingeniería de Software aporta métodos, criterios y prácticas para comprender problemas, diseñar soluciones, trabajar en equipo, controlar cambios, cuidar la calidad y sostener productos en el tiempo.

Con este recorrido finaliza el curso de Introducción a la Ingeniería de Software. A partir de aquí, cada tema puede estudiarse con mayor profundidad en cursos específicos sobre requerimientos, casos de uso, UML, modelado de dominio, documentación técnica, mantenimiento, deuda técnica, calidad y ciclo de vida del software.

Volver al índice