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.