La vida de un sistema de software no termina cuando se entrega la primera versión. En la práctica, muchos productos pasan la mayor parte de su existencia siendo corregidos, adaptados, mejorados, monitoreados y soportados.
El mantenimiento, la evolución y el soporte son actividades fundamentales para que el software siga siendo útil, confiable y alineado con las necesidades de usuarios y organizaciones a lo largo del tiempo.
El mantenimiento de software es el conjunto de actividades realizadas después de la entrega inicial para corregir defectos, mejorar características, adaptar el sistema a nuevos contextos o prevenir problemas futuros.
Mantener software no significa simplemente "arreglar errores". También implica comprender cambios en el negocio, en la tecnología, en la legislación, en los usuarios y en el entorno donde el sistema funciona.
Idea central: un sistema de software se mantiene vivo mientras continúa cambiando para responder a nuevas necesidades y condiciones.
La evolución del software es el proceso mediante el cual un producto cambia a lo largo del tiempo. Puede incorporar nuevas funcionalidades, modificar reglas existentes, mejorar su arquitectura, actualizar tecnologías o adaptarse a nuevos dispositivos, usuarios o integraciones.
La evolución es una consecuencia natural del uso real del sistema. Cuando el software resuelve un problema importante, normalmente aparecen nuevas necesidades, expectativas y oportunidades de mejora.
El soporte de software ayuda a usuarios, clientes y equipos internos a resolver dudas, incidentes, problemas de operación o solicitudes relacionadas con el sistema.
Puede incluir atención de consultas, análisis de errores, recuperación ante fallas, comunicación de cambios, seguimiento de incidentes, coordinación con desarrollo y documentación de soluciones.
| Concepto | Propósito | Ejemplo |
|---|---|---|
| Mantenimiento | Modificar el software para corregir, adaptar o mejorar. | Corregir un defecto en el cálculo de descuentos. |
| Evolución | Transformar el producto para responder a nuevas necesidades. | Agregar una aplicación móvil a un sistema existente. |
| Soporte | Ayudar a operar el sistema y resolver incidentes o consultas. | Atender un reporte de usuario que no puede acceder a su cuenta. |
El mantenimiento puede clasificarse según la razón que motiva el cambio. Esta clasificación ayuda a entender que no todos los cambios tienen el mismo objetivo ni el mismo impacto.
| Tipo | Descripción | Ejemplo |
|---|---|---|
| Correctivo | Corrige defectos encontrados en el sistema. | Arreglar un error que impide guardar una operación. |
| Adaptativo | Ajusta el software a cambios del entorno. | Modificar una integración porque cambió la API de un proveedor. |
| Perfectivo | Mejora funcionalidad, rendimiento, usabilidad o calidad. | Optimizar una búsqueda que demora demasiado. |
| Preventivo | Reduce la probabilidad de problemas futuros. | Refactorizar un módulo complejo antes de agregar nuevas funciones. |
El mantenimiento correctivo se realiza cuando se detecta un defecto que debe solucionarse. Puede originarse en reportes de usuarios, pruebas, monitoreo, auditorías o revisión interna.
Corregir un defecto no debería limitarse a cambiar una línea de código. También conviene analizar la causa, agregar pruebas si corresponde y verificar que la corrección no produzca efectos secundarios.
El mantenimiento adaptativo responde a cambios externos al sistema. Por ejemplo, nuevas leyes, cambios en navegadores, actualizaciones de sistemas operativos, modificaciones en servicios de terceros o nuevas políticas de seguridad.
Aunque el software no tenga errores, puede dejar de ser adecuado si el entorno cambia.
El mantenimiento perfectivo busca mejorar el sistema. Puede aumentar la eficiencia, simplificar una tarea, mejorar la interfaz, agregar funciones solicitadas o resolver necesidades que aparecieron con el uso real.
Muchas mejoras surgen porque los usuarios aprenden a trabajar con el producto y descubren nuevas formas de obtener valor.
El mantenimiento preventivo intenta reducir problemas futuros. Incluye limpieza de código, refactorización, actualización de dependencias, mejora de pruebas, eliminación de duplicación, revisión de configuraciones y simplificación de componentes complejos.
Este tipo de mantenimiento suele ser difícil de justificar si solo se mira el corto plazo, pero es importante para sostener la velocidad y la calidad del desarrollo.
En soporte conviene diferenciar distintos tipos de situaciones para responder adecuadamente.
| Tipo | Descripción | Ejemplo |
|---|---|---|
| Incidente | Interrupción o degradación de un servicio esperado. | Los usuarios no pueden iniciar sesión. |
| Problema | Causa raíz de uno o varios incidentes. | Una configuración incorrecta provoca cierres de sesión inesperados. |
| Solicitud | Pedido de información, asistencia o cambio. | Un usuario solicita recuperar acceso o cambiar un dato. |
No todos los cambios pueden realizarse al mismo tiempo. La priorización ayuda a decidir qué se atiende primero según impacto, urgencia, valor de negocio, riesgo, costo y dependencias.
Un error que impide facturar o acceder a información crítica suele tener mayor prioridad que una mejora visual menor, aunque ambas solicitudes sean válidas.
Antes de modificar un sistema existente, es importante analizar el impacto. Un cambio aparentemente pequeño puede afectar reglas de negocio, integraciones, reportes, permisos, datos históricos o procesos de otros usuarios.
Una regresión ocurre cuando un cambio rompe algo que antes funcionaba. Es uno de los riesgos más comunes durante el mantenimiento, especialmente en sistemas grandes o poco documentados.
Las pruebas automatizadas, la revisión de código, la integración continua y el conocimiento del dominio ayudan a reducir este riesgo.
El soporte no solo resuelve problemas técnicos. También comunica el estado de incidentes, explica cambios, recopila información útil, traduce necesidades del usuario y ayuda a mejorar el producto.
Una comunicación clara reduce frustración. Cuando ocurre un problema, los usuarios necesitan saber qué sucede, qué impacto tiene, si existe una alternativa y cuándo se espera una solución.
Supongamos un sistema de turnos médicos ya en producción. Después de algunas semanas, los usuarios reportan que algunos recordatorios llegan duplicados. El equipo registra el incidente, analiza los datos, identifica que una tarea programada se ejecuta dos veces y corrige la configuración.
Además de corregir el error, el equipo agrega una prueba, actualiza la documentación operativa y mejora el monitoreo para detectar rápidamente si vuelve a ocurrir.
El mantenimiento, la evolución y el soporte son parte natural de la vida del software. Un sistema valioso cambia porque los usuarios lo utilizan, el negocio evoluciona y el entorno técnico se transforma.
En el próximo tema veremos deuda técnica, refactorización y sostenibilidad, conceptos directamente relacionados con la capacidad de mantener y evolucionar un producto sin perder calidad.