Ingeniería del Software · Unidad 4

TDD e Implantación
de Sistemas

Desarrollo dirigido por pruebas, estrategias de sustitución, recepción, evaluación post-implementación y mantenimiento.

01
// Test-Driven Development

Desarrollo Dirigido por Pruebas

El Desarrollo Dirigido por Pruebas (TDD) es una práctica de ingeniería de software propuesta por Kent Beck en la que las pruebas se escriben antes que el código de producción. El ciclo de desarrollo queda invertido respecto al modelo clásico: primero se define el comportamiento esperado mediante un test automatizado, y después se escribe únicamente el código suficiente para satisfacerlo.

TDD no es solo una técnica de pruebas; es una disciplina de diseño. Al obligar al desarrollador a pensar en el uso del código antes de implementarlo, favorece interfaces limpias, bajo acoplamiento y alta cohesión. El resultado es un sistema que crece de forma incremental respaldado en todo momento por una batería de tests de regresión.

Mantra de TDD: "Red → Green → Refactor". Escribe un test que falle (rojo), escribe el mínimo código para que pase (verde) y después mejora la estructura interna sin cambiar el comportamiento observable (refactor).
1 · RED
Escribe un test que describe la funcionalidad deseada. Debe fallar.
2 · GREEN
Implementa el mínimo código posible para que el test pase.
3 · REFACTOR
Mejora el código sin romper los tests existentes.
Repite
Añade el siguiente test para la siguiente unidad de funcionalidad.
// PASO 1 · RED — el test falla porque calcularIVA() no existe aún test('calcularIVA aplica el 21% al precio base', () => { const resultado = calcularIVA(100); expect(resultado).toBe(121); // ✕ FAIL — función no definida }); // PASO 2 · GREEN — mínima implementación para pasar el test function calcularIVA(precio) { return precio * 1.21; // ✓ PASS } // PASO 3 · REFACTOR — parametrizar el tipo impositivo function calcularIVA(precio, tipo = 0.21) { return precio * (1 + tipo); // ✓ PASS — más flexible, mismo test }
🎯

Diseño emergente

El diseño surge naturalmente de los tests. Se evita la sobreingeniería porque solo se implementa lo que el test exige en cada iteración.

🔒

Red de seguridad

Cada cambio es validado automáticamente contra la suite de tests acumulada, detectando regresiones de forma inmediata.

📖

Documentación viva

Los tests actúan como especificaciones ejecutables que describen el comportamiento esperado del sistema en todo momento.

Variantes de TDD: el ATDD (Acceptance TDD) extiende el ciclo al nivel de requisitos de negocio, con tests escritos conjuntamente por desarrolladores, testers y clientes. El BDD (Behaviour-Driven Development) usa un lenguaje natural estructurado (Given / When / Then) para escribir los tests, facilitando la colaboración con stakeholders no técnicos.

Red-Green-Refactor Tests unitarios JUnit / Jest / pytest ATDD BDD Diseño incremental Integración continua
02
// Changeover strategies

Instalación y Cambio: Estrategias de Sustitución

Cuando un nuevo sistema de información va a reemplazar a uno existente, la organización debe decidir cómo gestionar la transición operativa. Esta decisión es crítica: afecta al riesgo asumido, al coste del proceso, a la disponibilidad del servicio y al impacto sobre los usuarios.

La elección de la estrategia depende de factores como la criticidad del sistema, el presupuesto disponible, el número de usuarios afectados y la tolerancia al riesgo de la organización.

Sustitución directa
(Big Bang)
El sistema antiguo se desconecta y el nuevo entra en producción en un único momento.

Es la estrategia más rápida y económica en infraestructura, ya que no hay que mantener dos sistemas en paralelo. Sin embargo, es la más arriesgada: si el nuevo sistema falla, no hay vuelta atrás inmediata. Solo es recomendable para sistemas de baja criticidad o con una fase de pruebas exhaustiva previa.

✓ VentajasBajo coste de transición. Rapidez. Sin duplicidad de recursos ni formación en paralelo.
✗ RiesgosAlto riesgo operativo. Sin red de seguridad. Los errores afectan a todos los usuarios de inmediato.
Funcionamiento en paralelo
Ambos sistemas conviven durante un período hasta que el nuevo demuestra su fiabilidad.

Las mismas operaciones se registran en ambos sistemas y los resultados se comparan. Cuando el nuevo sistema genera salidas coherentes y correctas durante el período acordado, el antiguo se desconecta. Es la estrategia más segura, pero también la más costosa en tiempo y recursos humanos: los usuarios deben operar dos sistemas simultáneamente.

✓ VentajasMáxima seguridad. Permite comparar resultados. Rollback inmediato si el nuevo falla.
✗ RiesgosCoste elevado. Carga extra para los usuarios. Puede durar meses en sistemas complejos.
Implantación por fases (piloto)
El nuevo sistema se introduce de forma gradual: por módulos, departamentos o ubicaciones geográficas.

En cada fase se validan funcionalidades o áreas concretas antes de extender el despliegue. Si se detectan problemas, el impacto queda acotado a la fase en curso. Requiere una planificación cuidadosa de la secuencia de fases y la gestión de la coexistencia de distintas versiones del sistema en diferentes partes de la organización.

✓ VentajasRiesgo acotado. Aprendizaje progresivo. Posibilidad de ajustar antes del despliegue completo.
✗ RiesgosComplejidad en la gestión de datos. Interfases temporales entre el sistema antiguo y el nuevo.
Prueba piloto
El sistema nuevo se despliega completamente en un único sitio o grupo reducido antes del lanzamiento general.

Proporciona experiencia real de uso con un subconjunto de usuarios representativo. Los problemas detectados se corrigen antes de la implantación en el resto de la organización. Es habitual en empresas con múltiples sedes o en el despliegue de sistemas de gran escala como ERPs.

✓ VentajasRiesgo limitado al sitio piloto. Retroalimentación real de usuarios. Permite ajustar formación y soporte.
✗ RiesgosEl sitio piloto puede no ser representativo. Retrasos si los problemas son profundos.
Big Bang Parallel running Phased rollout Pilot testing Rollback plan Cutover Gestión del cambio
03
// Go-live & acceptance

Recepción y Puesta en Producción

La recepción formal del sistema es el proceso por el que el cliente o los usuarios finales verifican y aceptan que el software entregado cumple los requisitos acordados. Es la última barrera de calidad antes de que el sistema entre en operación real, y tiene implicaciones contractuales en muchos proyectos.

La puesta en producción (go-live) es el conjunto de actividades técnicas y organizativas necesarias para que el sistema nuevo comience a operar en el entorno real de la empresa, con datos reales y usuarios reales.

Pruebas de aceptación de usuario (UAT): los usuarios finales ejecutan escenarios de uso reales para validar que el sistema resuelve sus necesidades de negocio. No prueban la ausencia de errores técnicos, sino que el sistema es útil y usable en el contexto operativo de la organización.
1 · Preparación del entorno de producción
Instalación y configuración de servidores, bases de datos y redes en el entorno definitivo. Verificación de requisitos de hardware, seguridad y rendimiento. Configuración de backups y planes de contingencia.
2 · Migración de datos
Extracción, transformación y carga (ETL) de los datos del sistema antiguo al nuevo. Verificación de integridad y consistencia. La migración de datos es frecuentemente la actividad más compleja y arriesgada del proceso de implantación.
3 · Formación de usuarios
Formación presencial o en línea para los distintos perfiles de usuario: operadores, supervisores y administradores. Elaboración de manuales de usuario y guías de referencia rápida adaptadas a cada rol.
4 · Pruebas de aceptación (UAT)
Ejecución de los casos de prueba de aceptación por los usuarios finales. Registro formal de incidencias. La aceptación puede ser condicional (con una lista de defectos menores pendientes) o absoluta. El resultado se documenta en el acta de aceptación.
5 · Firma del acta de aceptación
Documento formal que certifica que el cliente acepta el sistema. Marca el inicio del período de garantía y la transferencia de responsabilidad operativa al cliente o al equipo de explotación.
6 · Apertura del servicio (go-live)
El sistema entra en operación real. Se activan los procedimientos de soporte de primer y segundo nivel. El equipo de desarrollo permanece en alerta durante las primeras semanas para resolver incidencias críticas de forma urgente.
📋

Criterios de aceptación

Deben estar definidos antes de comenzar el proyecto: umbrales de rendimiento, funcionalidades obligatorias, porcentaje de defectos críticos aceptado. Sin criterios objetivos, la aceptación se convierte en una negociación subjetiva.

🚨

Plan de contingencia (rollback)

Procedimiento detallado para revertir al sistema anterior si el go-live fracasa. Debe estar preparado, probado y disponible antes del día del corte. Incluye la restauración de datos y la comunicación a los usuarios.

UAT Acta de aceptación Migración de datos ETL Formación Rollback Soporte post-lanzamiento
04
// Post-implementation review

Evaluación Post-Implementación

La evaluación post-implementación (PIR, Post-Implementation Review) es una revisión formal que se realiza entre 3 y 6 meses después de la puesta en producción. Su objetivo es determinar si el sistema ha alcanzado los beneficios esperados y si el proceso de desarrollo e implantación puede mejorarse en proyectos futuros.

No es una auditoría de fallos, sino una actividad de aprendizaje organizacional. Involucra a todos los agentes del proyecto: patrocinadores, usuarios, equipo técnico y dirección. Sus conclusiones alimentan la mejora continua de los procesos de la organización.

Dimensiones de la evaluación: se analiza la calidad técnica del producto (¿funciona correctamente?), la calidad del proceso (¿se entregó en plazo y presupuesto?) y el valor de negocio generado (¿se han obtenido los beneficios esperados que justificaron la inversión?).
Área Métricas clave Fuente de datos Tipo
Calidad técnica Nº de defectos en producción, tiempo medio de resolución (MTTR), disponibilidad del sistema Sistema de tickets, logs de monitorización Cuantitativa
Rendimiento Tiempos de respuesta, throughput, uso de recursos (CPU/memoria) Herramientas de APM (New Relic, Datadog) Cuantitativa
Adopción de usuarios Tasa de uso por módulo, incidencias de formación, satisfacción (encuestas) Analytics, encuestas NPS, helpdesk Mixta
Valor de negocio ROI, reducción de costes operativos, mejora de KPIs de negocio, tiempo ahorrado en procesos Contabilidad, informes de gestión Estratégica
Gestión del proyecto Desviación en plazo y coste, gestión de riesgos, control de cambios Plan de proyecto, actas de seguimiento Cuantitativa
Lecciones aprendidas Problemas recurrentes, buenas prácticas, mejoras de proceso identificadas Retrospectivas, entrevistas con el equipo Cualitativa

El resultado de la evaluación se recoge en un informe de revisión post-implementación que incluye: resumen ejecutivo para los patrocinadores, análisis comparativo entre los objetivos iniciales y los resultados obtenidos, lista de incidencias pendientes, valoración del proceso seguido y recomendaciones de mejora para proyectos futuros.

PIR ROI KPIs de negocio Satisfacción de usuarios Lecciones aprendidas Mejora continua Benchmarking
05
// Software maintenance

Mantenimiento del Software

El mantenimiento del software comprende todas las actividades realizadas sobre un sistema después de su puesta en producción. Según estudios del sector, el mantenimiento representa entre el 60% y el 80% del coste total de un sistema a lo largo de su ciclo de vida, superando con creces el coste del desarrollo inicial.

El estándar ISO/IEC 14764 define el mantenimiento como la modificación de un sistema software, una vez entregado, para corregir fallos, mejorar el rendimiento u otros atributos, o adaptarlo a un entorno cambiante. Distingue cuatro tipos fundamentales.

Correctivo

Corrección de defectos

Elimina errores (bugs) descubiertos después de la entrega. Incluye tanto fallos que impiden el funcionamiento (errores críticos) como comportamientos incorrectos que no bloquean el sistema pero producen resultados erróneos. Es reactivo: se activa cuando se detecta un problema.

≈ 20% del esfuerzo de mantenimiento
Adaptativo

Adaptación al entorno

Modifica el sistema para que siga funcionando correctamente ante cambios en su entorno tecnológico u organizativo: nuevas versiones del sistema operativo, cambios en normativa legal, integración con nuevos sistemas externos, actualización de hardware o migración a la nube.

≈ 25% del esfuerzo de mantenimiento
Perfectivo

Mejora y nuevas funcionalidades

Introduce mejoras en el sistema que no son necesarias para su funcionamiento correcto, sino que responden a nuevas necesidades o deseos de los usuarios: nuevos informes, mejoras en la interfaz, optimización de consultas, nuevas integraciones o funcionalidades adicionales solicitadas por el negocio.

≈ 50% del esfuerzo de mantenimiento
Preventivo

Mejora de la mantenibilidad

Reestructura y mejora el código (refactoring) para facilitar el mantenimiento futuro, sin cambiar el comportamiento externo. Incluye la actualización de documentación técnica, la mejora de la cobertura de tests, la reducción de deuda técnica y la eliminación de código obsoleto.

≈ 5% del esfuerzo de mantenimiento

Gestión de solicitudes de cambio (CRs): todas las peticiones de modificación del sistema deben seguir un proceso formal de gestión del cambio. Una solicitud de cambio (Change Request) pasa por las fases de recepción, análisis de impacto, priorización, aprobación, implementación, pruebas de regresión y despliegue. Este proceso evita que los cambios informales introduzcan defectos o comprometan la integridad del sistema.

Deuda técnica: cuando la presión por tiempo lleva a soluciones subóptimas, se acumula deuda técnica. Si no se gestiona activamente (mediante mantenimiento preventivo), la deuda crece hasta hacer inviable el mantenimiento evolutivo del sistema y aumentar exponencialmente el coste de cada cambio.

Ley de Lehman: un sistema software que se usa en un entorno real debe cambiar continuamente o se vuelve progresivamente menos útil. El mantenimiento no es opcional: es la condición necesaria para que el software siga aportando valor a la organización a lo largo del tiempo.
📊

SLA y niveles de servicio

Los acuerdos de nivel de servicio definen tiempos de respuesta y resolución para cada severidad de incidencia: crítica (horas), alta (días), media (semana) y baja (sprint).

♻️

Gestión de versiones

Cada modificación debe gestionarse mediante control de versiones (Git). Las releases de mantenimiento siguen el esquema semántico: MAJOR.MINOR.PATCH.

📉

Retirada del sistema

Cuando el mantenimiento resulta inviable o el sistema ya no aporta valor, se planifica su retirada: migración de datos, comunicación a usuarios y baja de servicios.

ISO/IEC 14764 Change Request Deuda técnica Refactoring SLA Pruebas de regresión Gestión de versiones Ley de Lehman