Devops Adoption

Logrando el máximo nivel de eficiencia en el desarrollo de software.

Una de las preocupaciones generales de una empresa es saber si sus procesos son óptimos y eficientes en cada frente del negocio. Estas incógnitas son generadas por un mercado cambiante, competitivo, variable, exigente y globalizado donde sólo los negocios que mejor se adaptan al cambio, prevalecen. En este contexto la tecnología se convierte en un habilitador que permite llevar a cabo esta adaptación, sin embargo la complejidad que envuelve el desarrollo de proyectos tecnológicos hace que en ocasiones las organizaciones no alcancen la velocidad requerida para sobrevivir en el mercado. Uno de los problemas más comunes viene del mundo del software donde la administración de aplicaciones es un dolor de cabeza para las diferentes áreas involucradas, causando un continuo descontento y pérdida de oportunidad en el mercado. Este artículo explica cómo desde la integración continua y el despliegue continuo se puede ayudar a las organizaciones a tener un proceso de desarrollo software más eficiente y oportuno.

Alcance

Este artículo muestra lo que se puede lograr adoptando herramientas que automatizan el proceso de desarrollo y entrega de soluciones, sin embargo no profundiza en el detalle técnico de cada una de ellas.

Delivery Pipeline

El Delivery Pipeline es el proceso automatizado para llevar software de calidad a los usuarios en ambientes productivos, incluye todas las tareas que se realizan desde el momento en el que el código llega al repositorio de versiones, hasta que se despliega en los diferentes servidores, asegurando la calidad en cada uno de los ambientes que se dispongan. Tener todo este ciclo es un verdadero reto, ya que aparte de la adopción de nuevas herramientas, se deben implementar cambios culturales centrados en las personas, donde predomine la colaboración, la mejora continua y la excelencia en la adopción de las mejores prácticas.

Proceso de desarrollo y entrega de software

A continuación mostramos un proceso típico por el que pasa el código fuente, desde el momento en el que el desarrollador sube el código al repositorio, pasando por actividades que verifican la calidad hasta realizar despliegues en ambiente productivos, momento en el cuál los usuarios tienen acceso a un producto de calidad. Normalmente estas actividades son operativas, repetitivas y son realizadas de manera manual lo cual las hace propensas a errores humanos y reducen la productividad.

A continuación a vamos a describir de manera muy general cada una de las etapas y mencionaremos algunas herramientas útiles para implementarlas.

Integración del Software

Esta etapa tiene como propósito integrar de manera automática y continua los cambios realizados por los desarrolladores. Con esto se logra detectar de manera temprana problemas de calidad y se reducen dramáticamente los tiempos de integración. Para lograr esto debemos implementar procesos que descarguen los cambios del repositorio de control de versiones cada vez que los desarrolladores hacen modificaciones para verificar la calidad del código, ejecutar pruebas y construir los binarios que serán los paquetes o entregables que pasarán a las siguientes fases. Todo esto de manera automática a través de herramientas como: JUnit, Jenkins, Gradle, Maven, Visual Studio team Services, Git, Bitcbucket, entre otras.

La etapa de integración del software incluye las siguientes tareas:

  • Compilar: Se encarga de compilar el código fuente y generar el desplegable.
  • Pruebas Unitarias: Son pruebas automatizadas que verifican el comportamiento esperado de los fragmentos de códigos desde el punto de vista funcional
  • Analizar Código: Analiza el código construido para verificar las adherencia a buenas prácticas de desarrollo.
  • Aprovisionar ambiente: Crea y configura la infraestructura mínima necesaria para desplegar la aplicación.
  • Desplegar Software: Automaticamente despliega el componente generado en la actividad “Compilar” sobre la infraestructura creada recientemente.
  • Pruebas de humo: Verifica el funcionamiento básico de la aplicación garantizando que haya quedado desplegada correctamente.
  • Destruir ambiente: Una vez se ha logrado el objetivo de la etapa, se destruye completamente el ambiente creado para hacer costo eficiente l uso de los recursos de infraestructura.

Pruebas Funcionales

En esta etapa se garantiza la estabilidad del sistema desde el punto de vista funcional a través de la ejecución de pruebas end to end automatizadas que simulan las acciones de los usuarios en las pantallas a través de bots y verifican que la respuesta del sistema sea la correcta. En este punto se puede utilizar herramientas como: Seleniun o Cucumber.

Adicional a las tareas que ya describimos en la etapa anterior, en esta etapa realizamos :

  • Pruebas End to End: Las pruebas end to end ejecutan de manera automática escenarios de prueba que ejercitan todos los componentes técnicos que hacen parte del sistema verificando que la respuesta producto de la interacción entre ellos sea la correcta. Todo esto se hace desde la perspectiva del usuario final.
  • Versionamiento del Artefacto: Una vez la versión del software pasa correctamente las pruebas end to end, se almacenan y gestionan las versiones del software garantizando la trazabilidad entre el código fuente, las pruebas, los artefactos de base de datos y la infraestructura requerida por la aplicación.

Pruebas de desempeño

En esta etapa se mide la capacidad de procesamiento del sistema para el volumen de operación que se tenga previsto garantizando su estabilidad en condiciones específicas que lleven el sistema al límite. En este punto se pueden utilizar herramientas como JMeter, Blazemeter o Countiperf.

Adicional a las tareas que ya describimos, en esta etapa aprovisionamos el ambiente de pruebas de desempeño. Este ambiente debe ser similar al ambiente producción y para las pruebas que lo requieran debe tener una capacidad de procesamiento mayor para medir el comportamiento del sistema ante escenarios de crecimiento. En este punto se aprovisiona automáticamente la infraestructura que se requiere para ejecutar las pruebas y luego destruirla.

Pruebas de seguridad

En esta etapa se valida la confiabilidad de la aplicación, alertando sobre vulnerabilidades detectadas y accionables para cubrirlas. En este punto se pueden utilizar herramientas como OWASP o Arachni y se realizan las siguientes actividades:

  • Análisis estático de seguridad: Revisión del código fuente para identificar vulnerabilidades.
  • Análisis dinámico de seguridad: Revisión de la aplicación con pruebas e intrusiones desde exterior en un ambiente desplegado.

Pruebas de aceptación

En esta etapa el usuario puede verificar manualmente que el sistema cumpla con sus expectativas para determinar si aprueba o no su despliegue en producción. Incluye las siguientes actividades.

  • Pruebas de usuario: Pruebas exploratorias del sistema por parte de los usuarios o testers.
  • Aprobación manual: En este punto el usuario decide si aprueba o no la versión para ser desplegada en producción.
  • Versionamiento del Artefacto verificado por los usuarios: Se almacenan y gestionan las versiones del software que ya fueron verificadas y aceptadas por los usuarios.

Despliegue a producción

Entrega el sistema a los usuarios en ambiente productivo. Se pueden usar las siguientes herramientas: Ansible, Terraform, Cheff, Puppet, Jenkins, Vosual Studio team Services, etc e Incluye:

  • Aprovisionar ambiente productivo:Infraestructura de la aplicación con todos los componentes, recursos y dependencias configuradas, para soportar las cantidad de usuarios y procesos que demanda en producción.
  • Pruebas de humo: Verificación de funcionamiento correcto de los servicios que dependan de la aplicación y correcto comportamiento de la aplicación desplegada.
  • Devolver a versión estable: En caso de fallo regresar de manera automática a la última versión estable.
  • Ejecutar actualizaciones de seguridad automáticamente: Llevar a cabo actualizaciones de seguridad de manera periódica en los servidores productivos

Como lo mencionamos al inicio, DevOps va más allá de las herramientas, implica una transformación cultural y un cambio en la forma de pensar de las personas. Implica también cambios en los procesos y en la forma de medir a los equipos y personas.

Cómo puedo medir que tan maduro está mi proceso de delivery

Existen herramientas gratuitas como Quind que generan indicadores para gerentes y personas no técnicas a través de gráficos simples y fáciles de leer que permiten de manera rápida conocer la madurez del delivery pipeline y del software construido en su organización.

El gráfico anterior permite conocer el % de los procesos de desarrollo y entrega de soluciones se encuentran automatizados de manera simple y rápida.

También puede conocer las madurez del proceso por cada una de sus etapas.

Y establecer qué actividades aún no se encuentran automatizada y aquellas que si lo están para incrementar la eficiencia del proceso.

Te invitamos transformar la forma como haces software en tu organización, usa Quind de manera gratuita y haz planes de mejora enfocados en la mejora real de tus equipos.