M o d e lo d e Pr o c e s o d e S o f t w a r e I t e r a t iv o
Sigma
ADSI E d i to r i a l S i g m a D i g i ta l Vol. 1 Mayo,2014
Con ten ido Pag.
Procesos de software
3
Proceso de software en la organizacion
5
Modelo de proceso de software
6
Clasificacion de los modelos de proceso de software
7
Modelo de desarrollo iterativo
7
El ciclo de vida del modelo de desarrollo iterativo
8
Generalidades del modelo de desarrollo iterativo
9
MetodologĂas y el desarrollo iterativo
12
Ventajas de este tipo de modelo
13
Modelos de proceso iterativo e incremental
14
Referencias
17
Bach illeres Espin oza, Jorge Farias, Fabian a RodrĂguez, Carlos
Introducción a los Procesos de Software Un proceso de desarrollo de software es un conjunto de personas, estructuras de organización, reglas, políticas, actividades y sus procedimientos, componentes de software, metodologías, y herramientas utilizadas o creadas específicamente para definir, desarrollar, ofrecer un servicio, innovar y extender un producto de software. El objetivo de un proceso de desarrollo de software es la creación eficiente y eficaz de productos de software que cumplan con los requisitos establecidos por el cliente.
El proceso de desarrollo de software no es único. No existe un proceso de software universal que sea efectivo para todos los contextos de proyectos de desarrollo. Debido a esta diversidad, es difícil automatizar todo un proceso de desarrollo de software. A pesar de la variedad de propuestas de proceso de software, existe un conjunto de actividades fundamentales que se encuentran presentes en todos ellos. • Especificación de software: Se debe definir la funcionalidad y restricciones operacionales que debe cumplir el software. • Diseño e Implementación: Se diseña y construye el software de acuerdo a la especificación. • Validación: El software debe validarse, para asegurar que cumpla con lo que quiere el cliente. • Evolución: El software debe evolucionar, para adaptarse a las necesidades del cliente.
3
• Es complejo • No es un proceso de producción típico • Tampoco es un proceso de ingeniería “pura” • No es (completamente) un proceso creativo • Está basado en descubrimientos que dependen de la comunicación, coordinación y cooperación dentro de marcos de trabajo predefinidos
Elementos Relacionados con el Proceso Software (Fuggetta, 2000) • Tecnología de Desarrollo Software, soporte tecnológico, en forma de herramientas, infraestructuras y entornos. • Métodos y Técnicas de Desarrollo Software, uso de la tecnología y realización de las actividades. • Comportamiento Organizacional, relacionado con los recursos humanos. • Economía y Marketing, relacionado con la gestión de proyectos, debido a que el producto software final debe cumplir con unos plazos y costes determinados y debe satisfacer las necesidades del cliente al que va destinado
4
Procesos de Software en la Organización. En un mundo de cambios constantes y competencia global, las organizaciones de desarrollo de software son presionadas a alcanzar mayor eficiencia con menores costos. Para poder lograr este objetivo, es necesario adoptar una forma de trabajo que permita entender, controlar, comunicar, mejorar, predecir y certificar el trabajo realizado.
Actualmente existe una gran diversidad de opciones relacionadas con procesos de desarrollo. Constantemente se escuchan diferentes acrónimos como CMM, CMMI, RUP, ISO, PSP, TSP, etc., que causan confusión, principalmente debido a la mala interpretación de los mismos.
¿Por qué contar con un proceso de software? Hasta hace poco tiempo, la producción de software era realizada con un enfoque artístico, a diferencia de un enfoque industrial. Ante la constante presencia de proyectos fallidos, y con el objetivo de mejorar la calidad de los productos, en los últimos años las organizaciones introdujeron los métodos de ingeniería de software. A partir de estos, se formalizó el enfoque de ingeniería de producto para desarrollar software. Factores como la globalización han obligado a las organizaciones a contar con marcos de trabajo que las ayuden hacer las cosas de la manera más eficiente.
5
Fue entonces que se incorporó la ingeniería de procesos al desarrollo de software.
• Habilita a la organización a incrementar su productividad al desarrollar software.
• Establece la base para una mayor
• Permite estandarizar esfuerzos, promover reuso, repetición y consistencia entre proyectos.
• Mejora los esfuerzos de mantenimiento y soporte.
• Provee la oportunidad de introducir mejores prácticas de la industria.
• Define cómo manejar los cambios y liberaciones a sistemas de software existentes.
• Permite entender que las herramientas deben ser utilizadas para soportar un proceso.
• Define cómo lograr la transición del software a la operación, y cómo ejecutar los esfuerzos de operación y soporte.
consistencia y mejoras futuras.
Los estándares establecen los diferentes procesos implicados a la hora de desarrollar y mantener un sistema desde que surge la idea o necesidad de desarrollar las aplicaciones hasta que éstas se retiran de explotación. Sin embargo, ninguno impone un modelo de procesos concreto (modelo de ciclo de vida) ni cómo realizar las diferentes actividades incluidas en cada proceso, por lo que cada empresa deberá utilizar los métodos, técnicas y herramientas que considere oportuno. Por su naturaleza, los modelos son simplificaciones; por lo tanto, un modelo de procesos del software es una simplificación o abstracción de un proceso real. Podemos definir un modelo de procesos del software como una representación abstracta de alto nivel de un proceso software. Cada modelo es una descripción de un proceso software que se presenta desde una perspectiva particular. Alternativamente, a veces se usan los términos ciclo de vida y Modelo de ciclo de vida.
6
Clasificación
de los Modelos de Proceso de Software Modelos Convencionales • Modelo en cascada • Modelo de proceso incremental • Modelo de desarrollo rápido de aplicaciones (DRA) • Modelos de procesos evolutivos • Modelos especificados de procesos • Modelo de desarrollo iterativos
El desarrollo iterativo es un enfoque de desarrollo de software que permite la convergencia de una solución con las metas deseadas a través de sucesivos perfeccionamientos a los requerimientos y los artefactos de desarrollo. El término iteración a menudo se usa de manera errónea como sinónimo de incremento. Si bien los enfoques iterativos se pueden usar con modelos de entregas incrementales, ambos términos no son sinónimos. En este artículo, nos referiremos a las iteraciones como ciclos de perfeccionamiento, y no necesariamente como incrementos entregables
7
El Ciclo de Vida del Modelo de Desarrollo Iterativo En el sentido en que se trata de un ciclo de perfeccionamiento, una iteración no necesariamente debe incluir todas las fases del proceso de desarrollo. Por ejemplo, es posible tener iteraciones específicas de las fases, como por ejemplo iteraciones de análisis o iteraciones de diseño. Como usted puede imaginar, esto puede llevar a una complejidad y una variabilidad considerables en el método de desarrollo iterativo. En el extremo superior de la gama de complejidad, se podría terminar con ciclos de perfeccionamiento dentro de otros ciclos de perfeccionamiento, cada uno de ellos con diferentes frecuencias de iteración. Por este motivo, resulta importante identificar el enfoque de desarrollo iterativo que mejor se adecue al tipo de solución de software,
tomando en cuenta las capacidades de las herramientas que se utilizan para el desarrollo. Los desarrolladores que utilizan esta técnica asumen, aceptan, y de hecho esperan que los productos que desarrollan no se terminen con una ronda. En lugar de tratar de prever todos los posibles problemas y necesidades de los usuarios, que se mueven a través de una serie de iteraciones para refinar y perfeccionar progresivamente el producto para que sea útil. Una ventaja importante de desarrollo iterativo es que permite a los desarrolladores responder rápidamente a los problemas y las necesidades cambiantes ya las reconstrucciones, restauraciones y mejoras se estructuran a la derecha en el proceso de desarrollo.
8
Generalidades del Modelo de Desarrollo Iterativo La liberación En la unión esta la fuerza
Este enfoque de desarrollo por lo general implica una estrecha colaboración entre los miembros del equipo, que pueden provenir de diversos departamentos dentro de una empresa. Al lograr que todos los involucrados en la planta baja, las empresas pueden reducir los costos de desarrollo, fomentar la innovación y el desarrollo de productos que integren múltiples perspectivas desde el principio. El desarrollo iterativo también requiere un gran esfuerzo de investigación y análisis como las personas responde a las presiones del mercado, las necesidades declaradas de los consumidores y clientes, y la retroalimentación interna sobre el producto en fase de desarrollo.
En el desarrollo iterativo, se empieza con la etapa de planificación de un proyecto, se mueve a través de estas etapas en el desarrollo y lanzamiento del producto. Cuando se libera el producto, los resultados vienen de pruebas de productos y usuarios, y estos resultados se doblan en la próxima versión. "Release" puede ser un término engañoso; el desarrollo iterativo puede implicar la liberación “in-house” de un producto en las etapas iniciales, no que lo suelte del producto al público.
Un Modelo Dinámico Este proceso es dinámico y puede ser muy rápido. Algunas empresas pueden tener ciclos tan cortos como una semana. Al inicio de cada ciclo, los desarrolladores se reúnen para identificar los cambios que desean poner en práctica y que se centran en estos cambios; como otras cuestiones surgen, que se pueden añadir a los ciclos de desarrollo posteriores. Esto fomenta el enfoque y la ayuda a las empresas a cumplir las expectativas con más facilidad; como los productos en el desarrollo iterativo empiezan a ser lanzado al público, los usuarios que están probando los productos pueden seguir los cambios planificados y pueden informar de problemas y estar seguros de que hay un período de tiempo determinado en el que se puedan abordar.
9
“Somos agiles, hacemos iteraciones” Esta frase podemos oírla a menudo de equipos y empresas que proclaman el uso de metodologías de desarrollo ágil, pero no siempre el valor de hacer iteraciones es bien entendido. A menudo, los procesos de desarrollo de la empresa son adaptados simplemente para seguir realizando exactamente el mismo modelo de proceso predictivo, manteniendo la planificación inicial en todo momento pero realizando la ejecución de forma iterativa.
Sin duda, la división de los procesos de desarrollo en ciclos cortos e iterativos es uno de los pilares del desarrollo ágil, pero para aportar autentico valor debe ir acompañado de mecanismos de feedback que nos permitan aprender de cada una de las iteraciones que realizamos y aplicar lo aprendido en las siguientes. A continuación trataremos de ilustrarlo. Durante la ejecución de un proyecto basado en una planificación predictiva y su posterior ejecución, a menudo observamos la siguiente gráfica.
¿Por qué se produce esto? Habitualmente, la depresión de la curva de valor viene dada porque la ejecución se realiza en función de la planificación original. En proyectos en que tenemos un contexto cambiante, cuanto más alejada en el tiempo se haya la ejecución de una tarea con respecto a cuándo se planificó, mayor es el gap entre el contexto actual en el que se tiene que ejecutar la tarea y el contexto previsto por la planificación. Es decir, las premisas en las que se basa la tarea a ejecutar (los requerimientos) y su encaje dentro de la solución global se hayan más lejanos del punto inicial de consenso / certeza, aumentando la complejidad de la tarea, lo que repercute directamente en las dimensiones de tiempo y coste de su ejecución.
10
¿Qué es entonces lo que hace que el desarrollo iterativo mejore la ejecución del proyecto? El feedback, y más allá de él en sí mismo, el aprendizaje derivado de dicho feedback. En los proyectos realizados de forma empírica (en los que se incluyen las metodologías agiles) requerimos estar constantemente evaluando el contexto en el que nos encontramos, extrayendo conclusiones del mismo y tomando decisiones en función de las mismas. Es el aprendizaje obtenido de los diferentes ciclos de feedback y de su análisis, el que nos permite que se mantenga la alta entrega de valor a lo largo de toda la ejecución del proyecto.
11
Ya no nos encontramos ante un escenario conformado por ciclos de ejecución sobre una planificación inicial, sino por ciclos de planificación y ejecución. Las tareas a realizar cada ciclo son planificadas al inicio del mismo, basándose en el contexto actual del proyecto y el aprendizaje obtenido de las iteraciones anteriores, reduciendo al máximo el gap comprendido entre planificación y ejecución y los efectos del mismo comentados anteriormente.
Si echamos un vistazo a las diferentes metodologías de desarrollo ágil, todas ellas enfatizan la necesidad de introducir visibilidad y transparencia a todos los niveles del proyecto. Ello no radica simplemente en un deseo de aportar transparencia por el mero hecho de hacerlo, si no en la necesidad de disponer de toda la información sobre la ejecución del proyecto y su estado actual, retroalimentarnos de la misma, analizarla y extraer conocimiento de ella. Es este un requisito fundamental para, en conjunción con el desarrollo iterativo, conseguir el objetivo final del proyecto: maximizar el ROI entregado, no únicamente al final del mismo sino también durante su ejecución.
Metodologías y el Desarrollo Iterativo Existen varias metodologías que pueden utilizarse en el desarrollo iterativo. Entre ellas podemos destacar el “Unified Process” y su variante el “Rational Unified Process”, que son estándares actuales a nivel internacional. Un modelo iterativo nuevo que ha surgido con fuerza últimamente es el “Extreme Programming (XP)”. Cabe mencionar también el modelo llamado “Feature Driven Development”. Como ya sabemos los modelos iterativos se basan en dividir el proyecto de desarrollo en varias .
etapas, llamadas iteraciones. Las iteraciones son cortas (unas cuantas semanas, excepto en proyectos enormes) y su duración es fija (no puede alargarse: si hay retrasos, estos se incluyen en otra iteración). La idea central es que, en cada una de esas iteraciones, se construye una parte pequeña del sistema. Para esa parte del sistema, se realiza todo el proceso: análisis, diseño, programación y pruebas. Se acaba la iteración con un ejecutable que incluye todas las partes del sistema construidas hasta el momento. Los aspectos del sistema con más riesgo (por ejemplo, la arquitectura) se construyen en las primeras iteraciones.
12
Las ventajas de este tipo de modelo son las siguientes: 1. Flexibilidad. Los requerimientos no quedan totalmente fijados hasta el final del proyecto de desarrollo. Por ello, se pueden realizar cambios de forma flexible. Por una parte, el conocimiento que se adquiere en una iteración sirve para plantear de forma más realista los requerimientos de la siguiente. Por otra parte, este conocimiento nos puede hacer reformar partes del sistema construidas en iteraciones anteriores. En una palabra, todos los documentos del sistema (requerimientos, diseño y código) no son rígidos sino que pueden cambiarse durante todo el proceso de desarrollo. (Típicamente suelen ser modificados en mayor medida en las primeras iteraciones y en menor medida en las últimas). 2. Mitigación de riesgos. Como las pruebas se hacen desde el principio del proyecto, puede determinarse la
viabilidad o eficiencia de las decisiones de diseño. Además, los elementos con más riesgo se tratan en las primeras iteraciones, con lo cual se puede implementar una mitigación de riesgos más temprana y exitosa. 3. Retroalimentación. Como hay ejecutables desde el mismo comienzo del proyecto, el cliente puede examinarlos y proponer los cambios que necesita para su negocio. También los desarrolladores tienen una rápida retroalimentación de lo que funciona y lo que no, ya que las pruebas se realizan desde el comienzo mismo del proyecto y no se debe esperar al final para hacer las modificaciones necesarias. Como consecuencia, un modelo de desarrollo iterativo es condición necesaria (aunque no suficiente) para la correcta ejecución de un proceso de desarrollo de software.
Caso practico La mejora iterativa fue exitosamente aplicada al desarrollo de una familia extensa de compiladores para una familia de lenguajes de programación en una gama de arquitecturas de hardware. Un conjunto de 17 versiones del sistema se desarrollaron en un lugar, generando 17 mil líneas de código fuente de lenguaje de alto nivel (6500 de código ejecutable). El sistema posteriormente fue desarrollado en dos sitios diferentes, llegando a dos versiones diferentes del lenguaje base: una versión esencialmente se enfocaba en aplicaciones matemáticas, añadiendo números reales y varias funciones matemáticas, y la otra se centró en añadir capacidades para escribir del compilador.
13
Cada iteración fue analizada del punto de vista de los usuarios (las capacidades del lenguaje fueron determinadas en parte por las necesidades del usuario) y el punto de vista del desarrollador (el diseño del compilador evolucionó para ser más fácilmente modificable, por ejemplo, para añadir nuevos tipos de datos). Mediciones tales como acoplamiento y modularización fueron seguidas sobre múltiples versiones.
Modelos de Proceso Iterativo e Incremental La principal característica de estos modelos es que permite crear cada vez versiones más completas de software, para esto construimos versiones sucesivas de un producto. Se crea una primera versión que es utilizada por el usuario donde se provee retroalimentación al desarrollador, y según los requerimientos especificados de éste usuario se crea una segunda versión.
El ciclo de vida incremental Desarrollar por partes el producto software, para después integrarlas a medida que se completan. Un ejemplo de un desarrollo puramente incremental puede ser la agregación de módulos en diferentes fases. El agregar cada vez más funcionalidad al sistema.
El ciclo de vida iterativo En cada ciclo, iteración, se revisa y mejora el producto. Un ejemplo de desarrollo iterativo es aquel basado en refactorizaciones, en el que cada ciclo mejora más la calidad del producto. Es importante señalar que este ciclo no implica añadir funcionalidades en el producto, pero si revisión y mejora.
14
No olvides “la parte iterativa”, del “ciclo de vida iterativo e incremental” De la unión del ciclo de vida iterativo y el incremental al final de cada iteración se consigue una versión más estable del software, de más calidad, y añadiendo además nuevas funcionalidades respecto a versiones anteriores. Pero en la práctica, muchas veces nos encontramos con que los equipos olvidan la parte iterativa, olvidan que cada prototipo debe mejorar en calidad al anterior, y se centran solo en añadir funcionalidad. El problema de esto es que pasadas unas cuantas iteraciones, el producto se hace inmantenible, por su baja calidad, y por ello es muy difícil añadir nueva funcionalidad.
Ven tajas Las ventajas que ofrece un desarrollo iterativo e incremental son varias y variadas, pero debe quedar claro que es muy difícil obtener todas juntas ya que depende del contexto en el que se implemente el proceso. En general las ventajas son: • Resolución de problemas de alto riesgo en tiempos tempranos del proyecto. • Visión de avance en el desarrollo desde las etapas iniciales del desarrollo. • Obtención del feedback del usuario lo antes posible, para orientar el desarrollo al cumplimiento de sus necesidades y realizar todas las adaptaciones identificadas para cumplir con los objetivos planteados. • Menor tasa de fallo del proyecto, mejor productividad del equipo, y menor cantidad de defectos, según demuestran estudios realizados sobre proyectos que han aplicado esta técnica.
15
• Permite manejar la complejidad del proyecto, apuntando a la resolución de los problemas por partes, y no caer en la inanición del “súper análisis” del producto. • El aprendizaje y experiencia del equipo iteración tras iteración, mejora exponencialmente el trabajo, aumenta la productividad y permite optimizar el proceso en el corto plazo. • El trabajo iterativo deja una experiencia en el equipo que permite ir ajustando y mejorando las planificaciones, logrando menores desvíos en la duración total del proyecto. • Su adopción, con ciertos recaudos, no presenta grandes inversiones.
Hasta el momento se podrĂa decir que no existen grandes desventajas, pero sĂ hay puntos a manejar con sumo cuidado:
16
Referencias PROCESO DE SOFTWARE Disponible en: http://sg.com.mx/content/view/23 MODELOS DE DESARROLLO ITERATIVO Disponible en: http://www.aurumsol.com/espanol/articulos/art1/art1-4.html WHAT IS ITERATIVE DEVELOPMEN Disponible en: http://www.wisegeek.com/what-is-iterative-development.htm DESARROLLO ITERATIVO EN SOLUCIONES DE GESTION DE PROCESO DE NEGOCIOS Disponible en: http://www.ibm.com/developerworks/ssa/websphere/library/techarticles/1005_defreitas/1005_defrei tas.html DESARROLLO ITERATIVO Disponible en: http://blog.masterinprojectmanagement.net/desarrollo-iterativo/ EL CICLO DE VIDA ITERATIVO E INCREMENTAL Y EL RIESGO DE OLVIDARSE DEL ITERATIVO Y QUEDARSE SOLO CON EL INCREMENTAL disponible en: http://www.javiergarzas.com/2012/10/iterativo-e-incremental.html MODELOS DE PROCESO ITERATIVOS E INCREMENTALES Disponible en: http://scruz334.blogspot.es/1193793960/modelos-de-proceso-iterativos-e-incrementales/
17