
[06/02/2020] Se podría decir que lo opuesto al control de versiones -desde la perspectiva del desarrollo interno de software- es el caos. Si los equipos de desarrollo no gestionan varias versiones de su trabajo, las cosas pueden descontrolarse rápidamente.
El software de control de versiones, un componente de la gestión de configuración del software, ayuda a los equipos a administrar los cambios en documentos, programas, sitios web y otras iniciativas de desarrollo. Dado el hecho de que muchos esfuerzos de desarrollo dependen de equipos que trabajan en los mismos archivos al mismo tiempo, la falta de control de versiones podría crear serios problemas.
Cuando varios equipos diseñan, desarrollan e implementan aplicaciones, a menudo se implementa más de una versión del mismo software en diferentes sitios, y los desarrolladores trabajan en actualizaciones simultáneamente. Algunas características -y en muchos casos algunos errores- pueden estar presentes solo en ciertas versiones del software.
¿Qué es el control de versiones?
Para realizar cambios se requiere la capacidad de recuperar y ejecutar diferentes versiones del software para que los desarrolladores puedan determinar qué versión tiene problemas.
El control de versiones también se puede denominar control de revisión o control de origen. Así es como las organizaciones manejan los cambios en el código fuente y retienen un historial de esos cambios, señala Thomas Murphy, consultor de la firma de investigación Gartner.
Hay dos enfoques: uno le permite trabajar en un documento que nadie más puede modificar al mismo tiempo, y el otro permite que varios usuarios realicen cambios simultáneamente. "Piense en ello como dos autores trabajando en el mismo documento en Google Docs", señala Murphy. De cualquier manera, necesita herramientas para evitar que los desarrolladores se crucen. El control de versiones puede admitir ambos casos, realizando un seguimiento de los cambios y el orden en que ocurrieron.
Las herramientas de control de versiones también permiten a los desarrolladores cambiar el código y probarlo sin temor a perder el ya existente si es que el cambio no funciona, anota Jeffrey Hammond, analista principal de Forrester Research.
"Si alguna vez tuvo que corregir las ediciones de varios editores, o quiso eliminar el contenido de un documento de Word o una presentación de PowerPoint, pero sintió miedo de hacerlo permanentemente, entonces comprende la necesidad del control de versiones", añade Hammond.
Según Murphy, la demanda del software de control de versiones ha crecido junto con el aumento en el desarrollo de software. Pero hasta ahora, su uso no se ha expandido realmente fuera del mercado de desarrolladores, incluso en el área low-code/no-code.
Software de control de versiones
El análisis de mercado de Forrester señala que la mayoría de los equipos de desarrollo utilizan algún tipo de control de versiones. En su más reciente Business Technographics Developer Survey, publicado en el 2018, Forrester descubrió que más del 90% de los desarrolladores y gerentes de desarrollo que trabajan en organizaciones empresariales, usan un sistema de gestión de código fuente.
Los equipos de desarrollo pueden adoptar el enfoque simple de retener múltiples copias de diferentes versiones de un programa y luego etiquetarlas adecuadamente; sin embargo, que haya muchas copias similares de un mismo programa puede ser ineficiente y provocar errores.
Es por eso que el software de control de versiones tiene sentido.
Entonces, ¿cómo pueden las organizaciones seleccionar las plataformas más apropiadas para satisfacer sus necesidades?
Una de las primeras tareas es aprender las sutiles diferencias entre las plataformas. El corazón de todas las plataformas de control de versiones es Git, un sistema de control de versiones distribuido de código abierto para rastrear cambios en el código fuente durante el desarrollo de software. Aunque Git está diseñado para ayudar a coordinar el trabajo entre programadores, el control de versiones se puede usar para rastrear cambios en cualquier conjunto de archivos.
"Si no construye sobre Git, estará construyendo para un mercado especializado", indica Murphy. Antes de Git, el mercado ya se había desplazado hacia el código abierto a través de Subversion, que afectó radicalmente el mercado comercial, añade.
Dado que las principales ofertas se basan en el mismo motor Git, los compradores deben fijarse en las diferencias sutiles para encontrar la mejor opción. "Descubrirá que hay pocas diferencias, ya que se trata más de la colección que usted crea, de sus preferencias personales o de cómo se presentan las cosas desde una perspectiva de precios”, indica Murphy.
Una opción es GitHub, que según Murphy ofrece el repositorio de código abierto más grande, tiene herramientas para administrar el proyecto/comunidad de software, y tiene un amplio conjunto de socios que lo apoyan con funciones add-in.
Microsoft también ofrece GitHub Enterprise para el mercado empresarial y Azure Devops, que es el sucesor de Team Foundation. Este último es una colección de herramientas para organizaciones que desean un ciclo de vida de desarrollo de aplicaciones más integrado, comenta Murphy. Tiene una funcionalidad similar a la de GitHub, pero la combina con una planificación ágil y gestión de pruebas.
GitLab es otra oferta de código abierto que viene con características, tales como un proyecto integrado y capacidades de integración continua para que los equipos puedan probar y entregar código automáticamente. Pueden acceder a todos los aspectos de un proyecto y ver el código.
El Bitbucket de Atlassian, a menudo, es implementado por usuarios de otras herramientas de Atlassian, anota Murphy. Al igual que otros sistemas de control de versiones, gran parte del valor y la diferencia viene de cómo se combina el repositorio de código fuente con el flujo de trabajo y el sistema que construye y prueba los cambios, dice.
IBM ofrece Rational Team Concert (RTC), una herramienta multiplataforma de colaboración en equipo basada en Jazz y Eclipse que proporciona a los desarrolladores funcionalidades para la gestión ágil/agile del ciclo de vida de las aplicaciones. Las funciones de RTC incluyen la planificación integrada, el seguimiento de tareas, el conocimiento del equipo y del proceso, el seguimiento del estado del proyecto y una interfaz uniforme en múltiples plataformas.
También está disponible una alternativa más antigua, el Sistema de Versiones Concurrentes (CVS, por sus siglas en inglés), un sistema gratuito que realiza un seguimiento de todo el trabajo y los cambios en un conjunto de archivos, y que permite que varios desarrolladores colaboren. CVS utiliza la compresión delta para el almacenamiento eficiente de diferentes versiones del mismo archivo, lo que es adecuado para archivos de texto grandes con pocos cambios de una versión a otra (generalmente el caso de los archivos de código fuente).
Características clave del software de control de versiones
¿Cómo reducir las opciones? Las empresas deben considerar primero las estructuras de costos, cómo planean usar el software y cómo quieren distribuirlo a los usuarios. Aquí hay algunas consideraciones generales adicionales.
¿Se puede implementar el software de control de versiones en servidores locales, en centros de datos de propiedad de la compañía o en la nube? Aunque la mayoría de las aplicaciones están siendo movidas a la nube, no todas las organizaciones quieren que todo esté basado en la nube.
¿El software tiene un buen soporte de ramificación y fusión? Los desarrolladores podrían querer crear rápidamente una rama de su código, hacer cambios, probarlos y fusionarlos nuevamente a la fuente principal.
¿Cómo resuelve los conflictos de fusión? Si un desarrollador cambia un montón de archivos de código y algunos de ellos entran en conflicto con los cambios realizados por otro desarrollador, el primero seguramente querrá comparar los cambios y resolver los conflictos, señala Hammond de Forrester. Esto podría requerir que el primer desarrollador examine diferentes versiones de código línea por línea para ver qué debe aceptarse.
¿Hay soporte para el uso offline o la clonación de repositorios? Los desarrolladores no pueden asumir que siempre estarán conectados a la red de la compañía o a Internet, indica Hammond. Alguien que viaja en un tren o avión podría querer tomar una copia del código para trabajar mientras está desconectado. Ese trabajador también podría querer crear una copia nueva de un proyecto clonando un repositorio para llevarlo en otra dirección.
Otra posible característica es el flujo de trabajo de revisión de cambios. En proyectos grandes, un arquitecto o gerente de proyecto podría necesitar revisar los cambios solicitados por un desarrollador. Es importante hacer que este flujo de trabajo sea lo más fluido posible, indica Hammond, porque todos los días se hacen cambios, especialmente en proyectos grandes.
Luego están las capacidades de integración necesarias para una gran cantidad de operaciones de desarrollo. Esto incluye la integración con otras herramientas de desarrollo y devops, tales como los sistemas de seguimiento de problemas y las herramientas de automatización de pruebas.
Ninguna herramienta de desarrollo vive aislada, señala Murphy. Necesitan conectarse o integrarse con otras partes de la operación de desarrollo, y requieren del apoyo de la comunidad de desarrolladores. "En este mercado, las decisiones principales sobre qué herramientas usar son tomadas por las personas que usan las herramientas", añade.
Finalmente, como con cualquier otro aspecto de las operaciones de TI y desarrollo, la seguridad no debe ser una ocurrencia tardía. ¿Qué tipo de controles de acceso existen? ¿Quién tiene acceso al código fuente y a las operaciones realizadas en ese código? Las capacidades de seguridad pueden incluir cifrado de datos, autenticación de dos factores y protección con contraseña.
Dada la complejidad del desarrollo de software moderno -y de los equipos que lo realizan- es fácil ver las ventajas que puede proporcionar el tipo correcto de software de control de versiones. Las organizaciones que se toman el tiempo para seleccionar el producto correcto verán disminuir algunos de los problemas comunes que afectan a sus equipos de desarrollo.
Bob Violino, InfoWorld (EE.UU.)