Gestión de Configuración - Tendencias 2015

Publicado el 17/06/2015

Las tendencias en la disciplina de Gestión de Configuración permiten enfocar y redefinir los estándares establecidos hasta el momento en los entornos de trabajo.

Introducción

El proceso de Gestión de Configuración de Software (GCS) debe garantizar las condiciones para que el desarrollo de software sea fácil. Una buena definición del proceso de GCS hace posible que los programadores trabajen en equipo y de manera eficiente. El proceso incluye herramientas, patrones y estándares de uso propiamente definidos para la GCS.

El presente documento muestra el estado de algunas herramientas que apoyan la GCS a partir de los datos obtenidos de las siguientes fuentes: Tendencias de Google y de StackOverflow.

Las herramientas analizadas fueron seleccionadas a partir de mi experiencia de trabajo como Gestor de Configuración de Software. Nuevas herramientas podrán ser incluidas posteriormente.

Actividades de la Gestión de Configuración

La definición clásica de actividades descritas por Roger S. Presman en su libro “Ingeniería de Software: Un enfoque práctico” son las siguientes:

  • Identificación de configuración
  • Control de cambios
  • Estado de configuración
  • Auditoría de configuración

Un poco más reciente, Bob Aiello presenta en su libro “Configuration Management Best Practices” las siguientes actividades:

  • Gestión de código fuente
  • Ingeniería de construcción
  • Configuración de entornos
  • Control de cambios
  • Ingeniería de lanzamiento o liberación
  • Despliegue

A mi criterio ambas definiciones son correctas, cada una con su enfoque. En el presente documento se utilizarán las definiciones de Aiello para mostrar las herramientas analizadas según su actividad.

1. Gestión de Código Fuente

1.1 Sistema de control de versiones

Sistemas analizados: Subversion, Git, Mercurial, CVS.

Git muestra un mayor número de registro en ambas gráficas. Estos valores son el reflejo de la gran popularidad y aceptación que tiene este sistema de control de versiones. Dentro de las principales características de este sistema está la integridad de la información y su velocidad.

1.2 Control de Roles y Usuarios

Git es el sistema de control de versiones más utilizado según las gráficas revisadas. No obstante, Git no establece dentro de sus funcionalidades la gestión de permisos por roles y usuarios, por tal motivo se adoptan estos sistemas, para garantizar la seguridad en los repositorios de código fuente.

Sistemas analizados: Gitosis, Gitolite.

Gitolite cuenta con mayores registros al realizar el análisis. El gran nivel de granularidad de este sistemas lo convierte en una poderosa herramienta cuando se desea establecer la seguridad de los repositorios de código fuente.

1.3 Flujo de Trabajo

Git-flow establece la metodología recomendada para el uso de Git. El flujo de trabajo se adapta sin dificultades a diversos equipos y proyectos sin importar su tamaño o ubicación. Para mayor información de este flujo se debe revisar el siguiente enlace:

1.4 Herramientas de Interfaz

Herramientas visuales analizadas: Las herramientas visuales ayudan a la gestión del código fuente garantizando altos niveles de usabilidad con relación al sistema Git. Estas herramientas permiten que todos los usuarios puedan utilizar de forma simple las bondades que brinda el sistema de control de versiones. De igual forma mejora el proceso de integración en el equipo de trabajo.

Tower y SourceTree son las herramientas que recomiendo. Las principales características que dan peso a mi decisión son:

  • Interfaz de usuario fácil e intuitiva.
  • Integración de Git-Flow como propuesta de flujo de trabajo.
  • Integración con sistemas externos y ejecución de scripts.

Sitios de referencia revisados durante la búsqueda: 10 Sitios de Referencia, Clientes para Mac OS X.

2. Ingeniería de Construcción

2.1 Herramientas de construcción

Las herramientas de construcción permiten organizar las dependencias y ejecutar las tareas necesarias para lograr crear el producto de software final.

Herramientas analizadas: Make, Ant, Scons, CMake, Maven, Gradle.

Maven cuenta desde hace algún tiempo con el mayor índice de popularidad. Las cifras están dadas en gran medida a la posibilidad de modelar, de forma sencilla, la lógica que se desea construir. Como sugerencia recomiendo no perder de vista a Gradle. Esta herramienta ha sido adoptada por equipos como Eclipse para realizar sus construcciones.

3. Configuración del Entorno

Esta área depende mucho del proyecto a utilizar y de las características de cada grupo de desarrollo. Por tal motivo no se le ha realizado el mismo análisis que al resto.

De manera general la intención es lograr establecer el mismo escenario en: máquinas de pogramadores, servidores de pruebas y servidores de finales del producto. Cada escenario debería tener configurado los mismos paquetes, dependencias y aplicaciones en aras de evitar errores durante la fase de prueba y despliegue.

Como elementos recomendados se muestran dos sistemas que ayudan a estandarizar y compartir la configuración de los entornos de trabajo de manera rápida y confiable: Docker y Vagrant.

Docker muestra mayores índices en las gráficas analizadas. Este viene siendo un sistema de control de versiones a nivel de sistema operativo y utiliza la filosofía de Git pero a más bajo nivel. Si le gusta Git le gustará adoptar Docker. Recomiendo darle un vistazo a esta herramienta.

4. Control de Cambios

4.1 Gestión de proyectos

En esta área se han analizado los sistemas de gestión de proyectos.

Herramientas analizadas: Redmine, Jira, Mantis BT, Trac.

Jira y Redmine muestran mayores niveles en las gráficas analizadas, ambos sistemas cuentan con excelentes características. En mi experiencia personal trabajando con Redmine he identificado muy buena adaptación (a través de plugins) con el resto de los sistemas mencionados en el artículo.

5. Ingeniería de Liberación

5.1 Sistemas de integración continua

Los sistemas de integración continua permiten, entre otras muchas actividades, la ejecución de las siguientes tareas: construcciones nocturnas, pruebas de integración, generación de documentación, análisis estadístico del código y generación de reportes.

Herramientas analizadas: Hudson, Jenkins, Atlassian Bamboo.

Jenkins muestra en las gráficas el mayor número de actividad. Este sistema cuanta con numerosos plugins que permiten la integración con sistemas externos.

6. Despliegue

El despliegue de los sistemas puede realizarse de forma manual, semiautomatizada o completamente automatizada. Los despliegues automáticos frecuentemente se realizan utilizando herramientas de integración continua como las descritas en el epígrafe anterior.

Teniendo en cuenta las tendencias antes vistas (Git, SourceTree, Git-Flow) recomendaría Git-FTP para variantes semiautomatizadas. Esta herramienta fue descrita en el artículo Cómo configurar Git-FTP en SourceTree mostrando sus beneficios al proceso de GCS.

Las variantes de despliegue de forma manual se realizan utilizando los clásicos clientes FTP, como por ejemplo FileZila.

Reflexiones Finales

Las tendencias en la GCS brindan una visión del comportamiento de los métodos, herramientas y patrones. En el presente trabajo se profundiza en las herramientas utilizadas en este proceso.

Los elementos de alta relevancia identificados dentro del estudio permiten establecer un entorno favorable al desarrollo de software. Un ejemplo de la combinación de estos sistemas se muestra en el artículo Modelo de Gestión de Configuración con herramientas código abierto. La colaboración y comunicación entre ellos es vital para el éxito del grupo.

Los grupos de trabajo deben realizar la selección de las herramientas según su entorno porque las variantes son muchas. Sin embargo, tener en cuenta estas gráficas durante la selección de herramientas para un entorno de desarrollo de software ayudará a elevar los niveles de productividad y se reducirán los errores.

Revisiones significativas

  • SHRIKRISHNA, H. (2015): Orchestrating Docker.
  • JOHN, F. (2012): Jenkins The Definitive Guide.
  • BOB, A. (2011): Configuration Management Best Practices. Practical Methods that work in the real world. Addison-Wesly.
  • PETER, S (2011): Software Build Systems. Principles and Experience. Addison-Wesly.
  • PAUL, M. (2007): Continuous Integration. Improving Software Quality and Reducing Risk
  • ROGER, S. P. (2005): Ingeniería de Software. Un enfoque práctico.
  • STEVE, B. (2002): Software Configuration Patterns: Effective Teamwork, Practical Integration. Addison-Wesly.
Publicado el 17/06/2015