Este artículo es el primero de una saga de artículos que se van a publicar referentes a la metodología para el desarrollo de software.
Ante todo debemos tener claro por qué hay que usar una metodología. Aunque no seamos conscientes de ello, en muchas de las actividades que realizamos habitualmente, como planificar unas vacaciones, estamos usando una metodología, y en cuanto se siguen los pasos predefinidos, todo se controla mejor y la complejidad se simplifica, como resultado las vacaciones son inolvidables. El desarrollo del software es como planificar nuestras vacaciones y se necesita del uso de una metodología para que la elaboración y el producto final se acerquen a la perfección.
En muchos de los proyectos se trabaja realizando la definición del producto final sobre la marcha, sin una planificación inicial, sin elaborar ningún tipo de documentación, y a pesar de acabar mejor o peor, antes o después, al final del proyecto la sensación general es que no se ha seguido ninguna metodología de trabajo, y que se debería adoptar una cuanto antes para no volver a encontrarse en la misma situación.
Deberíamos estar ya convencidos de que necesitamos una metodología para desarrollar software, y ya somos capaces de intuir qué nos aporta exactamente su utilización:
· Mejor definición del producto a desarrollar.
· Organización, planificación y gestión del proyecto.
· Elaboración de la documentación imprescindible para desarrolladores y clientes.
· Software de mayor calidad.
· Ofrecer un patrón común a todos los desarrollos de software.
A continuación nos vamos a plantear una situación no poco habitual, nos hemos dado cuenta de que necesitamos mejorar la calidad de nuestro desarrollo de software y para ello queremos definir e implantar una metodología en nuestra organización.
Antes de iniciar este ejercicio debemos analizar situaciones existentes en los proyectos y en las organizaciones, tales como el ciclo de vida del software, las metodologías actuales y las certificaciones de calidad.
Ciclo de Vida del Software
En nuestra Metodología tendremos que atender correctamente cada una de las fases de un proyecto, lo que se conoce como ciclo de vida del software, a continuación se muestran las fases de desarrollo de software que trataremos:
· Definición
· Planificación
· Desarrollo
· Estabilización
· Despliegue
Existen múltiples escenarios en cuanto a ciclos de vida de software, y el uso de la metodología va ligado directamente al que escojamos para desarrollarlo.
Antes de empezar un desarrollo de software es interesante determinar qué ciclo de vida adoptar y éste viene determinado por la complejidad del proyecto, para proyectos sencillos se usan modelos en cascada, para proyectos intermedios se usan modelos incrementales, y para proyectos largos y complejos se usan modelos en espiral.
Modelo en Cascada
El modelo en Cascada es un enfoque metodológico que ordena rigurosamente las etapas del ciclo de vida, de forma que el inicio de cada etapa debe esperar al fin de la inmediatamente anterior. Este modelo es el más básico de todos los modelos y sirve de base de construcción para el resto.
Modelo Incremental
El modelo incremental enfoca un único análisis del software a desarrollar, y subdivide este en módulos con sus funcionalidades claramente definidas, y con la particularidad de que cada módulo que se desarrolla sigue el modelo en cascada. Según las dependencias entre módulos, cada uno engloba lo del anterior o no, y al final del desarrollo del último módulo se completa el software solicitado.
Modelo en Espiral
El modelo en espiral se basa en simplificar el desarrollo de sistemas complejos, de manera que iterativamente se van determinando los objetivos de la iteración, se analiza el riesgo que comportan, se desarrolla, se prueba, y finalmente se planifica la siguiente iteración, hasta realizar el software completo.
Metodologías existentes
Nos podemos encontrar con metodologías ágiles o formales, entre las ágiles destacan en la actualidad eXtreme Programming, SCRUM y MSF, y la metodología formal por excelencia es CMMI.
XP o Extreme Programming
Es la metodología más destacada de los procesos ágiles, sigue un modelo incremental y por tanto se diferencia de las metodologías tradicionales en que pone más énfasis en la adaptabilidad que en la previsibilidad. En esta metodología sus seguidores consideran que los cambios de requisitos sobre la marcha son un aspecto natural, inevitable e incluso deseable en los proyectos.
SCRUM
Aunque no es exactamente una metodología, es más bien una forma de gestionar un desarrollo, se puede considerar como tal y se complementa muy bien con eXtreme Programming. Se fundamenta en la autogestión de los equipos de manera que los propios programadores deciden cómo hacer sus tareas y cuánto van a tardar. Scrum ayuda a que trabajen juntos, en la misma dirección, con un objetivo claro. Hay un responsable del cliente que trabaja directamente con el equipo para que el producto final sea el requerido.
MSF o Microsoft Solution Framework
Esta metodología está impulsada por Microsoft y se apoya en herramientas como Team System que hacen mucho más llevadera la implantación de una metodología en un desarrollo. Esta combinación hace que sea una de las mejores para un gran rango de proyectos y de culturas de empresa. MSF es un compendio de las mejores prácticas en cuanto a administración de proyectos se refiere. Más que una metodología rígida de administración de proyectos, MSF es una serie de modelos que puede adaptarse a cualquier proyecto de tecnología de información
CMMI
Así como las metodologías vistas anteriormente se engloban dentro de las metodologías ágiles, ésta es una metodología formal, y su origen viene del departamento de defensa de Estados Unidos. Es un modelo de calidad del software que clasifica las empresas en niveles de madurez, y sirven para conocer la madurez de los procesos que se realizan para producir software. Está orientada a asegurar que se produce software de calidad.
Certificación de Calidad
Para complicar más la implantación de nuestra metodología, nos podemos encontrar que nuestra organización posee una Certificación de Calidad, y que el proceso de desarrollo de software está incluido en dicha certificación. Por tanto esto nos obligará a cumplir estrictamente todos y cada uno de los pasos definidos en el proceso, y a generar todos y cada uno de los documentos determinados en él.
En este caso debemos esforzarnos más en definir la Metodología, ya que ésta y la Certificación de Calidad deben ir estrechamente relacionadas, y no puede haber contradicciones entre sí, sino el conflicto entre ambas nos abocará a mayores esfuerzos de desarrollo y a una desorganización de los proyectos.
Conclusiones
Todo desarrollo de software tiene sus riesgos y es difícil de controlar, pero si no adoptamos una metodología, lo que obtenemos es clientes insatisfechos con el resultado y desarrolladores aún más insatisfechos durante el desarrollo.
Si perseguimos implantar una metodología en nuestra empresa el objetivo es adoptar una metodología que se pueda adaptar fácilmente a nuestro ciclo de vida de desarrollo de software.
Si en nuestra organización existe una Certificación de Calidad, el objetivo adicional es adaptarse a la definición del proceso de desarrollo del software y mejorar continuamente la definición del proceso para que con el tiempo sean totalmente compatibles y eficaces.
En este artículo hemos realizado una introducción a la Metodología, y hemos propuesto implantar una Metodología Propia en nuestra Organización, teniendo en cuenta que posee un proceso de desarrollo de aplicaciones claramente definido en su Certificación de Calidad.
En próximos artículos explicaremos cómo implantar nuestra Metodología en cada una de las fases que hemos establecido en nuestro ciclo de vida de software: definición, planificación, desarrollo, estabilización y despliegue.
Josep María Salabert