lunes, septiembre 05, 2011

El Cliente Ideal de Control de Versiones

"Subversion Wallpaper, por Michael Pilato"

Desde que conocí el control de versiones este se ha vuelto una parte crucial de mis actividades de desarrollo de aplicaciones permitiéndome resguardar el código en un servidor pudiendo recobrar y comparar contra los cambios efectuados en el pasado así como llevar un control de las ramificaciones de mis aplicaicones y si aun no lo utilizan se los recomiendo enfáticamente y muy especialmente si (como es muy común) trabajan dentro de un equipo de desarrollo que en conjunto realizan cambios simultáneos a los mismos archivos de código fuente.

En su debido momento escribí un par de posts(parte 1 y parte 2) acerca del control de versiones en el cual explico de una manera un poco más detallada en que consiste el control e versiones, cuánto me ha servido en mi carrera y porqué considero que deberían utilizarlo. SVN es mi solución preferida de control de veriones. Es, en mi punto de vista, la evolución natural de CVS y se mantiene un tanto conservador comparado contra Git, Bazaar y Mercurial además de ser quizás el que tenga la mayor cantidad de clientes y documentación disponible. Me complica un tanto la vida al momento de incorporar cambios de una rama a otra pero hasta el momento he sobrevivido a ello.

Con todas las bondades conocidas y publicadas acerca de SVN y su variedad de sabores de clientes, tanto de línea de comandos, de escritorio o integrados en el IDE he llegado a un punto en el que durante mis experiencias como programador  mis necesidades superaron a las características ofrecidas por estos clientes y necesito algo más para administrarlo. A continuación mis escenarios en los cuales no he podido encontrar un cliente de SVN que supla mis necesidades:

  • Fases posteriores al desarrollo. Resulta que en algunos flujos de desarrollo en los que he participado se realizan diferentes fases en las cuales el código fuente pasa por diferentes personas, desde mi persona como desarrollador hasta analistas de calidad y quienes despliegan en producción la versión final. En otras ocasiones he tenido que pasar mi código fuente por otros desarrolladores quienes realizan pruebas cruzadas de mi código. Aunque he encontrado SVN te permite explorar, graficar y generar reportes de las diferentes revisiones, no he encontrado alguna herramienta que me permita catalogar mi código en base a las fases por las que este atraviesa y en manos de quien se encuentra el código fuente lo cual permitiría una mejor administración del mismo cuando se desean, por ejemplo, obtener métricas de cantidad de cambios y tiempo/esfuerzo invertido durante una fase determinada.
  • Choque de versiones concurrentes. Me ha ocurrido ya demasiadas veces que me solicitan desarrollar una nueva funcionalidad para un componente pero me entero que alguien más también tiene en fase de desarrollo o pruebas otra versión de este mismo componente las cuales, como pasarán a producción antes que mi versión, yo debo procurar incorporarlas para que cuando yo pase mi versión a producción esta sea una combinación de ambas. Mediante la creación de una rama por cada versión concurrente he logrado solucionar el problema a nivel de control de cambios e incorporación de revisiones de una rama a otra y esta solución ha sobrevivido aún a escenarios más bizarros como cuando ambos componentes deben pasar a producción en una misma fecha o cuando estos cambian de prioridad para pasar a producción mientras ambos se encuentran en fase de pruebas de calidad. Aun así, hasta el momento no he encontrado un cliente de SVN que me permita ver de una manera gráfica y detallada (número de revisión, autor, mensaje añadido a la revisión, fecha y fase) de las ramificaciones hechas a la rama principal de la línea de tiempo de un componente, lo cual me parece muy importante para llevar un control de desarrollos concurrentes, manejo de prioridades y reportería para jefes inmediatos. Un gráfico y estadísticas similares a las de Ohloh pero visualmente más detallados y mayormente enfocados en la línea de tiempo, las fases y las ramificaciones.
"Línea de tiempo en Ohloh. Si tan solo mostrara más detalles y las ramificaciones"
  • Administración de usuarios y accesos a las ramas. Me encantaría contar con un cliente o herramienta de SVN un poco más orientado para un usuario administrador de repositorios, el cual, además de permitirte explorar el código fuente, los detalles de las revisiones y comparaciones entre una revisión y otra también te permitiera configurar usuarios y roles de acceso a una línea de tiempo y sus diferentes ramificaciones. Me encantaría especialmente poder configurar un repositorio para que los usuarios y sus permisos residieran en un servidor LDAP y no depender de un archivo de configuración de apache o nativo de SVN.
  • Notificaciones. Algunas herramientas  que he conocido me permiten generar un RSS feed de cada uno de los commits realizados sobre un repositorio pero alguien como un project manager o un team manager quizás no esté interesado en todo el detalle de un commit y le sea de mayor interés commits específicos como la creación de una nueva rama para un desarrollo concurrente, el cambio de fase de desarrollo a testing (y su correspondiente detalle como número de revisión, autor, fecha y descripción) o el merge de una rama a la línea de tiempo principal (que equivaldría a un evento como un paso a producción) lo cual complementaría mi necesidad mencionada en primer punto: el manejo o clasificación de revisiones por medio de fases. Como un plus me interesaría que además de notificar también requiera la autorización de un superior para la realización de un commit a una determinada fase, como por ejemplo, un cambio hacia la fase de testing o hacia la fase de producción.
Hasta el momento sigo buscando un cliente (o grupo de clientes, al menos) o herramienta que pudiera suplirme estas cuatro necesidades básicas que he llegado a requerir para trabajar con control de versiones con mis equipos de desarrollo pero debido al tiempo que llevo buscando y los pocos y desfavorables resultados obtenidos en mi búsqueda he llegado a considerar la alternativa de desarrollar mi propio cliente de SVN basado en algún cliente existente cuya licencia me permita expandir su funcionalidad y su código fuente pertenezca a un lenguaje que yo conozca. En caso de no encontrar un cliente existente me veré obligado a desarrollarlo desde cero lo cual considero que me llevará mas tiempo pero tendré una mejor oportunidad para adaptarlo a mis necesidades. En un post posterior relataré mi experiencia tratando de desarrollar mi cliente de SVN.

Dejo además abierta la invitación a mis queridos lectores para sugerirme clientes de SVN que ustedes conozcan y consideren capaces de suplirme alguna de mis necesidades aquí planteadas y de compartirme sus experiencias en sus equipos de desarrollo por si alguno se ha topado con inconvenientes similares a los míos y ha llevado a cabo alguna solución alternativa.

Saludos.

Sunsetting Sr. Byte.

El Sr. Byte ha estado más de 5 años inactivo. Digamos que estaba en " code freeze ". Pero ahora es el último release. Quizas no...