DNM+ Online
dotnetmania 2.0
Escogiendo metodología y organización de equipo
El desarrollo de software es cada vez una tarea más compleja, en la que intervienen diferentes roles y que comprende un buen número de etapas y actividades. Para llevar a cabo esta tarea, deberemos contar con una metodología que nos ayude a completarla con éxito, reduciendo los riesgos y haciendo el proceso más predecible y eficiente.

Introducción En los inicios, el desarrollo de software carecía de procesos formales definidos, no existía un guión que nos ayudara a planificar y predecir cómo debía ser el proceso de desarrollo. La creciente exigencia en la calidad de los proyectos de software, así como la necesidad de obtener un producto de máximo valor, hace necesaria la adopción de una metodología concreta de desarrollo. Esta metodología de software debe permitir potenciar las capacidades de los diferentes grupos de desarrollo involucrados en el proyecto, así como hacer más predecible todo el proceso de desarrollo. La elección de una correcta metodología, y que ésta se ajuste a las características del equipo de desarrollo, nos ofrecerá una mayor flexibilidad para la consecución de los objetivos del proyecto, además de ofrecer la posibilidad de satisfacer nuevas necesidades surgidas durante las diferentes etapas del proceso. Algunas de las características que una buena metodología no debería pasar por alto son:

•  Debe cubrir el ciclo completo de desarrollo. Es decir, debe comprender las etapas de investigación, análisis de requisitos, diseño e implementación. •  Debe integrar las distintas fases del ciclo de desarrollo. Nos debe poder permitir fusionar las diferentes fases del desarrollo para conseguir la solución final. Es importante que nos permita realizar correcciones en fases anteriores sin perjudicar gravemente el resultado final.
•  La metodología nos debe ayudar a detectar y corregir errores cuanto antes. Generalmente, cuanto más tarde sea detectado un error más costoso será corregirlo. Es por esto que es altamente recomendable que la metodología incluya fases de validación explícitas, como mínimo, al finalizar cada etapa del proceso. •  Debe ayudarnos a definir con exactitud el comportamiento final del sistema. Una buena metodología debe asegurar que el resultado final se ajusta perfectamente a las especificaciones marcadas, y que éstas cubren todas las necesidades de los usuarios. •  Debe ser la base de la comunicación entre las partes implicadas en el proyecto. Una metodología debe establecer canales y mecanismos que ayuden a mantener un buen flujo de información entre los diferentes componentes del equipo de proyecto. Cómo elegir una metodología El momento de la elección de la metodología a utilizar es uno de los puntos más críticos de todo proyecto, y del que dependerá en gran medida que éste llegue a buen puerto o por el contrario, naufrague por el camino. Esta elección debe realizarse teniendo en cuenta diversos factores, algunos de los más importantes son:

•  El tipo de proyecto. La metodología escogida dependerá en gran parte de las características del proyecto. Algunas metodologías se adaptan mejor a proyectos que se realizan utilizando determinada tecnología, otras, en cambio, se adaptan mejor a proyectos de una determinada duración o complejidad. •  Las características de nuestro equipo de desarrollo. El objetivo final de toda metodología es el de potenciar las capacidades de los integrantes del equipo de proyecto. Por este motivo será vital, que la totalidad del equipo esté de acuerdo en que la metodología que se utilizará es la más indicada y que garantiza un resultado mejor del que se podría obtener con cualquier otra metodología. •  Factores externos. En ocasiones la metodología a utilizar vendrá marcada por las exigencias de algún factor externo. Un ejemplo de esto podría ser  la obligación de utilizar la misma metodología que utiliza un cliente o proveedor de software concreto. •  Herramientas de desarrollo. Es posible que algunas de las herramientas que empleemos para la implementación de nuestro proyecto se adapten mejor a cierto tipo de tecnología.

Metodologías ágiles
o tradicionales Las metodologías tradicionales se caracterizan por generar una documentación exhaustiva de cada una de las etapas del proyecto. Centran su atención en cumplir un plan de proyecto, que en la mayoría de casos, se define en las etapas iniciales de éste. Las metodologías tradicionales, pese a ser excelentes en cuanto al control del proyecto (siempre y cuando se definan correctamente los requisitos desde un inicio, lo cual no es en absoluto fácil), tienen el inconveniente que son poco adaptables a los cambios surgidos durante las diferentes fases. Las metodologías ágiles, en cambio, centran su filosofía en  tomar las decisiones más críticas y que más valor aportan al inicio del proyecto posponiendo el resto a etapas posteriores y en la planificación adaptativa. Las principales ideas en las que se basan estas metodologías se recogen en el Agile Manifesto, algunas de ellas son:

•  Los individuos y las interacciones entre ellos son más importantes que las herramientas y procesos empleados. •  Es preferible conseguir un buen producto a una documentación exhaustiva. •  Se debe potenciar al máximo la colaboración con el cliente. Así aseguraremos que el producto final cumpla con sus expectativas. •  La flexibilidad y respuesta a los cambios deben prevalecer sobre cualquier planificación inicial.

Entonces, la primera pregunta que debemos hacernos al elegir una metodología es: ¿debemos optar por una metodología tradicional o debemos decantarnos por una metodología ágil?
La respuesta es -obviamente- depende. Para que un equipo de proyecto pueda trabajar con metodologías ágiles es muy recomendable que éste cuente con experiencia previa en el desarrollo de proyectos, ya que las metodologías ágiles implican un alto nivel de responsabilidad de todos los miembros del equipo. Las metodologías ágiles, permiten disminuir costes y hacen que el proceso de desarrollo sea flexible, esto será muy beneficioso en proyectos donde el entorno es volátil y los requisitos no se conocen con exactitud al iniciar el proyecto. Además, nos permitirán generar el máximo valor para el cliente en fases más tempranas de lo que nos permitiría cualquier metodología no ágil.

Metodología con Team System Hablar de metodología en Team System es hablar de plantillas de procesos. Las plantillas de procesos definen cómo se va a configurar el ciclo de vida del proyecto. Estas plantillas definen conjuntos determinados de elementos de trabajo, consultas sobre elementos de trabajo, grupos de seguridad, informes y ofrecen información orientativa en el momento de la creación del proyecto. Team System soporta, de forma predeterminada, dos metodologías con objetivos diferenciados: MSF para desarrollo ágil y MSF para mejoras de proceso CMMI. Además, existen diferentes plantillas de terceros para dar soporte a otras metodologías (como por ejemplo SCRUM, RUP, ICONIX…). Incluso tendremos la opción de crear nuestra propia plantilla de proceso personalizada, lo cual puede resultar complicada y es solo recomendable en el caso que ninguna de las metodologías conocidas y contrastada se ajusten a nuestras necesidades concretas.
La plantilla para MSF para desarrollo ágil está diseñada para ser utilizada en proyectos pequeños con un calendario de entregas rápido. Algunos de los motivos por los cuales puede resultar interesante esta plantilla son:

•  Estamos interesados en la especificación de procesos flexibles,  que nos permitan adaptarnos a posibles modificaciones en el proyecto. •  El equipo de desarrollo es reducido. •  Necesitamos dar cabida a diferentes equipos de desarrollo que trabajan de formas distintas. •  Nos interesa que los ciclos de desarrollo sean cortos (entre dos semanas y un mes).

MSF para desarrollo ágil intenta reducir riesgo en un proyecto, realizando el desarrollo mediante iteraciones. Cada iteración consiste en un proyecto en miniatura por sí solo, e incluye todas las tareas necesarias para la puesta en producción de las nuevas funcionalidades desarrolladas. Al final de cada iteración se reevalúan las prioridades del proyecto para obrar en consecuencia. Esta metodología hace especial hincapié en maximizar los mecanismos de comunicación entre todas las partes implicadas en el proyecto (prefiriendo la comunicación directa sobre la comunicación realizada mediante documentos escritos), especialmente entre los desarrolladores y los encargados de definir el producto. Las metodologías ágiles toman como principal métrica de progreso del proyecto, el número de funcionalidades implantadas hasta el momento. Esto unido a la preferencia por las comunicaciones no-escritas, hace que al finalizar el proyecto, la documentación generada relativa a otros aspectos sea mínima. 
Los métodos ágiles se caracterizan por adaptarse rápidamente a los cambios introducidos en el proyecto. Cuando cambian las necesidades de un proyecto, un equipo "ágil" puede cambiar también. Cuando trabajamos con métodos ágiles podremos tener dificultades para describir con exactitud qué pasará en un futuro lejano, solo podremos estar seguros de que funcionalidades están planeadas para el fin de la iteración en curso. En cambio, las metodologías tradicionales planifican el transcurso de todo el proceso de desarrollo desde un principio. Un equipo, que trabaja con metodologías tradicionales, está en disposición de informar con precisión en qué momento se llevará a cabo una tarea concreta, pero tendrá inmensas dificultades  para cambiar de dirección en el caso que las condiciones iniciales del proyecto cambien.
La plantilla de MSF para mejoras de proceso CMMI puede resultar interesante si estamos interesados en la formalización de procesos y mejora de las prácticas mediante la aplicación de las conclusiones aprendidas. Puede ser conveniente elegir esta plantilla si: •  Deseamos evaluar las prácticas empresariales actuales. •  El equipo de desarrollo de software es grande. •  Necesita integrar grupos u organizaciones tradicionalmente independientes. •  Necesitamos proporcionar orientación para los procesos de calidad. •  Los ciclos de desarrollo de software son prolongados. •  MSF para mejoras de proceso CMMI tiene más artefactos, más procesos y requiere una mayor planificación. Está orientado al desarrollo de proyectos que requieren un mayor grado de formalización y protocolo (como por ejemplo muchos los proyectos de la administración en EEUU, donde CMMI es un requisito). •  MSF para mejora de proceso CMMI es una metodología formal y cuyo objetivo principal es el de la continua mejora de los procesos existentes en una organización. De esta forma, utilizando el conocimiento adquirido, conseguiremos reducir los ciclos de vida de desarrollo, realizar mejores estimaciones de costes y planificar objetivos con un menor margen de error. Todo esto derivará en la elaboración de productos de mayor calidad. Estructura de plantilla
de procesos Podemos diferenciar tres piezas clave en una plantilla de proceso para Team System: los complementos de la plantilla de procesos, el asistente para nuevo proyecto de equipo y los archivos de definición de procesos XML. Los complementos de plantilla de procesos se ejecutan cuando se crea un nuevo proyecto de equipo. Éstos instalan los archivos necesarios para su ejecución, además de configurar los datos para el correcto funcionamiento de su área. Microsoft proporciona los siguientes complementos de plantilla: El asistente para la creación de nuevos proyectos consiste en una herramienta que nos guiará en el proceso de creación de un nuevo proyecto, pidiéndonos la información necesaria para la configuración de los complementos indicados en la plantilla y creando estos complementos en el orden indicado. Los archivos de definición de procesos XML definen las tareas que se deben ejecutar para la correcta configuración de los complementos necesarios. Cada complemento cargará su archivo de definición de proceso para obtener la lista de tareas que debe ejecutar. Team System como
herramienta metodológica Team System comprende un conjunto de herramientas que nos ayudan a gestionar el ciclo de vida de un proyecto de desarrollo en el que están implicados diferentes roles dentro de una organización. Team System permite administrar los diferentes elementos que forman un proyecto así como planificar los recursos que en éste intervienen. Team System nos puede ayudar en los siguientes escenarios:

•  Productividad en equipo. Mediante el uso de diferentes herramientas específicas para cada rol de la organización, se aumenta la productividad global del equipo. Además, Team System se puede integrar con herramientas conocidas, como Microsoft Excel para la exportación y tratamiento de tareas o Microsoft Project para la realizar planificación del proyecto. Team System nos ofrece también un front-end Web (figura 4), que nos permitirá realizar diversas tareas directamente desde nuestro navegador. •  Colaboración y comunicación. Team System ofrece un repositorio de código con un potente control de versiones, accesible desde Internet. Además, nos ofrece herramientas para controlar los diferentes flujos de trabajo que tienen lugar en el equipo mediante la asignación de tareas, gestión de requisitos, gestión de riesgos, etc. •  Calidad del software. Muchas de las capacidades de Team System están orientadas a controlar y mejorar la calidad del software generado. Mediante los mecanismos para la generación de métricas, integración de código y realización de diferentes tipos de pruebas. Team System nos ofrece todo un abanico de herramientas que nos ayudarán a conseguir un software de alta calidad. •  Predictibilidad y control. Mediante el uso de plantillas, Team System puede soportar diferentes tipos de metodologías. Además de Microsoft Solution Framework (metodología soportada out-of-the-box por Team System), podremos contar con implementaciones realizadas por terceros de las metodologías más conocidas y contrastadas, como, por ejemplo, SCRUM, RUP, eXtreme Programming y un largo etcétera.
•  Gestión de proyecto. Team System nos permite gestionar el proyecto en base a la información registrada durante su elaboración. Los diferentes informes e indicadores que nos ofrece Team System pueden resultar muy útiles a la hora de tomar decisiones.

Todas estas funcionalidades hacen de Team System una excelente herramienta con la que poder aplicar alguna de las muchas metodologías soportadas al desarrollo de nuestros proyectos, de esta forma estaremos garantizando la calidad del proceso de desarrollo y, lo que es más importante, aumentando las posibilidades de éxito de nuestro proyecto.

Conclusiones Hoy en día nos es difícil concebir la elaboración de proyectos de software sin el uso de una metodología de desarrollo. Existen diversas metodologías que se adaptan a diferentes tipos de proyectos. Podremos diferenciar estas metodologías en dos grandes grupos: las metodologías tradicionales o formales, cuyo objetivo es planificar y documentar minuciosamente cada paso del proceso, y las metodologías ágiles, que priorizan la flexibilidad y agilidad por encima de la formalización de las diferentes etapas. Microsoft Team System es una herramienta, que -entre otras cosas- nos ayudará a aplicar una metodología en el desarrollo de software. Team System soporta por defecto dos metodologías de filosofía muy diferenciada: MSF para mejoras de Proceso CMMI y MSF para desarrollo ágil. Además, nos permitirá adaptar estas dos metodologías a las necesidades concretas de nuestra organización e incluso la creación de nuestras propias plantillas de proceso.

blog comments powered by Disqus
autor
referencias