Metodología DevOps o la disciplina del ‘automatiza o muere”

 En Ciberseguridad

La metodología DevOps que tan en boga está últimamente, adquiere cada vez más y más peso en todos los equipos de desarrollo software modernos. Esto ocurre (en parte)  por una necesidad de diluir la eterna segmentación de ‘Desarrollo vs Sistemas’.

¿Quién no se ha enfrentado al típico despliegue en producción en el que todo parece funcionar correctamente en desarrollo y al hacer el pase a Producción se desencadena la debacle?

Equipos de trabajo echándose la culpa los unos a los otros, jornadas infinitas, modificación de la dieta de los desarrolladores que pasarán a alimentarse durante semanas de pizza y Coca Cola, en fin, un desastre…

Todo esto ha originado que surja una nueva disciplina de súper-desarrolladores, en las que confluyen amplios conocimientos de desarrollo, con una base sólida de conocimiento  de Sistemas. Estos conocimientos les permiten, por ejemplo, liberarse de la tediosa labor, y a veces arriesgada, de los despliegues en producción, pudiéndose centrar de verdad en su labor primaria, desarrollar código.

Estos procesos automatizados se hacen con la idea de incrementar la calidad del software, al seguir procedimientos preestablecidos y regulados, todo ello con un objetivo: realizar una entrega de software lo más temprana posible al cliente y aportándole a la vez el mayor valor posible con esa entrega (famoso primer principio del Manifiesto Ágil).

La base de toda esta revolución está en la automatización de tareas, las cual podríamos dividir en 3 áreas principales:

 

Automatización de pruebas

Esta automatización debe abarcar todos los niveles, desde el más bajo como son las pruebas unitarias hasta el más alto, pruebas funcionales.

Para la automatización de estas tareas de pruebas unitarias, donde testearemos cada componente, clase, método o propiedad desarrollado, podremos apoyarnos en herramientas como JUnit , Mockito o Cactus.

El siguiente paso es la automatización de las pruebas de integración,  donde verificamos que las módulos individuales se integran con otros para constituir componentes más complejos, verificando a su vez la interface de interacción en ellos. En nuestra ayuda acuden herramientas como SoapUI, para realizar por ejemplo API Testing REST y SOAP.

Si vamos un paso más allá son cruciales las pruebas de regresión, en las que verificamos que el código ya existente no se vea afectado por los cambios de último desarrollo implementado. Para la automatización de este proceso tendremos que apoyarnos en las herramientas anteriormente citadas de pruebas unitarias y de integración.

En el caso de las pruebas funcionales será necesario verificar que los requisitos pactados con el cliente son cumplidos por el desarrollo realizado. Son las más complicadas de automatizar, dado que la prueba de una simple funcionalidad afecta a muchos módulos del desarrollo, que pueden a su vez estar integrados con otros. Para ayudarnos en esta ardua labor podemos hacer uso de la herramienta Cucumber, basada en BDD (Behaviour-Drive Development,  evolución de TDD) que hace uso para la definición de la pruebas de un  lenguaje ‘comprensible’ por humanos y ordenadores, denominado Gherkin, con el que vamos describiendo las funcionalidades y definiendo como ha de ser el comportamiento del software.

Mención aparte merece la automatización de pruebas de rendimiento, en las que mediremos el comportamiento de nuestra aplicación al ser sometida a pruebas de carga y estrés, podemos hacer uso de herramientas provistas por JMeter, Gatling o Funkload

 

Automatización de construcción

 Debemos automatizar el proceso que construye cada nueva versión de nuestro desarrollo, integrando en este flujo de trabajo todo el proceso de ejecución de nuestra batería de pruebas previamente definida, para de ese modo tener un control exhaustivo de los errores detectados y la remediación de los mismos antes de cualquier tipo de despliegue. Para automatizar estas labores llegan en nuestra ayuda herramientas como Ant o Nant para .NET, Maven.

 

 Automatización de despliegues

Por último, llegamos a la automatización principal para la que hemos montado todo este “muñeco”, el despliegue de nuestra aplicación de forma desatendida teniendo las garantía de que “no rompemos nada” en el intento.

Para automatizar estas labores podemos apoyarnos en herramientas de integración continua tan conocidas como Jenkins o Bamboo permitiendo ésta última, junto con otro software de la misma empresa (Bitbucket + Jira) toda la gestión desde que se genera una nueva petición por parte del cliente hasta su despliegue en producción.

Tras este breve repaso a las posibles áreas de automatización que podemos desarrollar nos tenemos que quedar con este mensaje: “invertir en la automatización de procesos repetitivos, tediosos y fuentes habituales de errores, al final redunda en un beneficio global“. Nuestro software incrementará su nivel de calidad considerablemente y la percepción que nuestro cliente recibirá es que nuestros desarrollos son sólidos y que somos capaces de reducir el “time to market”, sin poner en riesgo la consistencia de los mismos. Por lo tanto: “Automatiza o muere”.

 

Autor: Adolfo Fernández. Responsable de soluciones en Avansis

 

Presiona ENTER para comenzar la búsqueda en Avansis