Patrones en Gestión de Configuraciones Software (III)

Integration Build

Objetivo: asegurar que el código base del sistema siempre se podrá construir (compilar y linkar) al menos, sin que en ello influyan los espacios de trabajo privados. ¿Cómo saber si el trabajo realizado por un individuo encajará bien en lo realizado por el resto? ¿Y si no es posible que uno compile todo el proyecto localmente antes de hacer un check-in? Para solventar este problema, hay que asegurarse de que todos los cambios y sus dependencias son construidos utilizando un proceso centralizado de integración. Este proceso deberá ser: reproducible, tan similar como sea posible a la construcción final (como producto; un candidato a pruebas) automatizado para cada check-in, y finalmente un sistema de identificación y localización rápida de errores e inconsistencias.

La frecuencia de esta integración dependerá del tamaño de la construcción y de la velocidad con la que ocurren cambios. Lo normal es que sea entre una vez diaria y una por cada check-in. Es conveniente identificar tales compilaciones en el control de versiones con una etiqueta.

Third Party Codeline

¿Cuál es el modo más efectivo de coordinar versiones de código propio con COTS o código subcontratado? Los COTS evolucionan de versión en versión de forma independiente a como lo hace el código propio. ¿Qué versiones relacionar de cada COTS con qué versión del producto? Para ello, crea un codeline independiente para COTS. Crea espacios de trabajo y kits de instalación para tal COTS a partir de su codeline. Esto sería útil para, por ejemplo, si pudieras tocar el código de estos componentes externos y adaptarlo a tu antojo. Cada cambio, una nueva revisión, abriendo una rama independiente para tal cuestión (patrón Task Branch, que ya veremos más adelante).

Cuando el proveedor saca una nueva versión de estos componentes se hace un merge de la nueva versión y los cambios realizados por la propia organización. Cuando se publique un nuevo release del producto, se etiqueta tal release y se etiqueta la revisión del COTS en la rama de cambios creada con la versión de nuestro producto con la cual se corresponde.

Es necesario hacer que el control de versiones permita descargar la revisión adecuada de cada COTS de manera transparente cuando uno descarga el código propio, y que al realizar un check-in haga lo correspondiente con tal COTS (check-in de los cambios realizados en el COTS).

Task Level Commit

¿Cuánto trabajo debería realizarse entre check-in y check-in al control de versiones? ¿Cuánto se debería esperar para subir cambios? Es decir: lo que aquí nos preocupa es la granularidad de las tareas a realizar. De esto depende el que el historial de revisiones de un artefacto nos muestre, de forma fidedigna, la evolución de tal artefacto. Hay que tener en cuenta los costes de hacer muchos check-in (tests, construcciones, integraciones, verificaciones…) y de hacerlos con menos frecuencia (mayor probabilidades de colisiones con el código de otros programadores, código desactualizado, mayor esfuerzo a la hora de realizar merges). Las tareas deben ser tan atómicas como sea posible, y que los cambios afecten al menor número posible de ficheros, para así poder identificar de forma sencilla qué cambios se corresponden con qué tarea.

Resumiendo: tareas de grano fino, un check-in por tarea. En caso de que la tarea sea demasiado grande (por su naturaleza, o por lo que sea) y por tanto no se pueda romper, habría que tener en consideración el crear una rama independiente para tal tarea (nuevamente volvemos a citar el patrón Task Branch, del que hablaremos más adelante).

———————————————————-

Referencias:

Steven Berczuk, Brad Appleton: “Software Configuration Management Patterns, Effective Teamwork, Practical Integration

Un pensamiento en “Patrones en Gestión de Configuraciones Software (III)

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s