Ejemplo 2022
Ejemplo 2022
Ejemplo 2022
Asesor
Profesor
Universidad Eafit
UNIVERSIDAD EAFIT
MEDELLÍN
ESCUELA DE INGENIERÍAS
MAESTRÍA EN INGENIERÍA
2019
CONTENIDO
TABLAS ................................................................................................................... 5
ILUSTRACIONES .................................................................................................... 5
RESUMEN ............................................................................................................... 6
ABSTRACT .............................................................................................................. 7
INTRODUCCIÓN ..................................................................................................... 9
JUSTIFICACIÓN .................................................................................................... 17
OBJETIVOS ........................................................................................................... 18
GENERAL .......................................................................................................... 18
ESPECÍFICOS ................................................................................................... 18
DEVOPS ............................................................................................................ 23
ILUSTRACIONES
Las organizaciones hoy enfrentan una nueva dinámica económica: un mundo híper
conectado, tecnologías accesibles a la mayor parte de la población y empresas
haciendo grandes disrupciones y creando experiencias digitales que establecen un
nuevo estándar para la interacción de los clientes con las marcas. En respuesta a
esto todas las compañías, sin excepción, deben iniciar un proceso de
transformación digital, donde el software es uno de los elementos claves. Así pues
es relevante contar con capacidades para crear y evolucionar software con criterios
de velocidad, calidad y eficiencia para preservar la existencia de las compañías. El
movimiento DevOps, particularmente en las capacidades de Entrega Continua de
Software define las prácticas que debe incorporar el proceso de ingeniería de
software de una empresa para lograr producir y mantener software bajo las
exigencias mencionadas. Esta investigación centra su atención en los procesos y
prácticas del ciclo Construcción (Build), Pruebas (Test), despliegue (Deployment) y
liberación en producción (Release). Aborda conceptos, definiciones y prácticas, y
analiza la importancia de los procesos de gestión de la configuración, integración
continua, automatización de pruebas y automatización del despliegue y la liberación
en producción. Asimismo revisa las herramientas necesarias para implementar,
simplificar, automatizar y administrar las prácticas de cada proceso. Finalmente se
hace una propuesta para guiar la adopción y mejoramiento de las prácticas de
entrega continua de software y sugiere un conjunto de métricas para evaluar el
desempeño del equipo responsable del ciclo.
6
ABSTRACT
7
8
INTRODUCCIÓN
negocio
Así pues, hoy en día la función TI juega un papel preponderante en el logro de los
objetivos estratégicos de las corporaciones, dado que las tecnologías de
información se están constituyendo como el vehículo por excelencia para la
materialización de las estrategias y tácticas empresariales.
El reto para la función TI cada día es mayor, pues podemos evidenciar claramente
que vivimos en un mundo donde las compañías se están transformando en
entidades (negocios) digitales, y con ellas, sus interacciones con los clientes,
aliados, accionistas, empleados, entes de regulación y control, entre otros. Es
suficiente con tomar un teléfono móvil inteligente (Smartphone) de una persona del
común para validar lo anteriormente mencionado, un simple ejercicio de exploración
9
a un dispositivo como estos nos daría cuenta que a través de unos cuantos clicks /
touches es posible, entre otras: Pagar facturas, solicitar asistencia de una
aseguradora en el lugar de un accidente, solicitar un servicio de taxi, reservar un
hotel o restaurante, realizar compras on line. Luego, los momentos de verdad que
experimentan los clientes con las compañías con las cuales interactúan, tienden
cada vez más a ser interacciones digitales, “conversaciones” a través de una
aplicación instalada en un móvil, tableta o una accesible a través de un navegador
de internet de un computador portátil o de escritorio. Entonces, ahora la calidad de
las experiencias de los clientes con las compañías ya no se medirá en términos del
trato amable, respetuoso y cordial brindado por un representante de la empresa,
mucho menos por una rápida y acertada respuesta proporcionada por este
representante; por el contrario, la satisfacción del cliente estará determinada por los
tiempos de respuesta a las transacciones en una aplicación, el nivel y extensión de
funcionalidades a las que se puede acceder, las características de usabilidad, La
confianza y seguridad de sus transacciones, entre otras.
Estamos, tal vez sin darnos cuenta, inmersos en lo que se ha denominado por
muchos la “Economía de las Aplicaciones”. Forrester Research, de acuerdo con los
datos suministrados por SNL Financial en un estudio reciente (Forrester, 2014),
indica que los bancos en los Estados Unidos han cerrado alrededor de 2.700
sucursales en 2012 y proyectan cerrar un número cercano a las 13.000 para final
de la década; lo anterior, como resultado de las estrategias de crear “Sucursales
Virtuales en el Bolsillo” a través de aplicaciones móviles (Forrester, 2014) . Luego,
no debe ser sorpresa que un banco como JPMorgan Chase tenga más
desarrolladores que Google, dada la alta dependencia de TI para el desarrollo de
su actividad económica.
Con estos antecedentes en mente, es posible inferir que uno de los mayores retos
que enfrentan las organizaciones, es el de construir y modificar continuamente su
software de forma más rápida, de mejor manera y a un menor costo. Sin duda, esto
requiere de grandes transformaciones en términos de procesos, herramientas y
10
personas, para poder reducir los ciclos de entrega de las aplicaciones. Para esto es
necesario contar con procesos de creación y evolución de software rápidos,
repetibles, confiables, y lo más importante, altamente automatizados, de tal suerte
que el tiempo que transcurra entre tener una idea y materializarla en una aplicación
sea cuestión de horas o días, y no de meses o años.
Como respuesta a estos desafíos han surgido varios movimientos que vienen
transformando los procesos de ingeniería del software para responder a la
necesidad de crear aplicaciones a la velocidad, con la calidad y niveles de eficiencia
que exige el entorno de competencia y transformación digital. Uno de ellos es el
movimiento DevOps, este promueve la adopción de prácticas agiles y lean,
poniendo un especial énfasis en la automatización, las personas y la cultura para
lograr la colaboración entre los equipos de desarrollo de software y operaciones
(infraestructura, plataforma) y así poder reducir el tiempo que transcurre entre el
momento que se realiza un cambio en código y su liberación en producción
funcionando correctamente.
De acuerdo con (Forsgren, Humble, & Kim, 2018) las prácticas de Entrega Continua
de Software son una porción del movimiento DevOps. El movimiento DevOps
completo está compuesto por las anteriores y las capacidades y prácticas en las
áreas de Arquitectura, Gestión de Producto y Procesos, Gestión Lean y Medición,
y Cultura. El propósito de este trabajo es identificar cuáles son las practicas DevOps
que permiten lograr entregar software de forma continua, con los niveles de calidad
y eficiencia requerida por los negocios en su proceso de transformación digital. Esta
11
investigación documenta las técnicas que permiten reducir el tiempo que transcurre
entre la escritura del código y la liberación de software funcionando en producción.
También considera los aspectos claves de las tecnologías requeridas para la
implementación de prácticas base del ciclo automático de entrega de software como
lo son: Gestión de la Configuración, Integración Continua, Automatización de
Pruebas, Automatización del Despliegue y la Liberación en Producción. Finalmente
se documentan en 11 fases unas consideraciones sugeridas por el autor para la
implementación de las prácticas DevOps para la entrega continua de software, esto
busca, construir una primera versión de un cuerpo de conocimiento capaz de
orientar a los interesados en los aspectos claves para abordar un proceso de
implementación
12
PLANTEAMIENTO DEL PROBLEMA
Las empresas requieren construir aplicaciones y/o modificar las existentes con
mayor velocidad, calidad y eficiencia para ser competitivas y mantenerse relevantes
en la nueva realidad de la Economía Digital. Hoy día las compañías no cuentan con
prácticas (procesos, técnicas y herramientas) que permitan lograr este propósito, y
si bien, muchas han adoptado prácticas agiles como SCRUM, XP, SAFe, entre
otras, éstas solo aceleran una parte del ciclo de vida del desarrollo de las
aplicaciones y no logran reducir los tiempos totales de entrega de software a los
clientes y/o procesos de negocio. Esto ocurre porque no se interviene el proceso
completo.
De acuerdo con (Forsgren, Humble, & Kim, 2018), el ciclo de vida de las
aplicaciones, el cual inicia con una idea o solicitud del mercado y finaliza una vez el
software está liberado en producción, funcionando correctamente y a disposición
de sus usuarios se divide en dos partes: una etapa de diseño y desarrollo, y una
etapa de entrega del producto.
(Humble & Farley, CONTINUOUS DELIVERY Reliable Software Releases Through Build, Test, and Deployment
Automation, 2011)
13
La etapa de diseño está representada en la Ilustración 1: Flujo de Valor del Software
por los procesos representados en los cajones en blanco y los procesos nombrados
como: evaluación de la oportunidad (Product Opportunity Assessment),
descubrimiento del producto (Product Discovery), planificación y estimación del
producto (Product Planning and Estimation). El trabajo acometido en esta etapa es
altamente variable pues las actividades usan técnicas de ideación y creatividad para
las cuales no existen parámetros de estimación que puedan estandarizarse (Kim,
Patrick, Willis, & Humble, 2016). En consecuencia, hay una dificultad inherente por
la naturaleza de las tareas, y si bien técnicas como Visual Story Map y la reducción
de documentación exahustiva, entre otras, utilizadas por los equipos en las
practicas agiles han ayudado a reducir los tiempos de conceptualización, los
tiempos totales para entregar el software siguen siendo inaceptables. Por otro lado,
está la etapa de entrega del producto representados en la gráfica (Ilustración 1:
Flujo de Valor del Software) por los cajones sombreados y los procesos nombrados
como: desarrollo (Development), pruebas y aprobación final (final testing and
approval), y liberación (reléase). Durante esta fase, el trabajo a ejecutar es bien
conocido y puede estimarse con exactitud, adicionalmente las tareas son de baja
variabilidad en su esencia.
Hoy, una gran mayoría de empresas desconocen cuáles son las otras prácticas
adicionales a las de desarrollo ágil (Etapa de Diseño), que contribuyen a disminuir
los tiempos del ciclo de entrega, tener software con menos defectos y reducir los
costos. Un estudio reciente de Forrester indica que el 31% de la industria no está
utilizando prácticas y principios que son ampliamente considerados como
necesarios para acelerar la transformación digital (Stroud, Oehrlich, LeClair, Kinch,
& Kinck, 2017). La realidad es que durante la etapa de entrega del producto,
prolifera la ejecución manual de actividades de construcción (Build), pruebas
unitarias y de aceptación, despliegue (Deploy) en los diferentes ambientes y
liberación en producción (Release). Asimismo no existe colaboración entre los
equipos de operaciones y desarrollo, la comunicación se limita a generación de
14
solicitudes (tiquetes) formales con acuerdos de servicio que se extienden por días
o semanas para la entrega de recursos o capacidades de infraestructura para los
ambientes, motores de bases de datos, configuraciones en equipos de red y
seguridad, instalaciones en ambientes de producción. Esto deja múltiples
posibilidades para mejorar los tiempos de ejecución no solo de la etapa sino también
del ciclo de entrega de software completo. Pues no responder con la celeridad
requerida a la necesidad de modificar una característica, adicionar una
funcionalidad o corregir un error tiene impactos económicos para las compañías,
bien sea por:
15
Para que exista esta adopción en las empresas es necesario dar a conocer las
prácticas, reconocer los beneficios de las mismas y contar con una guía para ayudar
a su implementación.
16
JUSTIFICACIÓN
Las compañías que carezcan de la capacidad para hacer y/o modificar mejor
software, de manera más oportuna y a niveles de costo más óptimo serán
sobrepasadas por aquellas que hayan implementado prácticas para lograr este
cometido. Cobra importancia entonces, sintetizar un cuerpo de conocimiento que
pueda ser tomado como referencia por parte de los líderes de los procesos de
Ingeniería de Software y gestión de infraestructura y plataforma, para iniciar la
transformación de los procesos actuales de entrega de software.
Esta investigación es pertinente toda vez que sus resultados permiten poner a
disposición de los interesados en la materia una descripción de las prácticas
DevOps para la entrega continua de software, junto con recomendaciones de
adopción para facilitar su implementación. Asimismo, da cuenta de las herramientas
de software que son indispensables para lograr que las prácticas logren los niveles
de eficiencia y eficacia requeridas para crear valor.
17
OBJETIVOS
GENERAL
Identificar y documentar aspectos claves sobre las prácticas DevOps que permiten
a las organizaciones lograr la entrega de software de forma continua con la
velocidad, los niveles de calidad y eficiencia requerida por los negocios en su
proceso de transformación digital.
ESPECÍFICOS
2) Describir las prácticas de Ingeniería del Software alineadas con DevOps para
de software.
18
MARCO TEÓRICO CONCEPTUAL
19
estas compañías ahora dependen completamente de las TI para materializar la
estrategia de negocios y desarrollar su actividad económica.
20
El software o aplicaciones son entidades o productos complejos de construir,
mantener, mejorar y evolucionar. Por esta razón es necesario contar con métodos
estructurados para su creación. A estos métodos, se les conocen como Modelos de
Ciclo de Vida de Desarrollo de Software, en inglés y por sus siglas The Software
Development Life Cycle (SDLC). Existe un número importante de modelos, entre los
más conocidos y utilizados están: Cascada, Modelo-V, Prototipado, Espiral,
Iterativo, Incremental y Ágil (CLEVERISM, 2018). En términos generales todos los
modelos contemplan, a su modo las etapas de planificación, Análisis, Diseño,
Desarrollo, Despliegue y Mantenimiento. Como se ha dicho, la transformación digital
requiere prácticas y modelos de Ingeniería del Software que permitan poner a
disposición de las necesidades cambiantes de los negocios, las aplicaciones de
software que estos requieren en periodos de tiempo muy cortos; por tal razón, esta
investigación propone como modelo de ciclo de vida de desarrollo de software el
ágil, que comprende las siguientes fases o etapas, de acuerdo con (Ambler & Lines,
2012):
Concepción
Incepción
Construcción / Iteraciones
Transición
Producción
Retiro
En ese orden de ideas, las prácticas DevOps para la entrega continua de software
que se abordan en este trabajo son algunas de aquellas requeridas durante las
fases:
Construcción / Iteraciones
Transición
21
Ilustración 2: Ciclo de Vida de Desarrollo de Software Ágil
requerimientos de producto.
software.
complete.
22
Codificación.
Pruebas.
Operaciones.
DEVOPS
Conceptos y Definiciones
23
Las prácticas y capacidades necesarias para implementar en producción software
de calidad con la velocidad y los niveles de eficiencia requeridos provienen del
movimiento que hoy conocemos como DevOps. A continuación se proporcionan
algunas definiciones plausibles:
De acuerdo con (Bass, Weber, & Liming, 2015) “DevOps son un conjunto de
prácticas orientadas a reducir el tiempo que transcurre entre el momento de la
adición de un cambio en las líneas de código al código fuente y el instante en el cual
dichas líneas de código han sido implementadas en producción, asegurando alta
calidad” (p, 4).
Importancia de DevOps
24
Investigaciones realizadas durante más de 4 años y documentadas por (Forsgren,
Humble, & Kim, 2018) dan cuenta que organizaciones de todos los tamaños,
industrias y tipo de tecnologías de software que han implementado prácticas
DevOps obtienen mejores resultados, comparativamente contra aquellas
compañías donde las prácticas son incipientes o nulas, así:
25
Historia de DevOps
El Movimiento Lean, el cual surgió en los inicios de los años 1980 como un intento
de codificar el sistema de producción de Toyota y el cual hizo popular las técnicas
de Mapa de Flujo de Valor (Value Stream Map), los tableros Kanban y el
mantenimiento productivo total.
El Movimiento Agil, iniciado en el 2001 con la promulgación del manifiesto ágil por
parte de diez y siete pensadores del desarrollo de software con el propósito de
alivianar los métodos y procesos de desarrollo de software y teniendo como principio
básico “Entregar software funcionando de manera frecuente, desde un par de
semanas hasta un par de meses, con preferencia de tiempos cortos”.
Practicas DevOps
26
procesos de entrega de software y a su vez impactan el desempeño organizacional.
Ellos las han clasificado en 5 categorías, a saber:
27
12) Hacer visible el flujo de trabajo durante todo el ciclo
negocio.
Progress)
28
23) Proporcionar recursos y herramientas para que el trabajo sea significativo
29
Conceptos y Definiciones
Para lograr la puesta en funcionamiento del software con los criterios de velocidad,
calidad y eficiencia necesarios, se requiere además de escribir código que satisfaga
los requisitos de negocio y del cliente, ejecutar otro conjunto de actividades en los
procesos orientados a la construcción, prueba, despliegue, y liberación del software
en producción. Esos procesos diseñados y ejecutados de forma orquestada, y en la
medida de lo posible completamente automatizada, se conocen con el nombre de
Entrega Continua (En inglés, Continuous Delivery). Este es un enfoque de la
Ingeniería del Software en la cual los equipos están todo el tiempo produciendo
software de valor para el negocio en ciclos cortos y asegurando que el software
puede ser liberado de manera confiable en cualquier momento (Chen, 2015). Según
(Fowler, 2013), una organización ha implementado Entrega Continua cuando se
satisfacen las siguientes condiciones: “
sobre ellos.
30
Es posible ejecutar un despliegue de cualquier versión del software a
31
Mantener todo Bajo el Control de Versiones. Cualquier artefacto que se requiera
para construir, desplegar, probar y liberar una aplicación, debe mantenerse bajo
control de versiones, incluyendo: Scripts de prueba, casos automatizados de
prueba, scripts para configuraciones de red, scripts para configuración de
parámetros en servidores web, servidores de bases de datos y servidores de
aplicación, entre otros.
32
Mejora Continua. La primera vez que se despliega y se libera en producción una
aplicación es solo el inicio; con seguridad, la aplicación va a requerir de cambios
para su evolución y continua adaptación a las necesidades del negocio y la
corrección de errores será necesaria para su correcto funcionamiento. Luego, más
despliegues y liberaciones serán necesarios, por lo cual el proceso también debe
evolucionar para ser más eficiente y eficaz todo el proceso.
(Humble & Farley, 2011) definieron un patrón nombrado en inglés como Deployment
Pipeline y para el cual no es posible hallar una traducción precisa al español, pero
que llamaremos Ciclo Automático de Entrega de Software. Este es la
implementación automatizada de los procesos de construcción (Build), despliegue
33
(Build), Pruebas (Test) y Liberación en producción (Release) de una aplicación o
software. Este patrón tiene tres propósitos:
Hacer visible para todos los involucrados cada parte del proceso de
producción (Release).
completamente automatizado.
De acuerdo con (Humble & Farley, 2011), la entrega continua de software tiene su
sustento en tres prácticas claramente identificadas: Gestión de la Configuración,
Integración Continua, y Pruebas Continuas. A su vez (Forsgren, Humble, & Kim,
2018), consideran que las prácticas, tales como: Automatizar el proceso de
despliegue, Utilizar métodos de desarrollo “Trunk-Based”, Implementar gestión de
los datos de prueba e Incorporar pruebas de seguridad, también hacen parte de las
prácticas de entrega continua de software. Para (Kim, Patrick, Willis, & Humble,
2016), las prácticas de entrega continua incluyen también aquellas que son
prerrequisitos para implementar el Deployment Pipeline, entre las que se cuentan:
Creación automática y por demanda de ambientes idénticos a producción,
Reconstrucción de infraestructura en lugar de reparación, Implementación de
arquitecturas diseñadas para disminuir los riesgos de las liberaciones en
producción, entre otras.
34
En lo sucesivo, de este capítulo se describirán sólo algunas de las prácticas DevOps
de naturaleza técnica para lograr la entrega continua de software.
GESTION DE LA CONFIGURACIÓN
35
Conceptos y Definiciones
Documentación de arquitectura.
36
Importancia de Gestión de la Configuración.
Según (Humble, 2008), a partir de estos dos propósitos será entonces posible
obtener beneficios en las siguientes perspectivas:
Recuperación de Desastres.
Auditoria.
Calidad.
37
Lo anterior es compatible y complementado por (Humble & Farley, 2011), quienes
plantean que la gestión de la configuración permite: reproducir ambientes completos
a partir de sus componentes y configuración, incluyendo: sistemas operativos y sus
niveles actualización (parches), configuración de red, configuración de los
componentes de capa media de software y las aplicaciones o software desplegados
sobre el mismo. Asimismo, establecen que la gestión de la configuración da la
posibilidad de identificar cada cambio en los ambientes, dando cuenta sobre: qué
fue el cambio, quién lo hizo y cuándo fue realizado. También afirman que la gestión
de la configuración permite demostrar y asegurar la conformidad con los requisitos
de seguridad y cumplimiento establecidos por la propia organización o los
organismos externos encargados de su vigilancia.
Por otro lado, las investigaciones de (Forsgren, Humble, & Kim, 2018) revelan que
se puede predecir un alto desempeño de la organización de IT cuando se mantienen
bajo un sistema de control de versiones tanto el código como la configuración del
sistema, la configuración de las aplicaciones y los scripts que automatizan la
construcción (Builds) y configuración.
Por último y no menos importante, de acuerdo con (Humble & Farley, 2011), la
manera como se desarrolla el proceso de gestión de la configuración determina tres
aspectos importantes en la entrega de software, ellos son: la administración de
cambios en el proyecto, el registro de evolución de los sistemas y del software y la
forma como los equipos pueden desarrollar un modelo de trabajo colaborativo.
Control de Versiones.
38
los archivos o elementos constitutivos de un software o aplicación. Dicho
mecanismo permite el acceso a las diferentes personas del equipo responsable por
la entrega del software y mantiene registro detallado de los cambios que se estos
realizan a los archivos.
La experiencia práctica y las investigaciones tanto de (Humble & Farley, 2011) como
de (Kim, Patrick, Willis, & Humble, 2016) sugieren que los siguientes ítems se
incluyan bajo el control de versiones:
Código fuente
pruebas
Librerías
Compiladores
Sistemas Operativos
39
Software de capa media
Kubernetes)
Como particular, (Humble & Farley, 2011) sugieren no mantener bajo el control de
versiones los binarios que resultan de la compilación de la aplicación, primero por
el tamaño de los archivos, los cuales con frecuencia son muy grandes; segundo,
porque un proceso automático de construcción (Build) debe ser capaz de recrearlos
y de ese modo poder identificar sin equivocación una sola versión de la aplicación
y no entrar en confusión cuando hayan dos envíos (Commits) para la misma versión,
una para el código fuente y otra para los binarios.
40
Los estudios de (Forsgren, Humble, & Kim, 2018) encontraron que el desarrollo
basado en el tronco (Trunk-Based Developement) en lugar de usar ramas
(Branches) para las nuevas funcionalidades, tienen un impacto significativo
estadísticamente hablando, en el desempeño del equipo responsable de entregar
software. Según los autores, los equipos que mejores resultados obtuvieron fueron
aquellos que tenían menos de tres ramas activas (Active Branches) en cualquier
momento; para lograr esto, el tiempo de vida de las ramas (Branch Lifetime) es de
menos de un día, esto significa que el código de cada rama se integra al tronco una
o más veces al día.
altamente cambiantes.
41
Evitar el uso de ramas (Branching) para adicionar nuevas funcionalidades o
refactorizar código.
Esta división por componentes requiere, igualmente, de prácticas para lograr los
objetivos que se pretenden.
Una dependencia se define según (Humble & Farley, 2011), como la situación en la
cual una pieza de software requiere de otra pieza para poderse, bien sea, construir
o ser ejecutada. De acuerdo con los mismos autores, una taxonomía de alto nivel
nos habla de dos tipos de piezas de software, ellas son, Librerías y Componentes.
De acuerdo con la visión de (Humble & Farley, 2011), se deben mantener copias
locales de las librerías en algún repositorio, asegurando que el sistema de
construcción (Build) especifique la versión exacta de las librerías en uso. Ellos
también sugieren que las librerías se guarden teniendo en cuenta su momento de
uso, por lo cual el repositorio debería contener 3 niveles, marcados como: Build-
Time, Test-Time, Run-Time. Todo lo anterior supone también la utilización de una
convención de nombres para su identificación.
42
Practica 2 – Administrar Componentes
43
Necesidad de Herramientas para la Gestión de la Configuración
equipo.
integraciones continuas.
versionada.
sistemas mecánicos.
44
La demanda de soporte global y distribuido como las ofrecidas por Git y
el 30% de los desarrolladores. Mientras que otro 30% usa Subversion o las
IBM, Perforce y Serena Software, representan ahora alrededor del 40% del
total.
en la nube.
45
desarrollo. Sin embargo, la adopción de SCCM basada en la nube por parte
46
Equipo de Asignación y Staging Coordinación a través
seguimiento de items de Aprobación de múltiples
Desarrollo
trabajo variaciones
Informes
Flujos de trabajo.
Branching.
47
Control de acceso y Colaboración global.
Los equipos de desarrollo pueden rastrear y gestionar los cambios en una amplia
gama de activos de desarrollo digital, como archivos de origen, peticiones de
cambio, defectos, tareas, requisitos, historias de usuario y discusiones (Perforce,
2018).
Flujos de trabajo.
Todos los requisitos, las tareas y los archivos de origen pertinentes se llevan
directamente a los desarrolladores y los gestiona su IDE. El diseñador de flujos de
trabajo permite a los usuarios diseñar el mejor conjunto de procesos y normas para
la entrega de software (GitLab, 2018).
48
Branching.
INTEGRACIÓN CONTINUA
Conceptos y Definiciones
Integración Continua.
49
asegura que el código escrito por cada miembro del equipo de desarrollo es
compatible con el de sus pares.
Pruebas.
50
1) El ciclo inicia cuando se requiere modificar el código que actualmente
2) Para esto, el desarrollador a cargo hace una copia del código (esta copia se
existentes.
construcción es exitosa
local, el desarrollador toma nuevamente una copia del código del repositorio
51
cambios. Por el contrario, si los cambios que se hicieron en el paso 3 dan
realizar las modificaciones hasta lograr que los cambios que él ha hecho
6) Una vez se proponen los cambios (Commit / Check In) por parte del
fuente [este contiene los cambios propuestos (Commit / Check In)] del
52
Ilustración 3: Componentes del Sistema Automático de Integración Continua
Duvall, P. M., Matyas, S., & Andrew, G. (2007). Continuous Integration: Improving Software Quality and Reducing Risk
Un servidor de integración
53
Un script o conjunto de scripts para compilar, probar, inspeccionar y
desplegar el software
Para (Duvall, Matyas, & Andrew, 2007), encarna las tácticas que le permiten a los
desarrolladores hacer cambios en el código, sabiendo que si el software deja de
funcionar recibiremos retroalimentación inmediata sobre esta situación y en
consecuencia, será posible realizar los ajustes necesarios para regresarlo al estado
funcional. Así pues, estas prácticas contribuyen no solo a obtener software de
calidad, sino también a la velocidad y eficiencia de su entrega, pues los defectos
que hasta esta etapa se hayan podido introducir se encontrarán más rápido y con
menos esfuerzo por parte de los desarrolladores.
Los autores (Humble & Farley, 2011) afirman que la integración continua es el
proceso que permite mantener siempre una versión de software que funciona, pues
permite identificar y reparar con prontitud cualquier cambio que derive en
funcionamiento incorrecto del mismo.
54
Prácticas de Integración Continua
Para (Humble & Farley, 2011), la práctica más importante de integración continua
es enviar cambios con frecuencia al repositorio de control de versiones para iniciar
el ciclo de construcción automática y validar que no existen errores. Para lograr que
esta actividad se haga con alta periodicidad (Duvall, Matyas, & Andrew, 2007),
sugieren que los cambios se hagan de modo que solo se modifique un componente
o elemento a la vez, idealmente una vez se finalice una tarea que agrega, elimina o
actualiza el código.
Los desarrolladores, una vez finalizan sus modificaciones y ejecutan las pruebas
unitarias, deben tomar el código más actualizado del repositorio de control de
versiones y ejecutar la construcción automática para adicionar los cambios
realizados (Duvall, Matyas, & Andrew, 2007). El proceso anteriormente descrito es
comúnmente automatizado por parte de los servidores de integración (CI Server)
modernos que ofrecen la funcionalidad conocida con diferentes nombres, como:
envío previamente probado (Pretested Commit), construcción personal (Personal
Build), entre otros. Con esta característica, será el servidor de integración el que
tome los cambios que el desarrollador hizo localmente en su máquina y realice la
55
construcción automática, tomando el código más actualizado del repositorio de
control de versiones (Humble & Farley, 2011).
Hasta que las pruebas no demuestren que el código satisface completamente los
requisitos y los estándares, los desarrolladores no deben iniciar una próxima
modificación o adición de código, pues en caso de detectar errores, la prioridad para
el desarrollador debe ser la corrección de los defectos.
56
de herramientas de esta naturaleza el proceso puede resultar en errores y retrasos
en el despliegue de nuevas versiones de las aplicaciones.
57
Capacidad de autoservicio.
Control de acceso.
Alertas y notificaciones.
58
Agilidad y escalabilidad en el desarrollo
Capacidad de autoservicio
59
Los líderes de desarrollo desean herramientas que sean fáciles de usar y
administrar para respaldar el autoservicio de sus desarrolladores. Esta necesidad
de aprendizaje rápido y operación simple para soportar modelos de autoservicio de
los desarrolladores, ha resultado en el aumento de herramientas basadas en nube
tipo software, como servicios SaaS.
Controles de acceso
El código fuente que es desarrollado por cada uno de los usuarios del equipo de
desarrollo se integra de manera automática. Además, posibilita que todos los
desarrolladores colaboren sobre el mismo archivo compartido, sin incurrir en
conflictos de código, versionamiento o compilación de la aplicación. Se realiza la
compilación automática de fusiones de código de diferentes desarrolladores y en
60
paralelo, de manera que se garantice que estas sean ejecutadas con la mayor
velocidad (Forrester, 2017).
Alertas y notificaciones
61
PRUEBAS CONTINUAS
Conceptos y Definiciones
A lo largo de este documento, uno de los imperativos sobre los cuales se ha hecho
énfasis es la calidad del software entregado. Así pues, el proceso de entrega de
software debe ser capaz de construir y/o modificar software que satisfaga los
requisitos funcionales y No funcionales para el cual es creado. El reto de lograrlo
reside en la complejidad inherente al software, pues como se ha mencionado, las
aplicaciones ya no son entidades monolíticas, por el contrario, cada vez están más
desacopladas en componentes, la arquitectura está basada en Micro-Servicios e
interactúan con servicios externos u otras aplicaciones para su funcionamiento. Se
62
infiere entonces que para que el software opere correctamente los elementos del
cual está hecho deben hacerlo de la misma manera y se confirma con lo expresado
por (Duvall, Matyas, & Andrew, 2007), quienes afirman que para lograr software o
sistemas verdaderamente confiables debe asegurarse confiabilidad a nivel de
objetos, por lo cual es necesario realizar pruebas a cada elemento y esto debe
realizarse cada vez que se introduzcan cambios en ellos. Tanto por la complejidad
como por el número de pruebas, es necesario automatizar las pruebas unitarias y
de aceptación cada vez que se envíen cambios al repositorio de control de versiones
e incluso los desarrolladores deberían poder ejecutar pruebas automáticas en sus
propias estaciones para identificar defectos (Forsgren, Humble, & Kim, 2018).
Para lograr una identificación temprana, las pruebas no deben ser ejecutadas en
una fase posterior y/o por un equipo de aseguramiento de la calidad separado luego
de haber completado el desarrollo, por el contrario, esto debería realizarse por los
mismos desarrolladores (Kim, Patrick, Willis, & Humble, 2016).
Las pruebas son el mecanismo a través del cual se obtiene retroalimentación del
impacto positivo o negativo que ha tenido un cambio sobre el estado operacional o
funcionamiento del software o uno de sus elementos.
Una taxonomía de alto nivel permite agrupar las pruebas, en: Pruebas Unitarias,
Pruebas de Aceptación, Pruebas de Integración. A continuación, una definición de
cada una de ellas.
con otros elementos del software (Kim, Patrick, Willis, & Humble, 2016).
comprobar a alto nivel que una funcionalidad opera de acuerdo con los
63
requisitos funcionales especificados por los usuarios (Humble & Farley,
2011).
Pruebas de Exploración.
64
Patrick, Willis, & Humble, 2016), este es: “Entre más código se escriba, más tiempo
y dinero se requiere para probar el software, lo cual para la gran mayoría de las
compañías es un esquema inaceptable para el propio modelo de negocio”. Así pues,
nuevamente la automatización de pruebas en el largo plazo representa ahorros en
la creación, mantenimiento y evolución del software.
Las pruebas unitarias son fáciles y de bajo costo, pues lo que se prueba no tiene
dependencias externas ni exige el despliegue e instalación. Como se mencionó
antes, en la medida en que se valide el correcto funcionamiento de más elementos
o componentes del software, este será más confiable. La forma de hacerlo es
probando cada componente.
Una alta cobertura de pruebas unitarias aún en entornos con prácticas de desarrollo
orientados a las pruebas (Test-Driven Developement TDD) no reemplazan las
pruebas de aceptación, pues el objetivo de estas últimas es validar que la aplicación
65
hace lo que el cliente requiere, mientras que las pruebas unitarias evalúan que el
software hace lo que desarrollador desea que sea haga. Son en esencia dos tipos
de prueba con propósitos distintos.
66
conoce como Automatización de pruebas de API. El escaneo de UI y APIs posibilita
la construcción de un repositorio de prueba con artefactos reutilizables que se
versionan de manera automática (Gartner, 2018).
Las organizaciones adoptan prácticas ágiles y DevOps que sólo son posibles con la
incorporación de alternativas que introduzcan la automatización de los respectivos
procesos.
67
Pruebas multi-plataforma.
Casos de prueba.
Capacidades de integración.
Reportes Automatizados.
Pruebas multi-plataforma
68
Automatización de pruebas se puede realizar en una amplia variedad de
tecnologías, incluidas las de escritorio, web, móvil y mainframe. Es esencial que las
herramientas garanticen la habilidad de orquestar y ejecutar pruebas en plataformas
Windows nativas de escritorio (no web), aplicaciones web adaptadas para móvil,
móviles nativas, servicios web y aplicaciones empaquetadas.
Las pruebas se pueden ejecutar en entornos de nube, como Amazon Web Services
(AWS) y Microsoft Azure, o en máquinas virtuales locales.
69
usuarios, sean probados. Es esencial validar que ante cada modificación del código
subyacente, los componentes visibles, estén y se comporten según lo esperado.
Típicamente utiliza un motor de reconocimiento óptico de caracteres (Optical
Character Recognition - OCR) basado en el reconocimiento de objetos, que
posibilita diseñar pruebas sobre interfaz gráfica y reutilizarlas para cualquier otra
aplicación con una interfaz gráfica de usuario (Graphic User Interface - GUI).
Casos de prueba
Los casos de prueba se pueden crear con modelos visuales, basado en riesgos o
al realizar grabaciones de escenarios en tiempo real. Scripts de prueba pueden
generarse a través de código y archivos de configuración. Soporta casos de uso
como diferentes navegadores, regresión, paralelo, ágil, regresión completa, entre
otros.
Reportes Automatizados
70
para identificar de manera oportuna los errores y las respectivas acciones que se
deben ejecutar.
Conceptos y Definiciones
Despliegue (Deployment)
71
Hacer disponible una o más funcionalidades bien sea a todos los usuarios o un
grupo de ellos (Kim, Patrick, Willis, & Humble, 2016). Se puede inferir que una
liberación en producción (Release) requiere de un despliegue (Deployment) en este
ambiente.
72
Prácticas para el Despliegue y la Liberación en Producción
Para lograr despliegues con alta frecuencia, (Kim, Patrick, Willis, & Humble, 2016),
sugieren que las siguientes actividades estén automatizadas:
configuraciones requeridas.
73
Crear Arquitecturas y Utilizar Técnicas para el Despliegues Seguros
74
modelo tiene tres intenciones: a) detectar defectos funcionales en el software con
datos y transacciones de producción; b) permitir la experimentación y tener grupos
de control para validar la aceptación, adopción y satisfacción de los clientes con los
cambios. Esto también se conoce como pruebas A/B; c) ejecutar pruebas de
capacidad y desempeño con datos y transacciones reales. En este tipo de
despliegue se dispone de varios ambientes de producción (La mayoría de los
profesionales que emplean la práctica recomiendan máximo dos) recibiendo y
dando respuesta a transacciones de la siguiente manera: a) Un conjunto limitado y
seleccionado usuarios es direccionado al ambiente que contiene la nueva versión
con los cambios en la aplicación para que generen solicitudes con datos y
transacciones y así realizar las validaciones requeridas; b) el resto de los usuarios
son dirigidos al ambiente que ejecuta la versión anterior del software. Como ambos
ambientes son productivos todos los usuarios reciben respuesta a sus solicitudes.
Nuevamente, en caso de encontrarse errores en el ambiente con la nueva versión,
todo el tráfico puede ser enviado al ambiente que posee la versión anterior y
completamente funcional.
75
sin cambiar el código de la aplicación. Serán entonces los valores del archivo de
configuración los que definan si la aplicación exhibe o no la nueva funcionalidad a
los usuarios (Fowler, 2010). Debido a que los interruptores de funcionalidad
introducen complejidad, es necesario utilizar prácticas y herramientas para
administrar la configuración de estos interruptores, asimismo, debe limitarse el
número de interruptores en el software (Hodgson, 2017). Como esta
implementación se realiza en capa de software utilizando archivos de configuración,
es posible también controlar los usuarios o segmentos de estos a los cuales se les
presentará una o más funcionalidades (Kim, Patrick, Willis, & Humble, 2016).
76
Necesidad de Herramientas para el Despliegue y Liberación
Automatización de Despliegues
77
Estas tecnologías permiten crear, utilizar, mantener y versionar las
automatizaciones utilizando las mismas prácticas y principios empleadas para la
creación de código fuente, posibilitando tener también las automatizaciones bajo el
control de versiones.
Las herramientas pueden crear, usar, mantener y versionar los diferentes ambientes
que generalmente están compuestos por elementos tanto de infraestructura como
de aplicación.
Estas tecnologías cuentan con un motor de flujos de trabajo para definir la secuencia
en la cual deben llevarse a cabo las acciones o tareas de automatización durante el
proceso de liberación en producción.
78
Se integran perfectamente con herramientas de seguimiento de defectos,
repositorios de código fuente, herramientas de construcción (Build) e integración
continua, software para la gestión de incidentes, cambios y configuración,
administradores de cloud y contenedores, entre otros.
Conceptos y Definiciones
79
Ilustración 4: Explicación Ciclo Automático de Entrega de Software
Humble, J., & Farley, D. (2011). CONTINUOUS DELIVERY Reliable Software Releases Through Build, Test, and
Deployment Automation
Las etapas típicas del ciclo de automático de entrega de software, según (Humble
& Farley, 2011), son las siguientes y se representan en la Ilustración 5: Etapas
Típicas Ciclo Automático de Entrega de Software:
80
Etapa de pruebas de aceptación automáticas. Se valida que el software
usuario de la aplicación.
81
Ilustración 5: Etapas Típicas Ciclo Automático de Entrega de Software
Humble, J., & Farley, D. (2011). CONTINUOUS DELIVERY Reliable Software Releases Through Build, Test, and
Deployment Automation
82
automatizadas para que se completen lo más rápido posible y que los equipos
puedan acceder, idealmente en paralelo, a los recursos (ambientes, artefactos,
entre otros) en cualquier momento para poder llevar a cabo sus tareas.
83
Realizar pruebas en ambientes de pre-producción
84
DISEÑO METODOLÓGICO
Las etapas que se surtieron para completar esta investigación fueron las siguientes:
Con orientación del asesor se establece con precisión el problema que se quiere
resolver, este es: Las organizaciones deben transformar los procesos de Ingeniería
de Software para construir aplicaciones y/o modificar las existentes con mayor
velocidad, calidad y eficiencia.
Se hizo la definición de los objetivos que debía perseguir esta investigación para
que fuera de utilidad a las empresas de la ciudad de Medellín que enfrentan el
problema declarado en la etapa anterior.
Objetivo Especifico 1
85
• ¿Qué es el movimiento DevOps?
Objetivo Especifico 2
movimiento DevOps?
86
Objetivo Especifico 3
implementación de la práctica.
87
académicos. Esta investigación documental proporciona una visión sobre el estado
del tema o problema elegido en la actualidad.
Entendiendo que: las prácticas DevOps no sólo son aquellas de naturaleza técnica,
que las categorías y número de prácticas DevOps son numerosas y que existe
interdependencia entre las categorías y sus prácticas, es importante plantear
trabajos futuros para entender la correlación entre las diferentes prácticas y su
impacto en la entrega de software con criterios de velocidad, calidad y eficiencia.
88
Ilustración 6: Etapas de la Metodología
Identificación del
problema
Identificación de
Formulación del
Futuras
Problema
Investigaciones
Definición de las
Desarrollo del
Preguntas de
Trabajo
Investigación
Marco Teórico y
Revisión
Documentación del
Bibliográfica
Estado del Arte
Creación Propia
89
PROPUESTA PARA LA ADOPCIÓN DE PRACTICAS DEVOPS PARA
ENTREGA CONTINUA DE SOFTWARE
durante la investigación.
áreas de TI
No pretende ser exhaustivo en las actividades o tareas de cada práctica pues existe
literatura suficiente en la cual se aborda con detalle, y algunas de ellas se han
descrito en el marco teórico de esta investigación. Vale la pena resaltar que esta
propuesta solo toma en consideración las prácticas técnicas de DevOps, es decir
aquellas orientadas a la entrega continua de software. Quedan por fuera entonces
practicas relacionada con arquitectura, gestión de procesos y productos de
software, gestión lean y monitorización, y cultura. Futuros trabajos podrían abordar
estos aspectos y enriquecer esta primera propuesta.
90
Ilustración 7: Etapas Modelo Propuesto para Adopción de Practicas DevOps
1. Crear un equipo
dedicado para la
transformación 2. Seleccionar una
11. Mejorar el ciclo
aplicación para
automatico de
implementar las
entrega de software
prácticas
7. Automatizar 6. Automatizar
construcción (build) creación de
y despliegue infraestructura para
(deployment) ambientes
Creación Propia
Las investigaciones de (Govindarajan & Trimble, 2010) afirman que para lograr
transformaciones y lograr innovación disruptiva en las organizaciones es necesario
crear equipos dedicados para tal fin. Según los autores estos deben operar de
manera separada del resto de los equipos responsables de la operación diaria. A
este equipo debe asignarse un conjunto de objetivos específicos, medibles,
alcanzables, relevantes y enmarcados en el tiempo, ejemplo: reducir el ciclo de
entrega desde envío de los cambios hasta su despliegue en producción en un 50%
en seis meses. (Kim, Patrick, Willis, & Humble, 2016), sugieren que adicionalmente
se propenda porque el equipo este físicamente ubicado de forma separada de los
otros equipos, pero sus integrantes ubicados en el mismo lugar.
91
SELECCIONAR UNA APLICACIÓN PARA IMPLEMENTAR LAS PRÁCTICAS.
Para lograr implementar estas prácticas a gran escala dentro de las compañías se
requiere tanto de grandes esfuerzos de toda índole incluyendo un cambio de cultura.
Para vencer el escepticismo y racionalizar los las inversiones en personas y
tecnologías, resulta conveniente iniciar por una aplicación en lugar de plantear un
proyecto de transformación completo y ambicioso que incluya todas o muchas de
las aplicaciones y servicios de una compañía.
El software elegido puede ser de cualquier área de negocio pero se debe asegurar
que:
realizar transformaciones.
Haya visibilidad para que las personas confíen y luego se puedan extrapolar
92
Cloud Plattform para implementar prácticas de gestión de la configuración,
integración continua, pruebas continuas, despliegue continuo.
93
“Es posible llevar a cabo la mayoría de las pruebas sin requerir un ambiente de
integración y es posible realizar el despliegue (Deploy) y liberación en producción
(Release) sin depender de otras aplicaciones o servicios”. Lo anterior resulta clave
pues los análisis realizados por (Puppet Labs & DevOps Research and Assessment,
2017) revelan que el aspecto que más contribuye a la entrega continua de software
incluso, por encima de la automatización de pruebas y despliegue, es la arquitectura
de las aplicaciones.
94
Ilustración 8: Patrón Asfixiamiento de la Aplicación (Strangler Pattern)
http://mycloudcomputing2017.blogspot.com/2017/02/what-is-strangler-application-pattern.html
Un análisis de flujo de valor (Value Stream Map) es una técnica que permite
identificar y analizar los diferentes procesos, actividades y/o tareas necesarias para
completar algo, ese algo puede ser; un pedido de un cliente en un restaurante,
manufacturar un vehículo en una fábrica, desembolsar un crédito solicitado por un
cliente en un banco, y en nuestro caso convertir una idea en software liberado en
producción para su uso. Este tipo de análisis se realiza para identificar:
El tiempo total que transcurre desde que inicia el proceso hasta que se ha
esto se denomina como: Tiempo Total del Ciclo de Proceso (Lead Time –
Elapsed Time)
95
Identificar el tiempo que se emplea en actividades que contribuyen
Actitivies).
Identificar los tiempos de espera y las actividades que se realizan pero que
(Non-Value-Adding Activities)
96
Actividades o tareas dentro de los procesos actuales de construcción (Build),
entre otros.
97
para asegurar que la información recolectada y el modelo de flujo de valor creado
es completo y confiable. Esto podría incluir la participación de personas a cargo de
otras aplicaciones, servicios o interfaces con las cuales interactúa la aplicación
objeto de este análisis.
Una de las actividades que más contribuye a incrementar los tiempos del ciclo de
entrega de software es el aprovisionamiento y configuración de la infraestructura
requerida en cada uno de los ambientes. También, se encuentra con frecuencia que
98
errores en el funcionamiento de las aplicaciones son resultado de las diferencias de
configuración de la infraestructura en los distintos ambientes. En lugar de
simplemente especificar en un documento los requisitos de infraestructura de los
ambientes, es necesario disponer de capacidades para la creación automática de
estos y asegurar de este modo su correcta configuración (Kim, Patrick, Willis, &
Humble, 2016). Se recomienda el uso de herramientas de gestión de la
configuración como Puppet, Chef, Ansible, para crear capas de abstracción que
permitan administrar la infraestructura como un código y acelerar el proceso de
entrega de estos recursos a los equipos que lo requieren.
99
AUTOMATIZAR PRUEBAS UNITARIAS Y ANALISIS DE CÓDIGO
En caso que las pruebas unitarias automáticas tomen demasiado tiempo (5 Minutos
o más) es conveniente separar las pruebas para que estás se ejecuten en paralelo,
bien sea utilizando tecnologías de servidor de integración continua que tengan estás
características o utilizando varias instancias para hacer el trabajo de modo separado
(Humble & Farley, 2011)
100
De acuerdo con la filosofía LEAN, las optimizaciones globales del proceso en lugar
de las locales y focalizadas en actividades o tareas, son las que tienen efecto en el
mejoramiento de un proceso. Luego, es importante definir métricas que evalúen el
proceso de principio a fin. Para (Humble & Farley, 2011) la métrica global más
importante es Tiempo de Ejecución (Cycle Time) pues esta no solo permite controlar
y mejorar la velocidad sino también la calidad pues el objetivo de reducir el tiempo
de ejecución llevará al equipo a implementar automatización de las pruebas y luego
esto derivará en mayor cobertura de las mismas en la medida que se va liberando
tiempo de ejecución manual de esta actividad. Esta métrica definida en términos
prácticos en es la respuesta a la pregunta: ¿Cuánto tiempo le toma a la organización
liberar en producción, de forma segura, un cambio que solo implica crear o modificar
una sola línea de código? (Poppendieck & Poppendieck, 2003).
(Forsgren, Humble, & Kim, 2018), coinciden respecto a las métricas con (Humble &
Farley, 2011) , los primeros también proponen que las métricas deben ser globales
y adicionan que deben ser coherentes y no contradictorias entre los equipos de
desarrollo (Dev) y operaciones (Ops). También afirman que las métricas deben
evaluar resultados y no cantidad de artefactos que se producen. Sus conclusiones,
las cuales recomiendo, establecen que las métricas que satisfacen los criterios
descritos y que permiten valorar adecuadamente el desempeño del equipo de
entrega de software son las siguientes:
funcionamiento correcto.
101
Frecuencia de despliegue y liberación en producción (Deployment and
102
Tabla 2: Resultados Desempeño de Entrega de Software 2018
DevOps Research and Assessment - DORA. (2018). 2018 Accelerate: State of DevOps, Strategies for a New Economy
DevOps Research and Assessment - DORA. (2018). 2018 Accelerate: State of DevOps, Strategies for a New Economy
103
MEJORAR EL CICLO AUTOMATICO DE ENTREGA DE SOFTWARE
Aun con tareas automatizadas en cada etapa del ciclo se presentan cuellos
de cada porción del flujo para encontrar la causa raíz de ciclos de ejecución
104
escribir el código de las mismas, implementar tecnologías más eficaces y
105
CONCLUSIONES
El movimiento DevOps no solo integra principios y prácticas del movimiento ágil sino
que las complementa con prácticas de otros movimientos, principalmente los de los
movimientos Lean y entrega continua. Con esta convergencia y perfeccionamiento,
se logran prácticas de Ingeniería de Software con una visión integral y holística
capaz de obtener optimizaciones globales del proceso de creación y evolución del
software, desde su concepción hasta su mejoramiento. DevOps es mucho más que
106
prácticas de entrega continua de software y se ocupa de otros aspectos que son
claves para lograr un modelo de trabajo más efectivo. Por ejemplo: la cultura para
promover la colaboración entre los equipos Dev y Ops, la mentalidad Lean para
buscar constantemente el mejoramiento continuo a través de la automatización, las
arquitecturas flexibles y evolutivas para habilitar opciones de trabajo independiente
y en paralelo.
107
trabajar en paralelo y así aumentar no solo la productividad sino también la
velocidad en la creación de nuevo código para nuevas funcionalidades, reparar
defectos o pagar deuda técnica. Como tal, la integración continua es una práctica y
no meramente un servidor especializado para este propósito, por eso es clave un
cambio de cultura y seguimiento frecuente para lograr que los desarrolladores al
menos una vez al día envíen sus cambios en el código y tener la menor cantidad de
ramas (Branches) abiertas y con trabajo en progreso para evitar conflictos de
integración que resultarán en reprocesos que impactan la velocidad y la
productividad de los equipos.
Considerando que las compañías están todos los días más presionadas para crear
software y evolucionar el existente, y que las pruebas son vitales para asegurar la
calidad del software y en consecuencia de la experiencia digital de los clientes que
lo usan; es indispensable automatizar todos los tipos de prueba (unitarias,
funcionales, no funcionales, seguridad, entre otras). Las pruebas son un proceso
que está compuesto por actividades individuales que toman mucho tiempo, sin
automatización la organización tendrá que ir en detrimento o de la calidad o del
costo para poder producir el software requerido en la transformación digital, opción
que no es viable en la era de la economía digital. De ahí que las empresas deben
entender que aquí deberán invertir gran parte de sus recursos en los proyectos de
transformación de sus procesos de ingeniería del software para cambiar el circulo:
más software, más pruebas, mas costo, por el circulo: más software, más pruebas,
mismo o menor costo, más velocidad, mas cobertura.
108
Conclusión sobre la Automatización del Despliegue y Liberación
109
Sin dejar completamente de lado otros aspectos como los culturales, los procesos
una compañía puede iniciar la metamorfosis de sus proceso de ingeniería del
software embarcándose en un proyecto que comprenda solo una aplicación, la cual
debe ser seleccionada cuidadosamente para asegurar que se satisfagan ciertos
criterios como la posibilidad de experimentación y aprendizaje. Para esto es
indispensable crear un equipo dedicado a la transformación y con foco exclusivo en
esta.
Las tareas a automatizar dentro del ciclo [Construcción (Build), Pruebas (Test),
despliegue (Deployment) y liberación en producción (Release)] deben ser aquellas
que después de realizar el análisis de flujo de valor se hayan clasificado como
actividades que agregan valor (Value-Adding Actitivies) o que eliminan tiempos de
espera prolongados dentro del ciclo.
110
Frecuencia de despliegue y liberación en producción (Deployment and
Release Frecuency).
MTTR).
111
REFERENCIAS
Ambler, S., & Lines, M. (2012). DISCIPLINED AGILE DELIVERY. Boston, MA: IBM
Press.
Bass, L., Weber, I., & Liming, Z. (2015). DEVOPS A Software Architect's
Perspective. Westford, Massachusetts: Pearson Education Inc.
Chen, L. (2015). Continuous Delivery Huge Benefits, But Challenges Too. THE
IEEE COMPUTER SOCIETY.
CMMI Product Team. (2010). CMMI for Development, Version 1.3. Pittsburgh, PA:
Software Engineering Institute.
Duvall, P. M., Matyas, S., & Andrew, G. (2007). Continuous Integration: Improving
Software Quality and Reducing Risk. Pearson Education, Inc.: Boston, MA.
112
Forrester. (2017). The Forrester Wave™: Continuous Integration Tools, Q3 2017.
Cambridge, MA: Forrester Research, Inc.
Forsgren, N., Humble, J., & Kim, G. (2018). Accelerate: The Science of Lean
Software and DevOps: Building and Scaling High Performing Technology
Organizations. Portland, Oregon: IT Revolution.
Gartner. (2018). Magic Quadrant for Software Test Automation. Stamford, CT:
Gartner.
113
GitLab. (2018). www.gitlab.com. Obtenido de
https://about.gitlab.com/product/source-code-management/
Govindarajan, V., & Trimble, C. (2010). The Other Side of Innovation: Solving the
Execution Challenge. Boston, Massachusetts: Harvard Business School
Publishing.
Kim, G., Patrick, D., Willis, J., & Humble, J. (2016). The DevOps Handbook: How
to Create World-Class Agility, Reliability, and Security in Technology
Organizations. Portland, OR: IT Revolution Press.
114
Puppet Labs & DevOps Research and Assessment. (2017). 2017 State of DevOps
Report. Puppet + DORA.
Puppet Labs. (2014). 2014 State of DevOps Report. Portland, Oregón: Puppet
Labs - IT Revolution Press - ToughtWorks.
Puppet Labs. (2015). 2015 State of DevOps Report. Portland, Oregón: Puppet
Labs.
Raskino, M., & Waller, G. (2015). DIGITAL TO THE CORE. New York, NY:
Bibliomotion Inc.
Stroud, R., Oehrlich, E., LeClair, A., Kinch, A., & Kinck, D. (2017). A Dangerous
Disconnect: Executives Overstimate DevOps Maturity. Cambridge, MA:
Forrester.
VersionONE Inc. (2016). The 10th Annual State of Agile Report. Alpharetta, GA:
VersionOne Inc.
115