---
title: 'Guía de ciclo de vida de la solución'
---
Guía de ciclo de vida de la solución
===
* **Coordinador Tecnológico:** Rafael Palau
* **Arquitecto:** Horacio Nemeth
* **Consultores:**
Ilse Grau
Julio Mello
Marco Aquino
Marcos Benítez
Lauro Segovia
Alan Sanier
# Contenido
[TOC]
# Objetivo
El objetivo del presente documento es presentar una guía para la gestión del ciclo de vida de la solución.
# Marco metodológico
La presente guía se enmarca en la cultura DEVOPS representada por los valores CAMP.
* Cultura (Culture): Una cultura de objetivos compartidos entre los equipos, colaboración, visión sistémica (tanto Devs como Ops forman parte de la “gran figura” y la entienden) y empatía mutua. Se podría resumir en una cultura ágil.
* Automatización (Automation): La automatización como herramienta para cumplir con los objetivos. Minimiza los tiempos de despliegue y de recovery. Minimiza el riesgo de tareas manuales aumentando la calidad. Permite obtener feedback rápido y por lo tanto un aprendizaje rápido.
* Measuring: Medir para poder obtener feedback del producto y del proceso que permita “ajustar el rumbo” sabiendo que aquello que se mide cambia el comportamiento de los equipos. Tomar y comunicar los indicadores adecuados para los diferentes stakeholders.
* Sharing: Compartir los objetivos. Compartir la responsabilidad. Compartir las lecciones aprendidas entre los equipos, en particular entre los equipos de desarrollo y operaciones. Compartir tiempo.
En particular se basa en los siguientes principios metodológicos:
* Primero Personas / Luego Procesos / y finalmente Herramientas
* Infraestructura como código

**Figura 1.** Infraestructura como código.
* Inmutable deployment

**Figura 2.** Inmutable deployment
# Roles claves (People)
* Arquitecto de la solución
* Release Manager
* Desarrolladores solución
* Desarrolladores automatizaciones
* Especialistas Infraestructura
# Procesos (Process)
Como ya fue mencionado los procesos que se detallan a continuación fueron concebidos teniendo en cuenta la cultura devops.

**Figura 3.** Cultura devops.
## Ambientes
Los ambientes definidos en la instanciación del proyecto son:
* Ambiente Local de Desarrollo: Ambiente de desarrollo local en el equipo de cada desarrollador con una copia actualizada de la última versión del repositorio de código.
* Ambiente de Desarrollo: Ambiente de desarrollo que se utiliza para ejecutar productos o componentes de manera centralizada a nivel de desarrollo. Por ejemplo, bases de datos o componentes que no puedan ser ejecutados en los ambientes locales de cada desarrollador.
* Ambiente de Integración: Ambiente en el cual se integran los diferentes módulos de la solución y se realizan las pruebas de integración.
* Ambiente de Test: Ambiente en el cual el equipo de desarrollo realiza las pruebas funcionales y no funcionales.
* Ambiente de UAT: Ambiente en el cual se realizan las pruebas de aceptación, funcionales y no funcionales por parte del usuario.
* Ambiente de Staging o Preproducción: Ambiente previo a producción, que conserva características similares y donde se hacen pruebas de carga y pruebas piloto con datos reales
* Producción: Ambiente en el cual se opera el sistema productivo.
Cuando una pieza de código está lista, esta se pasa al ambiente de integración, utilizando el ciclo devops definido más adelante en este documento. En este ambiente se realizan pruebas integradas a nivel de desarrollo, para luego pasar al ambiente de Test.
Una vez que se consolida una versión para reléase, esta se promueve al ambiente de Test, de forma que el equipo de QA realice las pruebas pertinentes.
Finalizada la validación, se genera una versión de reléase candidata, que se promueve al ambiente de UAT para la validación por parte del cliente.
Una vez pasado el ciclo de pruebas funcionales esta se promueve al ambiente de Staging para la realización de pruebas no funcionales y para su posterior pasaje a producción.
A continuación, se presenta un diagrama de alto nivel en donde se detalle el ciclo completo de la gestión de los ambientes mencionados:

**Figura 4.** Gestión de ambientes
## Planificación
Considera todas las actividades correspondientes a la gestión y ejecución del proyecto, las cuales estarán gestionadas con apoyo en la herramienta Redmine.
## Codificación
Comprende todas las actividades necesarias para el desarrollo colaborativo de aplicaciones.
Cada desarrollador trabaja de forma local en su máquina utilizando una copia del repositorio y al finalizar su trabajo lo integra con el repositorio Git y consumiendo los servicios que requiera del ambiente de desarrollo centralizado.
Considera las siguientes actividades:
* *Obtención de código fuente*: Creación del feature branch sobre el cual se trabajará.
* *Codificación de la solución*: Codificación de la solución de software.
* *Codificación de las pruebas unitarias*: Codificación de las pruebas unitarias para los componentes principales de la solución. Estas pruebas unitarias pueden cubrir las funciones básicas de set-get y funciones de integración cuando esto sea requerido.
* *Ejecución de pruebas unitarias y de servicios en el entorno local*: Considera la ejecución de pruebas lanzadas desde las herramientas de desarrollo y en el entorno local de cada desarrollador.
* *Análisis estático de código*: Se implementa a través del plugin que integra con Sonarqube, el cual permite realizar validación de código estático con el uso de reglas estándar y ampliar con la definición de reglas específicas. Adicionalmente se agrega plugin de seguridad para validación OWASP de seguridad.
* *Revisión de código fuente (code-review)*: Actividades de revisión de código fuente en la etapa final del sprint, la revisión por pares peer-review es realizada entre desarrolladores, el code-review es realizado mediante la revisión del líder técnico del equipo de trabajo.
* *Merge a rama develop y creación de rama release*: Es la última actividad del desarrollador para dar fin a la actividad de codificación, se realiza según la definición de gestión de versiones especificada en el apartado dedicado a tal fin.
## Gestión del código fuente
Para la gestión colaborativa de versionado de código fuente, se utilizará GitLab y el workflow estándar de mercado [gitflow](https://hackmd.io/dClta5JXTvG8wzrMY6-c5Q).
## Construcción (Build)
El proceso de construcción tendrá dos instancias, la primera, como parte del proceso de integración y despliegue continuo en entornos de integración y test la segunda, una vez que haya superado el set de pruebas iniciales y sea promovido el software al entorno UAT.