EL PARADIGMA DEVOPS Y SU IMPLEMENTACIÓN EN EL DESARROLLO DE SOFTWARE

THE DEVOPS PARADIGM AND ITS IMLEMENTATION IN THE SOFTWARE DEVELOPMENT

Autor: Ing. Diana Melys Basilio Delgado

Institución: Órgano de Tecnologías y Sistemas del Ministerio del Interior (MININT), Ciego de Ávila, Cuba

Correo electrónico: diana.91@nauta.cu

Basilio, D.M.

El paradigma DevOps y su implementación en el desarrollo de …

Pág. 134-142

Recibido: 11/03/2020

Aceptado: 12/06/2020

Publicado: 15/09/2020

Universidad&Ciencia

Vol. 9, No. 3, septiembre-diciembre (2020)

ISSN: 2227-2690 RNPS: 2450

http://revistas.unica.cu/uciencia

RESUMEN

En los últimos años el uso del término DevOps ha tomado auge en la industria tecnológica, sin embargo, hay diversas interpretaciones en la definición de su significado. El objetivo de este trabajo es exponer, de manera clara y sintetizada lo que significa DevOps y sus aportes a las metodologías ágiles. Además, se proponen algunas sugerencias para su implementación. El método empleado para elaborar este artículo científico es el estudio de documentos. La información se obtuvo de diversas fuentes: revistas científicas, trabajos académicos y libros de contenido científico.

Palabras clave: Desarrollo de Software, DevOps, Metodologías Ágiles.

ABSTRACT

In recent years the use of the term DevOps has taken a lot of strength in the technology industry, however, there are various interpretations in the definition of its meaning. The objective of this work is to expose, in a clear and synthesized way, what DevOps means and its contributions to agile methodologies; In addition, some suggestions for its implementation are proposed. The method used to elaborate this scientific article is the study of documents. The information was obtained from various sources: scientific journals, academic papers and books of scientific content.

Keywords: Agile Methodologies, DevOps, Software Development.

INTRODUCCIÓN

Los cambios económicos y sociales provocados por la transformación digital y el auge de las metodologías ágiles en las empresas han impulsado el uso de Development + Operations (DevOps) para el desarrollo de software. El concepto surgió como fruto de la frustración que el consultor Patrick Debois experimentó en 2007 durante un proyecto de migración del centro de datos del gobierno de Bélgica. Debois participaba inicialmente a cargo del testing y en esa posición sufrió los fallos de cooperación y comunicación a raíz de conflictos y malentendidos entre los desarrolladores y los administradores de sistemas del proyecto. Un año después, durante la Agile Conference 2008 en Toronto, Canadá, Debois tuvo una fértil conversación con Andrew Shafer, fundador de Puppet Labs, sobre ampliar el alcance de las metodologías ágiles (Adaptative Software Development, Extreme Programming, SCRUM, Crystal Methodologies, Dynamic Systems Development Method, Lean Programming y Feature-Driven Development, entre otras) también al ámbito de la infraestructura y la administración de sistemas (Carvalho, et al. 2017).

A medida que se amplificaba la conversación sobre DevOps, iba saliendo a la luz la realidad sobre el modelo de desarrollo de software imperante hasta el momento: equipos o grupos de trabajo aislados y solo preocupados por su parte del proyecto, líneas de comunicación inexistentes, largas jornadas de trabajo, errores sin corregir, y clientes insatisfechos. Y así se empezó a expandir la palabra de la “cultura DevOps” entre profesionales y organizaciones conscientes de que en un entorno altamente competitivo como es el desarrollo de software era necesario unir desarrollo y operaciones (Martín, 2018).

DevOps no se trata solo de cuestiones técnicas. Tampoco es simplemente una tecnología ni una innovación. En términos simples, DevOps es una combinación de terminologías complejas. Se puede considerar como un concepto, cultura, desarrollo y filosofía operativa o un movimiento (Soni, 2016).

Este estudio surge por la necesidad de promover la cultura de DevOps en Cuba, debido a que la bibliografía existente, aunque no es escasa, sí está bastante fragmentada. Los documentos encontrados en la búsqueda abarcan indistintamente aspectos relacionados con DevOps como su concepto, experiencias de su aplicación práctica, importancia y las herramientas que facilitan su aplicación, etc. El objetivo de este trabajo es exponer, de manera clara y sintetizada, lo que significa DevOps, cuales son sus aportes a las metodologías ágiles y la importancia de adoptarlo. También, se proponen algunas sugerencias para su implementación. Los documentos se seleccionaron en base a los criterios de análisis siguientes: que fueran artículos de revistas científicas, trabajos académicos o libros de contenido científico, escritos en español o en inglés.

DESARROLLO

Significado de DevOps

Para entender mejor lo que significa DevOps primero es necesario comprender los roles de Dev (desarrolladores) y de Ops (operaciones).

Ops está compuesto en parte por los sysadmins (administradores de sistemas), los cuales tienen la misión del mantenimiento de los sistemas y su normal funcionamiento, hacen los despliegues y las rollbacks de las versiones anteriores de las aplicaciones que desarrolla Dev, es su responsabilidad mantener intacto el entorno de producción. Los sysadmins tienen que ejecutar las aplicaciones, supervisar la operación, funcionamiento, evaluar y proponer mejoras para mantener las aplicaciones con rapidez y disponibilidad, además, deben planear los cambios con cautela, tratando de minimizar los riesgos. Les preocupa sobre todo la seguridad, estabilidad y el acuerdo de nivel de servicio (SLA) para cada producto bajo su responsabilidad. (Carvalho, et al., 2017).

Dev se compone en parte por los desarrolladores los que trabajan con lógica y creatividad, pasan la mayor parte de su tiempo codificando soluciones y centran su trabajo en los requisitos que el analista funcional pudo mapear junto con el cliente. Están constantemente creando y mejorando sus aplicaciones con nuevas versiones de estas y necesitan estar disponibles, así los clientes pueden tomar ventaja de las capacidades solicitadas. El conflicto está en que la nueva versión significa desplegar de nuevo y, si ocurre un problema, esto va a exigir un rollback; ambos procedimientos implican trabajo no estimado de los equipos de operaciones. Los desarrolladores normalmente quieren que sus aplicaciones se desplieguen lo antes posible, sin embargo, los sysadmins quieren asegurarse de que la aplicación es lo suficientemente estable como para entrar en producción sin generar incidentes (Carvalho, et al., 2017).

DevOps es un movimiento que aborda el conflicto natural entre el desarrollo de software y las operaciones, mejorando la colaboración entre los departamentos de desarrollo y operaciones y agilizando el proceso completo de entrega de manera integral. DevOps conduce a un enfoque de "un equipo" en el que los programadores, evaluadores y administradores de sistemas participan en el desarrollo de la solución (Huttermann, 2012).

De ahí, la importancia de adoptar DevOps como filosofía de trabajo, ya que permite la reducción de riesgos de cambios mediante el uso de herramientas adecuadas y la adopción de una cultura específica. Además, busca entregar aplicaciones con menor costo, de forma más rápida y con menos riesgos. Por esto, se hace de vital necesidad difundir aún más este concepto, desde una perspectiva clara, sintetizada y entendible.

Aportes de DevOps a las metodologías ágiles

La cultura de DevOps forma parte de las metodologías ágiles, pero esta tiene un mayor alcance, ya que se extiende hasta el área de las operaciones, algo que las metodologías ágiles no consideran. “DevOps es una cultura que propone un proceso de transformación que alcanza toda una organización a través de la integración, colaboración y retroalimentación” (Carvalho, et al., 2017, p. 23). “Podemos considerar DevOps como una extensión del movimiento ágil a la explotación del software, no solo a su desarrollo” (Ortuño, 2018, p. 12).

El entorno de producción donde se despliegan y explotan las aplicaciones, comprende la configuración de hardware de los servidores, donde se alojan los servicios y las aplicaciones en sí, las unidades centrales de procesamiento (CPU), la cantidad de memoria, la infraestructura de red que conecta los entornos, la configuración de los sistemas operativos y el middleware, por ejemplo, las aplicaciones del sistema de mensajería, así como los servidores web y los servidores de bases de datos que admiten la aplicación. Al ignorar todos estos requisitos, los prototipos bien probados en el ambiente de desarrollo, durante su puesta en producción pueden retrasarse, tener tiempo de espera y apagarse en la escala. Además, sin una buena automatización, el despliegue puede tomar mucho tiempo y ser mucho menos fiable, debido a errores, conflictos y procesos más lentos. Asimismo, si el producto requiere mejoras, las entregas indocumentadas dificultarán el trabajo.

Ampliando el concepto de las metodologías ágiles basadas en la entrega rápida e iterativa de los requisitos de funciones de las aplicaciones informáticas, DevOps también abarca los requisitos necesarios para manejar exitosamente las nuevas funciones en un sistema de producción.

DevOps se centra en tres grupos de trabajo que, en ocasiones, suelen tener problemas de comunicación, puntos de vista diferentes o encontrarse en fases muy distintas de trabajo, con el objetivo de conciliar el trabajo de estos en busca de la consecución de objetivos comunes.

Ø  Desarrolladores: Centrados en la creación e implementación de sistemas informáticos basados en lenguajes de programación.

Ø  Operaciones: Se encarga de la infraestructura, los procesos de producción, desarrollo de hardware, etc.

Ø  Control de calidad: Se encarga de testar productos y tomar decisiones.

El impacto de la adopción de DevOps

Hay que reconocer que los beneficios de DevOps se comparten entre la empresa y el cliente y, para ello, todos los equipos (front-office, desarrollo, operaciones y clientes) deben compartir el compromiso hacia la automatización, la entrega y la retroalimentación, impulsadas por los resultados. Cuando la meta es la rapidez en la entrega y la respuesta a la demanda del consumidor, todos los equipos deben optimizarse y automatizarse (Reddy, 2013).

Las aplicaciones de software consisten en funcionalidades las cuales van aumentando a petición de los clientes para satisfacer sus necesidades. Solo las características que se envían con el producto agregan valor y forma y mejoran una "solución". Una solución es más que un conjunto de características, una solución es una aplicación que agrega valor y beneficia al usuario y al cliente.

Las aplicaciones informáticas solo agregan valor, si estas nuevas funcionalidades están disponibles no solo en el espacio de trabajo de un desarrollador o en una máquina de prueba, sino también en el entorno de producción. El entorno de producción comprende la configuración de hardware de los servidores, las unidades centrales de procesamiento (CPU), la cantidad de memoria, la infraestructura de red que conecta los entornos, la configuración de los sistemas operativos y el middleware, por ejemplo, las aplicaciones del sistema de mensajería, así como los servidores web y los servidores de bases de datos que admiten la aplicación (Huttermann, 2012).

Al adoptar DevOps las organizaciones pueden desbloquear nuevas oportunidades de negocios (Reddy, 2013):

Ø  Entregar una experiencia al cliente diferenciada y comprometida que cree fidelidad y que aumente la cuota de mercado gracias a la retroalimentación constante de los clientes y a su capacidad de respuesta.

Ø  Obtener una ventaja para capturar mercados creando valor con mayor rapidez gracias a la innovación impulsada por software, con mejor previsibilidad y más posibilidades de éxito.

Ø  Aumentar la capacidad de innovar reduciendo los desperdicios y la repetición de tareas a fin de dedicar los recursos a actividades de mayor valor.

Implementación de DevOps en las empresas

Las empresas que realizan entregas de aplicaciones informáticas muy frecuentes, pueden requerir una conciencia u orientación del tipo DevOps. La adopción de DevOps está siendo impulsada por:

Ø  El uso de los procesos de desarrollo ágiles y otras metodologías.

Ø  El incremento de una mayor tasa de versiones de producción por parte de las unidades interesadas de aplicación y de negocios.

Ø  Amplia disponibilidad de virtualización y la infraestructura cloud computing de proveedores internos y externos.

Ø  Aumento del uso de la automatización del datacenter y las herramientas de gestión de configuración.

Es posible que una empresa tenga una gran inversión en sus sistemas y arquitectura actuales. Si debe rediseñarlos para aprovechar DevOps, hay que preguntarse si realmente vale la pena. Algunas prácticas de DevOps son independientes de la arquitectura, mientras que, para obtener el beneficio completo de otras, la refactorización arquitectónica puede ser necesaria, como se puede apreciar en los ejemplos siguientes:

  1. Agregar requisitos a un sistema desde Ops puede requerir alguna modificación arquitectónica. En particular, es probable que los requisitos de Ops estén en el área de registro, monitoreo e información para apoyar el manejo de incidentes y posiblemente requieran algunas modificaciones menores a la arquitectura, pero, por lo general, no modificaciones drásticas.
  2. Hacer que Dev sea más responsable del manejo de incidentes relevantes. Por sí mismo, este cambio es solo un cambio de proceso y no debería requerir modificaciones arquitectónicas. Sin embargo, al igual que con la categoría anterior, una vez que Dev se da cuenta de los requisitos para el manejo de incidentes, pueden producirse algunas modificaciones arquitectónicas.
  3. Velar por que el proceso de implementación que se utilice en la empresa sea cumplido tanto por el personal de Dev como por el de Ops. En la fase de inicio de cada sistema se podría aplicar un proceso de implementación. Cada sistema, cuando se inicializa, verifica su pedigrí. Es decir, llegó a la ejecución a través de una serie de pasos, cada uno de los cuales se puede verificar para que haya ocurrido. Además, los sistemas, de los que depende (por ejemplo, sistemas operativos o middleware), también tienen pedigríes verificables.
  4. Utilizar la implementación continua. El despliegue continuo es la práctica que conduce a las modificaciones arquitectónicas de mayor alcance. Por un lado, una organización puede introducir prácticas de implementación continua sin grandes cambios arquitectónicos. Por otro lado, las organizaciones que han adoptado prácticas de implementación continua, con frecuencia comienzan a pasar a una arquitectura basada en microservicios.
  5. Desarrollar el código de infraestructura con el mismo conjunto de prácticas que el código de la aplicación (Bass, Weber y Zhu, 2015).

En DevOps, las fases del ciclo de vida de un producto digital (planificación, programación o código, construcción, pruebas, entrega, despliegue, operación, monitorización) no están estrictamente delimitadas como en un ciclo en cascada, sino que DevOps se basa en un flujo iterativo, en el que pueden solaparse diferentes procesos. Por eso, el gran reto de practicar DevOps radica en alinear los objetivos de los diversos equipos que trabajan en un mismo proyecto, de manera que se generen las condiciones necesarias para poder lanzar aplicaciones confiables de manera rápida y frecuente. Para conseguirlo, los implicados pueden auxiliarse de herramientas diversas para las diferentes fases, como se muestra en la figura 1 (Martín, 2018).

Descripción: Descripción: herramientas-devops-ciclo-iterativo-1024x435

Figura 1: Distribución de herramientas por fases (Martín, 2018).

Es importante señalar que las herramientas solas no son DevOps. Lo que hace que las herramientas sean "DevOps" es la forma en que se usan, no las características fundamentales de las propias herramientas. Además, de las herramientas que se utilizan, una parte igualmente importante de esta cultura son los valores, normas y conocimientos. Examinando cómo trabaja la gente, la tecnología que utilizan, cómo la tecnología influye en la forma en que trabajan y cómo influyen las personas, se puede tomar decisiones intencionales sobre el panorama del desarrollo de software en las empresas (Davis y Daniels, 2016).

CONCLUSIONES

Devops es una forma de pensar y una forma de trabajar que permite a las personas y organizaciones desarrollar y mantener prácticas laborales sostenibles. Es un espacio para compartir historias y desarrollar empatías, permitiendo desarrollar aplicaciones de manera efectiva y duradera. Con el estudio realizado se pudo exponer aspectos fundamentales para una correcta adopción de DevOps; así como constatar que DevOps es una cultura, una filosofía de trabajo que vino a complementar las metodologías ágiles que ya se venían aplicando, llevando. DevOps sólo funciona, si las áreas de infraestructura y desarrollo están dispuestas a ceder en el cambio de sus métodos de trabajo. Las empresas con la adopción de DevOps obtienen múltiples beneficios. Entre ellos lograr entregas más rápidas, con mayor estabilidad y rendimiento, menor tiempo de paradas y disminución de incidentes y riesgos. La adopción de DevOps supone un esfuerzo para las empresas.

REFERENCIAS BIBLIOGRÁFICAS

BASS, Len, WEBER, Ingo, y ZHU, Liming (2015). DevOps: A software Architect´s Perspective.

BUYTAERT, K. (2016). What devops: Kris Buytaert explains. [en línea]. Junio 2016. Disponible en: https://www.linux.com/tutorials/what-devops-kris-buytaert-explains/ Visitado el 8 de enero del 2020.

CARVALHO, J. A. ... [et al.] (2017). Introducción a DevOps y DevSecOps. Un guía para entender la revolución en IT.

DAVIS, J. y DANIELS, R. (2016). Effective DevOps: Building a Culture of Collaboration, Affinity, and Tooling at Scale.

HUTTERMANN, Michael (2012). DevOps for Developers.

REDDY, Ashok (2013). DevOps: el enfoque de IBM [en línea]. Mayo 2013. Disponible en: ftp://ftp.software.ibm.com/la/documents/imc/la/commons/ RAW14323_HR.pdf Visitado el 12 de octubre de 2019.

MARTÍN, M. J. (2018). ¿Qué es DevOps? Aclarando el significado. Consultoría y Servicios IT para empresas Profile Software Services [en línea]. Julio 2018. Disponible en: https://profile.es/blog/que-es-devops-harder-better-faster-stronger/ Visitado el 12 de octubre de 2019.

ORTUÑO, M. (2018). DevOps. Departamento de Sistemas Telemáticos y Computación (GSyC) [en línea]. Noviembre 2018. Disponible en: https://gsyc.urjc.es/~mortuno/lagrs/06-DevOps.pdf Visitado el 8 de octubre de 2019.

SONI, Mitesh (2016). DevOps for Web Development.