viernes, 24 de septiembre de 2010

Distribución e integración del desarrollo

Al igual que en otras disciplinas, es usual distribuir la construcción de un software de gran escala en múltiples equipos. Esta práctica permite desarrollar en paralelo sus distintos módulos, reduciendo potencialmente los tiempos para su entrega.

En algún momento del desarrollo, los distintos módulos deben ser integrados. Es entonces cuando múltiples problemas pueden surgir y crear atrasos no planificados. Esta situación puede tornarse gravísima dependiendo de los errores que se hayan cometido al momento de concebir la separación de los desarrollos, y de las incompatibilidades que se vayan introduciendo en cada uno. En el extremo, un desarrollo desagregado en distintos equipos, donde no se realizó tempranamente un diseño adecuado de cómo integrar lo producido por cada equipo, puede fracasar exclusivamente por la imposibilidad de conectar todas sus piezas dentro de los tiempos comprometidos.

En consecuencia, un artefacto irrenunciable en un desarrollo que busque obtener los beneficios del trabajo en paralelo, es un adecuado plan de integración. Este plan debe ser creado en etapas muy tempranas del proyecto y elaborado de forma progresiva, considerando que: (i) sólo tras la definición de la arquitectura del sistema, se contará con la información técnica que permita tomar decisiones adecuadas respecto a la asignación de tareas, y (ii) los eventos que ocurran durante la construcción pueden forzar a cambios de estrategia en cualquier etapa.

El diseño de integración de los productos de trabajo es un artefacto clave para la adecuada distribución del desarrollo. Este diseño es responsabilidad de los arquitectos, los cuales junto con concebir la estructura y el comportamiento de las interfaces que permitirán integrar los distintos componentes, deben ser capaces de entregar sugerencias que permitan identificar el esquema óptimo de distribución de trabajo a los tomadores de decisiones.

Lamentablemente, esto no es suficiente para mitigar completamente los riesgos de retrasos por integración, ya que muchas veces las decisiones de arquitectura son mal interpretadas o socavadas involuntariamente. Es por esto que el diseño de integración debe ser tomado rápidamente como entrada para la creación e implementación de planes de pruebas, que permitan verificar continuamente la ausencia de incompatibilidades entre los módulos en desarrollo.

Para las pruebas de integración, el nivel de automatización es directamente proporcional a la mitigación de los riesgos. En todo momento se debe evitar las pruebas manuales de las integraciones, pues esto atenta contra su ejecución continuada.

Todo lo anterior se resume en una fuerte sugerencia para los desarrollos de gran escala: Concebir y mantener siempre un plan de integración, que esté respaldado por un diseño arquitectónico de integración detallado, y resguardado por un plan de pruebas, implementado de manera que maximice la automatización y frecuencia de su ejecución.