El desarrollo de software es una disciplina en constante evolución, que ha transformado la manera en que interactuamos con la tecnología en nuestra vida diaria. Desde aplicaciones móviles hasta sistemas empresariales complejos, el proceso de desarrollo de software juega un papel fundamental en la creación y mejora de las soluciones tecnológicas que nos rodean.
En este artículo nos sumergiremos en el mundo del ciclo de vida del desarrollo de software, un proceso estructurado y cuidadosamente planificado, que abarca desde la concepción de una idea hasta la entrega del producto final y posterior sustitución/eliminación del sistema anfitrión. Descubriremos cómo aborda cada etapa crucial, desde la identificación de requisitos hasta el despliegue y mantenimiento, asegurando que los proyectos se desarrollen de manera eficiente y con la máxima calidad.
Además, detallaremos el papel fundamental que desempeña la metodología DevOps en el proceso, fomentando una cultura de colaboración y comunicación estrecha entre los equipos de desarrollo y operaciones, automatizando procesos y adoptando una mentalidad de mejora continua.
Por ultimo, se pondrá especial foco en la posibilidad de englobar bajo una misma solución varias etapas diferentes del ciclo de vida del código. Un objetivo ambicioso pero altamente beneficioso que esta creciendo en las empresas del sector, debido a la capacidad de optar a un mayor nicho de mercado y de proporcionar una centralización, la cual trae consigo numerosos beneficios para el usuario final.
Qué es el ciclo de vida y el porqué de su importancia
También conocido como SDLC, siglas que provienen de su nombre en inglés Software Development Life Cycle. El ciclo de vida del desarrollo de software es una representación del proceso completo que sigue un proyecto de software desde su concepción hasta su finalización y posterior mantenimiento.
Aunque existen diferentes ciclos de desarrollo de software la normativa ISO/IEC/IEEE 12207:2017 establece:
“Un marco común para los procesos del ciclo de vida de los programas informáticos, con una terminología bien definida, a la que pueda remitirse la industria del software. Contiene procesos, actividades y tareas aplicables durante la adquisición, el suministro, el desarrollo, el funcionamiento, el mantenimiento o la eliminación de sistemas, productos y servicios informáticos. Estos procesos del ciclo de vida se llevan a cabo mediante la participación de los interesados, con el objetivo final de lograr la satisfacción del cliente”.
Su importancia está motivada por el auge que está experimentando el sector, impulsado por la digitalización del mundo en el que vivimos; provocando que la demanda de profesionales crezca y aparezca la necesidad de definir procesos óptimos y estandarizados.
¿Qué etapas lo componen?
Una vez planteado qué es el ciclo de vida y el porqué de su importancia a la hora de desarrollar software, vamos a detallar en qué etapas se divide y cuál es el objetivo de cada una de ellas.
Planificación
Esta etapa inicial se centra en identificar el alcance del proyecto y sus requisitos para su posterior análisis. El objetivo de esta etapa consiste en entender el propósito del proyecto y las necesidades del cliente y conocer sus resultados deseados. Se determinarán objetivos SMART: específicos (Specific), medibles (Measurable), alcanzables (Achievable), realistas (Realistic) y de duración limitada (Time-bound).
Diseño
Una vez analizada la información descrita en la etapa anterior, se determinarán los pasos a seguir para alcanzar ese objetivo - el “cómo” de completar un proyecto. Se elaborará un modelo abstracto del sistema a construir basado en los requerimientos planteados en la fase anterior. Este modelo proporciona detalles sobre el software a desarrollar, incluyendo las arquitecturas del sistema, las estructuras de datos, el diseño de la interfaz de usuario y otros aspectos técnicos necesarios para implementar el sistema. Se establecerá una asignación de costes, plazos e hitos, y materiales y documentación necesarios. Esta etapa también implica el cálculo y la previsión de riesgos, puesta en marcha de procesos de cambio y definición de protocolos.
Implementación
En esta fase del ciclo de vida se lleva a cabo la puesta en marcha del producto de software, es decir, donde se generará el código fuente en el lenguaje de programación escogido adecuado a nuestro proyecto.
Pruebas
Terminado el proceso de desarrollo e implementación empieza la fase de pruebas, que consiste en testear el diseño implementado. En esta etapa ponemos a prueba los errores que hayan podido aparecer en las etapas anteriores. Es una fase de corrección, eliminación y perfeccionamiento de posibles fallos, no previsto en los pasos previos. Para ello, es común la ejecución de los siguientes procesos: pruebas unitarias, pruebas de integración, pruebas de sistema y pruebas de aceptación.
Despliegue
Una vez que el software ha pasado las pruebas satisfactoriamente, procedemos a su implementación en el entorno deseado, ya sea un entorno pre-productivo o productivo. Esto dependerá de la casuística del cliente y asociado a ella existirá un flujo de trabajo.
Mantenimiento
En este periodo el software ya está en funcionamiento. Con el tiempo alguna función puede quedar obsoleta, pueden detectarse algunas limitaciones o que aparezcan propuestas que mejoren la estabilidad del proyecto, por lo que es necesaria una fase de mantenimiento. Esto implica realizar correcciones de errores, actualizaciones periódicas del software, o implementación y despliegue de mejoras.
¿Dónde reside la importancia de la metodología DevOps?
La metodología DevOps es un enfoque de desarrollo de software que busca integrar la colaboración y comunicación entre los equipos de desarrollo (Dev) y operaciones (Ops) para lograr una entrega de software más rápida, eficiente y confiable.
Atendiendo a las etapas del ciclo DevOps de la imagen superior, son muy parejas a las etapas que forman el ciclo de vida de software. Es decir, la metodología DevOps abraza el ciclo de vida del software añadiendo un cambio de mentalidad que mejora enormemente la eficiencia y la comunicación entre el equipo de desarrollo y operaciones. Como coloquialmente se define, DevOps es el aceite que hace que los engranajes giren de una manera óptima.
A continuación, se detallan cuáles son esas mejoras y de qué manera se consiguen:
- Colaboración: se promueve en todo momento la cooperación entre las diversas áreas de la organización, se hace partícipe a todo el equipo en cada una de las etapas.
- Automatización: se busca eliminar de todo proceso repetitivo la acción humana con ello conseguimos que la confiabilidad en procesos críticos, como el despliegue del software en un entorno productivo, aumente exponencialmente y los momentos de tensión entre las diversas áreas se reduzcan. Este punto es vital para la mejora de las relaciones interpersonales.
- Integración continua (CI): tiene como objetivo automatizar y facilitar la integración frecuente de cambios en el código fuente de un proyecto en un repositorio compartido. En esencia, busca garantizar que el código nuevo o modificado se incorpore al código existente de manera regular, para que los errores, tanto de calidad de código como de seguridad, y posibles conflictos puedan detectarse y solucionarse rápidamente.
- Entrega continua (CD): amplía el concepto de integración continua al automatizar el despliegue de las aplicaciones en el entorno deseado, una vez pasadas las pruebas satisfactoriamente. En caso de que estas pruebas no hayan resultado positivas, el proceso de entrega continua quedará bloqueado hasta que estos resultados cumplan con los requisitos marcados. Este aspecto es fundamental para lograr un control exhaustivo sobre el código fuente que se despliega en entornos productivos, ya que esta tarea se va volviendo más complicada conforme evolucionamos a equipos/infraestructuras más complejas.
- Escalabilidad y flexibilidad: la metodología DevOps se adapta bien a entornos de desarrollo ágiles y sistemas distribuidos permitiendo la adaptabilidad según necesidades y el despliegue automatizado de aplicaciones en entornos complejos.
- Monitorización: DevOps promueve la observabilidad y revisión constante del rendimiento de las aplicaciones y los servidores donde se encuentran alojadas. El objetivo de este proceso es recoger toda la información posible del sistema para poder adelantarse a la aparición de futuros problemas reales. En caso no ser posible adelantarse al error, se pretende resolverlo en el menor tiempo posible mediante procesos automatizados que reducen considerablemente el tiempo de despliegue de la solución
Un nuevo desafío aparece en el horizonte
El ciclo de vida de desarrollo de Software es un “gran pastel”, el cual se encontraba claramente divido por sus etapas y en cada una de ellas convivían un grupo de empresas que se encargaban de dar solución a los problemas existentes.
Como se ha visto anteriormente, cada etapa está relacionada entre sí, pero es lo suficientemente diferente al resto como para imposibilitar que una de estas grandes empresas englobara más de una, debido a la complejidad que esto supone.
Sin embargo, en la actualidad, han aparecido empresas que buscan conseguir este objetivo. Dos ejemplos claros son GitHub y GitLab, entre otras existentes, las cuales nacieron como herramientas de control de versiones basadas en git. Siguiendo con lo planteado anteriormente, estos ejemplos inicialmente pertenecerían a la etapa de implementación, pero lejos de encasillarse han optado por abrir mercado y abarcar etapas posteriores. En el caso de GitLab se ha apostado por dar un paso más y englobar también la etapa de planificación, etapa bastante dominada por herramientas de ticketing como Jira, o confluence para documentación.
Con este cambio de mentalidad, además de aumentar los ingresos al poder llegar a un mayor público objetivo, se otorga un conjunto de ventajas a tener en cuenta:
- Homogeneización: se elimina la diversidad de aplicativos dentro de la arquitectura, consiguiendo que el usuario final tenga una mejor experiencia y su día a día sea mucho más cómodo al disponer únicamente de una solución con un único dominio. Con ello se suprime la necesidad de buscar soluciones basadas en un protocolo LDAP, que permitan la gestión de los usuarios a varias aplicaciones diferentes de una manera centralizada.
- Eliminación de los procesos de integración: al englobar gran cantidad de procesos en una misma aplicación, se suprime el esfuerzo asociado a la configuración y posterior mantenimiento de las integraciones entre las diferentes aplicaciones.
- Reducción del coste asociado al mantenimiento de los diferentes aplicativos: al disponer únicamente de una solución, ya no es necesario mantener un conjunto de aplicaciones, cada una de ellas con sus peculiaridades y mantenimiento correspondiente.
- Reducción de los puntos de falla y mejora de rendimiento: al estar englobado bajo la misma solución se reducen los puntos débiles en los cuales pueden aparecer errores, además de eliminar los retrasos generados por la comunicación entre aplicaciones, consiguiendo con ello que mejore el rendimiento del proceso.
- Mejora exponencial de la trazabilidad: al centralizar varios procesos bajo una misma solución, es posible realizar el seguimiento de todo el proceso de una manera más intuitiva y sencilla. Existe la posibilidad de trazar una línea totalmente clara entre la generación del ticket durante una sesión de Scrum y el despliegue del código en el entorno de producción.
- Big data: aumenta la capacidad de extracción de información relacionada con los procesos, esto permitirá crear grafos de ‘value stream’ y métricas DORA, a partir de los cuales los usuarios serán capaces de encontrar puntos de mejora y conseguir un proceso mucho más eficiente.
- Reducción de la deuda técnica: comúnmente la deuda técnica se ha asociado al área de desarrollo de código en cambio, es muy importante relacionarlo con la arquitectura utilizada y sus posibles fallas. Teniendo en cuenta lo mencionado anteriormente una solución única evita funciones redundantes, gastos duplicados y sobrecarga operativa. Facilitando además la gobernanza del aplicativo lo que repercute positivamente en la experiencia de los desarrolladores.
Como resultado de esta evolución surge el concepto de Plataforma DevOps, el cual se define como un conjunto de herramientas, prácticas y servicios que permiten a los equipos de desarrollo y operaciones colaborar de manera efectiva y automatizar el ciclo de vida de desarrollo, proporcionando un entorno unificado donde los equipos pueden trabajar juntos de manera más efectiva, automatizar procesos clave y mejorar la eficiencia en el desarrollo y operación de software.
Alternativamente, una cadena de herramientas DevOps fragmentada requiere de una integración entre las distintas herramientas para que funcionen de manera orquestada, un mantenimiento (incluyendo parcheado y actualización a la última versión) y ajustes a nivel de configuración constante.
Estas tareas, que consumen mucho tiempo, restan tiempo de trabajo efectivo diario, minimizando el valor aportado al cliente final. Los proveedores de Plataformas DevOps pretenden acelerar la entrega de valor al cliente ofreciendo un conjunto de capacidades gestionadas y totalmente integradas con soporte nativo para la orquestación.
El coste real de DevOps
Vamos a realizar un ejercicio de estimación que nos permita comparar el coste de una cadena de herramientas DevOps con el coste de una Plataforma DevOps.
Este supuesto se va a realizar pensando en una empresa que cuenta con 100 desarrolladores y un presupuesto anual para desarrollos de 140.000$. La empresa cuenta con un modelo DevOps eficaz, lo que les permite realizar entre 5 y 15 entregas diarias. Este modelo DevOps compatibiliza diferentes tecnologías y lenguajes de programación.
El coste aproximado de una plataforma DevOps
Haciendo un cálculo genérico sobre las diferentes opciones de Plataformas DevOps en el mercado actual, el valor medio de una subscripción asciende a 25$/usuario/mes, lo que supone para el caso de un equipo de 100 personas un gasto anual de 30.000$.
El mantenimiento de una plataforma DevOps con la modalidad SaaS corre a cargo del fabricante por lo que el usuario no tiene que asumir este coste. Cabe indicar que esto cambiará en caso de que la empresa consumidora del producto se decante por elegir una solución autogestionada, en este caso el mantenimiento corre a cargo de dicha empresa y los costes se incrementarían.
El coste aproximado de una cadena de herramientas
Ya que cada empresa puede utilizar una combinación diferente de herramientas opensource / empresariales que den cobertura a todo el ciclo de vida de desarrollo del código, hemos elegido de entre las opciones posibles la que más comúnmente nos encontramos, compuesta por:
- Herramienta de ticketing, en la cual dispongamos de un inventario de tareas, las cuales describan de manera clara las diferentes acciones a realizar y el estado en el que se encuentran.
- Control de versiones de código, herramienta esencial en el desarrollo de software y en la gestión de proyectos colaborativos. Su función principal es rastrear y administrar las diferentes versiones de archivos y código fuente a lo largo del tiempo.
- Control de calidad de código, diseñado para analizar y evaluar el código fuente de un programa de software con el objetivo de identificar problemas, aplicar buenas prácticas de programación y mejorar la calidad general del código.
- Control de la seguridad, soluciones diseñadas para proteger sistemas informáticos, redes, aplicaciones y datos contra amenazas y vulnerabilidades. Estas herramientas abordan una amplia gama de riesgos cibernéticos, desde ataques de malware y hackers hasta problemas de cumplimiento normativo
- Motor de CI/CD, herramienta o plataforma que automatiza y facilita el proceso de integración, pruebas y entrega de código en el desarrollo de software.
- Almacenamiento de artefactos, repositorio centralizado donde se almacenan y gestionan los componentes de software generados durante el proceso de desarrollo, compilación y construcción de un proyecto
Como se puede observar en la imagen anterior, existe un coste asociado al mantenimiento de cada uno de los componentes de la cadena que no siempre se contempla (opensource, o empresarial para el que no se incluye el coste de licenciamiento), ya que suele diluirse en otras actividades, y que da como resultado un valor aproximado de 37.000$.
Si se compara con el valor obtenido de una plataforma DevOps, no dista mucho como se podría pensar, llegando incluso a ser menor. Pero el coste existe, y es por ello recomendable realizar cálculos que permitan tomar una decisión correcta sobre qué es más beneficioso.
¿Hacia dónde se dirige el mercado?
Llegado a este punto surgen varias preguntas en el horizonte, ¿Qué opción va a ser la predilecta por los consumidores? ¿Se producirá un cambio de mentalidad acercándose hacia el uso de plataformas DevOps?
Se estima un aumento exponencial del uso de plataformas DevOps en los próximos años. Todo ello estimulado por el crecimiento del sector, provocando que las organizaciones necesiten modernizar sus aplicaciones, lo que requiere un cambio fundamental en las herramientas subyacentes. Las plataformas DevOps serán cada más demandadas a medida que las organizaciones adopten prácticas ágiles y DevOps con el fin de poder ofrecer diversas aplicaciones, incluyendo aplicaciones nativas en la nube, aplicaciones móviles, web Edge e IoT.
Según una estimación de Gartner en 2027, el 75% de las organizaciones habrán cambiado de soluciones múltiples a plataformas DevOps, con el fin de agilizar la entrega de aplicaciones, frente al actual 25% (2023).
Gartner también estima mediante su cuadrante mágico cuales son los actores principales y los valora a partir de sus fortalezas y debilidades, definiendo que soluciones son los referentes en el sector y cuales pueden llegar a serlo en un futuro.