Existen diferentes maneras de llevar a cabo las actividades del ciclo de vida, estas estrategias de construcción se denominan metodologías.
Fruto de las visiones predictiva y adaptativa han surgido multitud de metodologías para llevar a cabo las actividades del ciclo de vida del software. Cada metodología implementa el proceso de construcción de software prescribiendo un conjunto de roles, actividades y artefactos:
Roles. Responden al “quién”. Una persona puede desempeñar diversos roles, así como un mismo rol puede ser interpretado por varias personas. Un rol lleva a cabo un conjunto de actividades y es “dueño” de un conjunto de artefactos. Por ejemplo, “arquitecto”, “programador” o “tester” son roles.
Tareas. Responden al “cómo”. Las tareas tienen un objetivo concreto, normalmente expresado en términos de crear o actualizar algún artefacto. Por ejemplo, la “gestión de los requisitos” o la “integración del producto” son tareas.
Artefactos. Responden al “qué”. Es un trozo de información que es producido, modificado o usado por un proceso. Los artefactos o entregables son los resultados tangibles del proyecto. Por ejemplo, la “matriz de requerimientos” o la “hoja de riesgos” son artefactos.
Podemos agrupar las diferentes metodologías en:
En cascada. El proyecto discurre en fases secuenciales (unas tareas detrás de otras). Los requisitos son fijados al inicio.
Iterativa. Los requisitos son dinámicos y las tareas se repiten hasta la corrección de los prototipos. El producto es mejorado gracias a las demostraciones de funcionamiento de los prototipos interactivos o pruebas de concepto.
Incremental. El proyecto se basa en varios desarrollos incrementales. Solo se planificaría la primera fase, pues las siguientes se van definiendo conforme avanzan los trabajos de la fase actual. El cliente recibe frecuentes entregas de pequeñas versiones del producto.
Ágil. Son proyectos donde no se conoce el alcance y se desarrollan pequeñas porciones del proyecto marcadas por los sprints, al final de las cuales el cliente puede ver lo que se ha desarrollado. Su objetivo es entregar valor de forma frecuente a los clientes.
Ejemplo de metodologías predictivas (en cascada) es la ISO 12207 y su versión española Métrica v3. Por el contrario, Scrum o Kanban son ejemplos de metodologías adaptativas (ágiles). Cabe señalar que Métrica v3 permite diferentes estrategias de implantación: en cascada, por versiones, con prototipos o de ciclo iterativo.
Existen también metodologías a medio camino entre ambos extremos como RUP (implementación de IBM del Proceso Unificado).
El Proceso Unificado (UP) nace en 1999, intentando adaptarse a las peculiaridades de la industria del software dentro de la visión predictiva.
Así, la implementación más conocida del Proceso Unificado, Rational Unified Process (RUP), permite y acepta el solapamiento entre fases (requisitos, diseño, codificación, pruebas). El valor de negocio es desarrollado incrementalmente en iteraciones de duración determinada e interdisciplinares:
RUP es un modelo en fases que identifica cuatro fases (divididas en iteraciones) en el proceso software. Las fases son:
Fase de inicio (Inception). Esta fase tiene como propósito definir y acordar el alcance del proyecto con los patrocinadores (clientes o negocio), identificar los riesgos asociados al proyecto, proponer una visión muy general de la arquitectura de software y producir el plan de las fases y el de iteraciones posteriores.
Fase de elaboración (Elaboration). En la fase de elaboración se seleccionan los casos de uso (requisitos) que permiten definir la arquitectura base del sistema. Se realiza la especificación de los casos de uso seleccionados y el primer análisis del dominio del problema, se diseña la solución preliminar.
Fase de desarrollo (Construction). El propósito de esta fase es completar la funcionalidad del sistema, para ello se deben clarificar los requisitos pendientes y administrar los cambios de acuerdo a las evaluaciones realizadas por los usuarios.
Fase de transición (Transition). El objetivo de esta fase es asegurar que el software esté disponible para los usuarios finales, ajustar los errores y defectos encontrados en las pruebas de aceptación, formar a los usuarios y dar el soporte técnico necesario. Se debe verificar que el producto cumpla con las especificaciones entregadas por las personas involucradas en el proyecto.
Dentro de la filosofía “ágil” es posible identificar una serie de metodologías de trabajo para el desarrollo de software. La más extendida de todas ellas es Scrum.
En 1995 Sutherland y Schwaber presentaron el paper “Scrum methodology” donde recogían los fundamentos de Scrum. Tras la publicación en 2001 del manifiesto ágil, Schwaber escribió el libro “Agile Software Development with Scrum” en el que se describe lo que hoy en día es Scrum.
Scrum prescribe únicamente tres roles:
Product owner. Es la voz del cliente. Debe asegurarse que el equipo aporta valor al negocio. El product owner debe centrarse en el aspecto de negocio del proyecto y por tanto pasar la mayor parte del tiempo actuando de intermediario entre el equipo y el cliente.
Equipo Scrum. Es el responsable de entregar al final de cada sprint el desarrollo incremental previsto. El equipo scrum consta de entre tres y nueve personas para ser eficiente. Esto incluye a quienes se encargan de analizar, diseñar, desarrollar, probar, documentar, etc.
Scrum Master. El Scrum es facilitado por un Scrum Master, cuyo trabajo primario es eliminar los obstáculos que impiden que el equipo alcance el objetivo del sprint. El Scrum Master es el que hace que las reglas se cumplan.
El proceso Scrum es iterativo, a cada iteración se la conoce como sprint. El sprint es un esfuerzo temporal finito (típicamente dos semanas). Cada Sprint comienza con una reunión de planificación del sprint (planning meeting) en el que se define el backlog, que es un conjunto de requisitos (historias de usuario) priorizados de alto nivel que definen el trabajo a realizar. Durante esta reunión, el product owner identifica los elementos del Product Backlog que quiere ver completados. El equipo aclara con el Product Owner el alcance de la funcionalidad a implementar durante el Sprint. Las historias de usuario que entran en el sprint quedan “congeladas”, no pueden modificarse.
Durante el desarrollo del Sprint se hacen reuniones diarias denominadas Daily o Stand-up meeting donde de manera muy breve el equipo intercambia opiniones sobre el estado del proyecto.
Al finalizar un Sprint se realizan dos reuniones: la “demostración”, donde el equipo muestra al product owner y a otros stakeholders (participantes) el software en funcionamiento y la “retrospectiva”, donde todos los miembros del equipo exponen sus impresiones sobre el sprint.
Existen modelos para la mejora y evaluación del proceso de construcción de software implantado en una organización o empresa. Los modelos de evaluación más conocidos son CMMI e ISO 15504 (SPICE). Es posible con estos modelos evaluar tanto metodologías predictivas como adaptativas.
CMMI. Una organización o empresa es evaluada y recibe por calificación un determinado nivel de Madurez según los criterios fijados por el modelo “Capability Maturity Model Integration” (CMMI). La empresa puede ser calificada con diferentes niveles de madurez en diferentes Áreas de Proceso.
ISO 155404. La norma ISO 15504 también conocida como Software Process Improvement Capability Determination (SPICE), en español “Determinación de la Capacidad de Mejora del Proceso de Software”, es una norma internacional para evaluar los procesos de las organizaciones. La ISO 15504 es un “framework” para evaluar de manera general cualquier modelo de procesos (sea relativo a la construcción de software o no). La norma establece los requisitos mínimos para realizar una evaluación de mejora de procesos. Califica los procesos en seis niveles de madurez.
Metodologías rígidas como el Proceso Unificado han asumido los valores del manifiesto ágil. Entonces, ¿Cuál es la diferencia entre las metodologías predictivas y las adaptativas?
💬 Sólo ha habido dos ocasiones en que gente se uniese para discutir qué es el desarrollo software y qué hace que funcione, la primera en 1968 (conferencia de la OTAN) y la otra en 2001. Las conferencias del 1968 y 1969 fueron un desastre para la historia y nos enviaron por el camino equivocado durante 30 años. El manifiesto ágil del 2001 hizo un trabajo mucho mejor diciendo lo que funciona y por qué, en pocas palabras. Piensa en el Manifiesto Ágil diciendo: “podría haber 200 cosas importantes a las que prestar atención a un proyecto, es decir demasiadas. Aquí están las 4 cosas a tener en mente a medida que avance, aquí hay otras 12 cosas a mirar”. Si lo ven de esta manera, el manifiesto tiene mucho sentido, pero también deja muchas opciones abiertas a otras formas de trabajar.
Alistair Cockburn, firmante del Manifiesto Ágil
Las metodologías predictivas son más prescriptivas y rígidas que las metodologías ágiles. Una muestra de ello es la cantidad de artefactos contemplados por RUP: Documento de visión, Diagramas de casos de uso, especificaciones de requisitos, Diagramas de requisitos, diagramas de clases, modelo entidad-relación, etc.
Exigir menos artefactos y entregables, no implica necesariamente menor rigurosidad o calidad. Por el contrario, la exigencia de las metodologías ágiles de entregar “software funcionando”, implica un fuerte compromiso del equipo de desarrollo del producto con la calidad. En las metodologías ágiles la calidad del producto software no descansa necesariamente en la cantidad de artefactos o en el “grosor” de los documentos generados sino en el software corriendo en producción.
Frameworks ágiles como Scrum únicamente prescriben tres roles (Scrum Master, Product Owner y Equipo de Desarrollo), cuatro actividades (Dailys, Planning meetings, Demos y Retros) y apenas tres entregables: diagrama de burndown, el backlog y, por supuesto, software desplegado y funcionando.
A pesar de que la visión adaptativa está ampliamente implantada en la industria del software, existen excepciones a tener en cuenta. Dependiendo del tipo de software que se desea construir puede resultar adecuado utilizar metodologías con un punto de vista más predictivo. Por ejemplo, en el caso de construir un software fuertemente acoplado a otros productos industriales o a dispositivos hardware, como software embebido para equipamiento médico o software de trazabilidad de una línea de producción industrial o software controlador de un avión, pueden resultar adecuados los procesos de gestión predictiva. En estos casos, las características que hacen única a la industria del software se ven atenuadas:
Maleabilidad del producto. La capacidad del software para ofrecer nuevas funcionalidades (extensibilidad) queda estrechamente ligada a la capacidad evolutiva de los dispositivos físicos al que el software va unido. El software de control de un avión no puede monitorizar un tercer o cuarto motor sin que estos se añadan físicamente. No es posible que el software de trazabilidad de una línea de producción capture el grosor de una tuerca sin que previamente se haya instalado el correspondiente sensor. La capacidad del software para implementar nuevas funcionalidades no resulta tan efectiva en estos casos al verse fuertemente restringida al producto físico en el que el software se embebe.
Factor de escala del producto. Instalar un nuevo software controlador de un equipamiento médico o de un avión o de una línea de producción requiere construir un nuevo equipo médico o un nuevo avión o una nueva línea de producción. El factor de escala del producto software no ofrece valor al “acoplarse” el software al producto físico.
En estas circunstancias el principal valor que se espera de la metodología de construcción es la correcta planificación, el software es solo uno más de los elementos del producto final. Es imprescindible cumplir los hitos de entrega para coordinar el “ensamblaje” del software con el hardware o dispositivos físicos con los que debe comunicarse. Asimismo, en estos escenarios los procesos del negocio a los que el software debe dar solución han sido muy detallados debido a la necesidad de la industria “manufacturera” de definir el producto físico al que se acoplará el software. No es necesario “descubrir” el producto software, los requisitos vendrán impuestos por el producto físico, las especificaciones del software pueden “recogerse al dictado”.
Referencias:
• K.Beck; "Extreme Programming Explained", Addison-Wesley Professional, 1999
• F.Brooks; "The Mythical Man-Month: Essays on Software Engineering", Addison-Wesley, 1975
• R.C. Martin "Arquitectura Limpia", Anaya, 2018
• J. Palacio; "Flexibilidad con Scrum", 2008.
• H. Kniberg; "SCRUM y XP desde las trincheras", InfoQ, 2007
• R.Jeffries; "The Nature of Software Development", Pragmatic Bookshelf, 2015
• I. Sommerville; “Ingeniería del Software”, Addison Wesley, 2005
• R. Pressman; “Ingeniería del Software: Un enfoque práctico”; McGraw-Hill, 2005.
• B. W. Boehm, "Software Engineering Economics", Prentice Hall,1981
• L. Artola, “Software Economics”, LeanPub, 2020
• T. Winters y H. Wright, “Software Engineering at Google”, O’Reilly, 2020
• J.Garzas; https://www.javiergarzas.com/