De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

El desarrollo iterativo e incremental es cualquier combinación de diseño iterativo o método iterativo y modelo de construcción incremental para el desarrollo .

El uso del término comenzó en el desarrollo de software , con una combinación de larga data de los dos términos iterativo e incremental [1] que ha sido ampliamente sugerida para grandes esfuerzos de desarrollo. Por ejemplo, el DOD-STD-2167 [2] de 1985 menciona (en la sección 4.1.2): "Durante el desarrollo de software, más de una iteración del ciclo de desarrollo de software puede estar en progreso al mismo tiempo". y "Este proceso puede describirse como un enfoque de 'adquisición evolutiva' o 'construcción incremental'". En software, la relación entre iteraciones e incrementos está determinada por el proceso general de desarrollo de software .

Modelo de desarrollo iterativo

Resumen [ editar ]

Una versión simplificada de un ciclo de iteración típico en la gestión ágil de proyectos

La idea básica detrás de este método es desarrollar un sistema a través de ciclos repetidos (iterativos) y en porciones más pequeñas a la vez (incrementales), lo que permite a los desarrolladores de software aprovechar lo aprendido durante el desarrollo de partes o versiones anteriores del sistema. El aprendizaje proviene tanto del desarrollo como del uso del sistema, donde los posibles pasos clave en el proceso comienzan con una implementación simple de un subconjunto de los requisitos del software y mejoran iterativamente las versiones en evolución hasta que se implementa el sistema completo. En cada iteración , se realizan modificaciones de diseño y se agregan nuevas capacidades funcionales. [3]

El procedimiento en sí consta del paso de inicialización, el paso de iteración y la Lista de control del proyecto. El paso de inicialización crea una versión base del sistema. El objetivo de esta implementación inicial es crear un producto al que el usuario pueda reaccionar. Debe ofrecer una muestra de los aspectos clave del problema y proporcionar una solución que sea lo suficientemente simple para comprender e implementar fácilmente. Para guiar el proceso de iteración, se crea una lista de control del proyecto que contiene un registro de todas las tareas que deben realizarse. Incluye elementos como nuevas funciones a implementar y áreas de rediseño de la solución existente. La lista de control se revisa constantemente como resultado de la fase de análisis.

La iteración implica el rediseño y la implementación de la iteración para que sea simple, directa y modular, apoyando el rediseño en esa etapa o como una tarea agregada a la lista de control del proyecto. [ aclaración necesaria ] El nivel de detalle del diseño no lo dicta el enfoque iterativo. En un proyecto iterativo ligero, el código puede representar la principal fuente de documentación del sistema; sin embargo, en un proyecto iterativo crítico se puede utilizar un documento de diseño de software formal . El análisis de una iteración se basa en los comentarios de los usuarios y las funciones de análisis del programa disponibles. Implica análisis de la estructura, modularidad, usabilidad., confiabilidad, eficiencia y logro de metas. La lista de control del proyecto se modifica a la luz de los resultados del análisis.

Desarrollo iterativo.

Fases [ editar ]

El desarrollo incremental divide la funcionalidad del sistema en incrementos (porciones). En cada incremento, se entrega una porción de funcionalidad a través del trabajo multidisciplinario , desde los requisitos hasta la implementación . El Proceso Unificado agrupa los incrementos / iteraciones en fases: inicio, elaboración, construcción y transición.

  • Inception identifica el alcance del proyecto, los requisitos (funcionales y no funcionales) y los riesgos a un alto nivel, pero con suficiente detalle para que se pueda estimar el trabajo.
  • La elaboración ofrece una arquitectura funcional que mitiga los principales riesgos y cumple los requisitos no funcionales.
  • La construcción completa gradualmente la arquitectura con código listo para producción producido a partir del análisis, diseño, implementación y prueba de los requisitos funcionales.
  • La transición entrega el sistema al entorno operativo de producción.

Cada una de las fases se puede dividir en 1 o más iteraciones, que generalmente están encuadradas en el tiempo en lugar de en las características. Los arquitectos y analistas trabajan una iteración por delante de los desarrolladores y evaluadores para mantener completa su acumulación de productos de trabajo.

Uso / Historial [ editar ]

Se proporcionan muchos ejemplos de uso temprano en el artículo de Craig Larman y Victor Basili "Desarrollo iterativo e incremental: una breve historia", [4] siendo uno de los primeros el Proyecto Mercury de la década de 1960 de la NASA .

Algunos de esos ingenieros de Mercury más tarde formaron una nueva división dentro de IBM , donde "otro ejemplo temprano y sorprendente de un gran éxito de IID [fue] el corazón del software del transbordador espacial de la NASA, el sistema principal de software de aviónica, que [ellos] construyeron en 1977 hasta 1980. El equipo aplicó IID en una serie de 17 iteraciones durante 31 meses, con un promedio de ocho semanas por iteración. Su motivación para evitar el ciclo de vida en cascada fue que los requisitos del programa de transporte cambiaron durante el proceso de desarrollo del software ". [4]

Algunas organizaciones, como el Departamento de Defensa de EE. UU., Tienen preferencia por las metodologías iterativas, comenzando con MIL-STD-498 "alentando claramente la adquisición evolutiva y el IID".

La Instrucción DoD 5000.2 publicada en 2000 declaró una clara preferencia por IID:

Hay dos enfoques, evolutivo y de un solo paso [cascada], para lograr la máxima capacidad. Se prefiere un enfoque evolutivo. ... [En este] enfoque, la capacidad final entregada al usuario se divide en dos o más bloques, con incrementos crecientes de capacidad ... el desarrollo de software seguirá un proceso de desarrollo en espiral iterativo en el que las versiones de software en continua expansión se basan en el aprendizaje de desarrollo anterior. También se puede realizar por fases.

Las revisiones recientes de DoDI 5000.02 ya no se refieren al "desarrollo en espiral", pero abogan por el enfoque general como base para los programas de desarrollo / adquisición intensivos en software. [5] Además, la Agencia de los Estados Unidos para el Desarrollo Internacional (USAID) también emplea un enfoque de desarrollo iterativo e incremental en su ciclo de programación para diseñar, monitorear, evaluar, aprender y adaptar proyectos de desarrollo internacional con un enfoque de gestión de proyectos que se centra en incorporar estrategias de colaboración, aprendizaje y adaptación para iterar y adaptar la programación. [6]

Contraste con el desarrollo de Waterfall [ editar ]

La principal causa del fracaso de los proyectos de desarrollo de software es la elección del modelo, por lo que debe hacerse con mucho cuidado. [ vago ] [7]

Por ejemplo, el paradigma de desarrollo Waterfall completa los productos de trabajo de todo el proyecto de cada disciplina en un paso antes de pasar a la siguiente disciplina en un paso siguiente. El valor comercial se entrega de una vez, y solo al final del proyecto, mientras que retroceder [ aclaración necesaria ] es posible en un enfoque iterativo. Al comparar los dos enfoques, comienzan a surgir algunos patrones: [ cita requerida ]

  • Participación del usuario : en el modelo en cascada, el usuario está involucrado en dos etapas del modelo, es decir, requisitos y pruebas de aceptación, y posiblemente la creación de material educativo para el usuario. Mientras que en el modelo incremental, el cliente está involucrado en todas y cada una de las etapas.
  • Variabilidad : el software se entrega al usuario solo después de que se completa la etapa de construcción del ciclo de vida, para las pruebas de aceptación del usuario. Por otro lado, cada incremento se entrega al usuario y después de la aprobación del usuario, el desarrollador puede pasar al siguiente módulo.
  • Recursos humanos : en el modelo incremental se requiere potencialmente menos personal en comparación con el modelo en cascada.
  • Limitación de tiempo : un producto operativo se entrega después de meses, mientras que en el modelo incremental el producto se entrega al usuario en unas pocas semanas.
  • Tamaño del proyecto : el modelo de cascada no es adecuado para proyectos pequeños, mientras que el modelo incremental es adecuado para proyectos pequeños y grandes.

Directrices de implementación [ editar ]

Las pautas que impulsan la implementación y el análisis de software incluyen: [ cita requerida ]

  • Cualquier dificultad en el diseño, codificación y prueba de una modificación debe indicar la necesidad de rediseñar o volver a codificar.
  • Las modificaciones deben encajar fácilmente en módulos aislados y fáciles de encontrar. Si no es así, posiblemente sea necesario un rediseño.
  • Las modificaciones a las tablas deberían ser especialmente fáciles de realizar. Si alguna modificación de la tabla no se realiza rápida y fácilmente, se indica un rediseño.
  • Las modificaciones deberían ser más fáciles de hacer a medida que avanzan las iteraciones. Si no es así, existe un problema básico como un defecto de diseño o una proliferación de parches .
  • Normalmente, se debería permitir la existencia de parches solo para una o dos iteraciones. Pueden ser necesarios parches para evitar el rediseño durante una fase de implementación.
  • La implementación existente debe analizarse con frecuencia para determinar qué tan bien está a la altura de los objetivos del proyecto.
  • Las facilidades de análisis de programas deben usarse cuando estén disponibles para ayudar en el análisis de implementaciones parciales.
  • Se debe solicitar y analizar la reacción del usuario para detectar indicios de deficiencias en la implementación actual.

Uso en hardware y sistemas integrados [ editar ]

Si bien el término desarrollo iterativo e incremental se inició en la industria del software, muchos esfuerzos de desarrollo de hardware y software integrado utilizan técnicas iterativas e incrementales.

Se pueden ver ejemplos de esto en varias industrias. Un sector que recientemente se ha visto sustancialmente afectado por este cambio de mentalidad ha sido la industria de los lanzamientos espaciales , con nuevas fuerzas competitivas sustanciales en el trabajo provocadas por una innovación tecnológica más rápida y extensa que se aplica a la formación de empresas privadas que persiguen el lanzamiento espacial. Estas empresas, como SpaceX [8] y Rocket Lab , [9] ahora brindan servicios comerciales de lanzamiento orbital en la última década, algo que solo seis países habían hecho antes de una década [10].atrás. Nuevas innovaciones en enfoques de desarrollo de tecnología, precios y ofertas de servicios, incluida la capacidad que ha existido solo desde 2016 para volar al espacio en una etapa de refuerzo previamente volada (reutilizable), lo que reduce aún más el precio de obtener acceso al espacio. [11] [8]

SpaceX ha sido explícito sobre su esfuerzo por llevar prácticas de diseño iterativo a la industria espacial y utiliza la técnica en naves espaciales, vehículos de lanzamiento, electrónica y aviónica, y operaciones de hardware de vuelo operativo. [12]

A medida que la industria ha comenzado a cambiar, otros competidores de lanzamiento también están comenzando a cambiar sus prácticas de desarrollo a largo plazo con las agencias gubernamentales . Por ejemplo, el gran proveedor de servicios de lanzamiento de EE. UU . United Launch Alliance (ULA) comenzó en 2015 un proyecto de una década para reestructurar su negocio de lanzamiento, reduciendo dos vehículos de lanzamiento a uno, utilizando un enfoque iterativo e incremental para llegar a un modelo parcialmente reutilizable. y un sistema de lanzamiento de mucho menor costo durante la próxima década. [13]

Ver también [ editar ]

  • Gestión adaptativa
  • Desarrollo Ágil de Software
  • Integración continua
  • DevOps § Adopción incremental
  • Método de desarrollo de sistemas dinámicos
  • Proceso de desarrollo de software basado en objetivos
  • Diseño de interacción
  • Kaizen
  • Marco de soluciones de Microsoft
  • Análisis y diseño orientado a objetos
  • OpenUP / Básico
  • PDCA
  • Desarrollo rápido de aplicaciones
  • Libertad anticipada, la liberación a menudo

Notas [ editar ]

  1. ^ Larman, Craig (junio de 2003). "Desarrollo iterativo e incremental: una breve historia" (PDF) . Computadora . 36 (6): 47–56. doi : 10.1109 / MC.2003.1204375 . ISSN  0018-9162 . S2CID  9240477 . Estábamos haciendo un desarrollo incremental ya en 1957, en Los Ángeles, bajo la dirección de Bernie Dimsdale [en ServiceBureau Corporation de IBM]. Fue colega de John von Neumann, así que quizás lo aprendió allí, o lo asumió como algo totalmente natural. Recuerdo a Herb Jacobs (principalmente, aunque todos participamos) desarrollando una gran simulación para Motorola, donde la técnica utilizada fue, por lo que puedo decir ... '
  2. ^ DOD-STD-2167 Desarrollo de software de sistemas de defensa (4 de junio de 1985) en everyspec.com
  3. ^ Farcic, Viktor (21 de enero de 2014). "Modelos de desarrollo de software: desarrollo iterativo e incremental" . Conversaciones de tecnología .
  4. ^ a b Desarrollo iterativo e incremental: una breve historia , Craig Larman y Victor Basili, IEEE Computer, junio de 2003
  5. ^ Kendall, Frank; Gilmore, J. Michael; Halvorsen, Terry (2 de febrero de 2017). "Funcionamiento del Sistema de Adquisición de Defensa" (PDF) . Emisiones del Departamento de Defensa . Subsecretario de Defensa de Adquisiciones, Tecnología y Logística. págs. 12-14. Archivado desde el original (PDF) el 9 de agosto de 2017 . Consultado el 9 de agosto de 2017 .
  6. ^ USAID. "Política operativa del ciclo de programa del capítulo 201 de ADS" . Consultado el 19 de abril de 2017
  7. ^ "Diferencia entre cascada y modelo incremental" . 19 de mayo de 2016.[ enlace muerto permanente ]
  8. ↑ a b Belfiore, Michael (9 de diciembre de 2013). "El Rocketeer" . Política exterior . Consultado el 11 de noviembre de 2018 .
  9. ^ "¡Vista interior exclusiva de la nueva Mega Fábrica previamente secreta de Rocket Lab!" . Astronauta de todos los días . 11 de octubre de 2018 . Consultado el 11 de noviembre de 2018 .
  10. ^ Clark, Stephen (28 de septiembre de 2008). "Dulce éxito por fin para Falcon 1 Rocket" . Vuelo espacial ahora . Consultado el 11 de noviembre de 2018 . el primer cohete de combustible líquido desarrollado de forma privada que alcanzó la órbita con éxito.
  11. Berger, Eric (25 de junio de 2018). "El cohete Proton de Rusia, que es anterior al Apolo, finalmente dejará de volar. Problemas técnicos, el aumento de SpaceX son factores que contribuyen" . arsTechica . Consultado el 26 de junio de 2018 . El rápido aumento de alternativas de bajo costo, como el cohete Falcon 9 de SpaceX, ha provocado que el número de lanzamientos de Proton en un año determinado disminuya de ocho a solo uno o dos.
  12. ^ Fernholz, Tim (21 de octubre de 2014). "Lo que necesitó SpaceX de Elon Musk para interrumpir a Boeing, superar a la NASA y convertirse en una empresa espacial seria" . Cuarzo . Consultado el 11 de noviembre de 2018 . Pero SpaceX siempre se consideró una empresa de tecnología, y sus enfrentamientos con la NASA a menudo tomaban una forma que los desarrolladores de computadoras, o cualquier persona familiarizada con el problemático despliegue de healthcare.gov, reconocerían como generacionales. SpaceX siguió un proceso de diseño iterativo, mejorando continuamente los prototipos en respuesta a las pruebas. La gestión de productos tradicional requiere un plan sólido ejecutado hasta su finalización, una receta para sobrecostos.
  13. Gruss, Mike (24 de abril de 2015). "Evolución de un plan: los ejecutivos de ULA explican la lógica detrás de las opciones de diseño de Vulcan" . Noticias espaciales . Consultado el 25 de abril de 2015 . El anuncio de ULA del 13 de abril de que desarrollaría un cohete denominado Vulcan utilizando un enfoque incremental cuya primera iteración es esencialmente un Atlas 5 equipado con una nueva primera etapa.

Referencias [ editar ]

  • Dr. Alistair Cockburn (mayo de 2008). "Uso de desarrollo incremental e iterativo" (PDF) . STSC CrossTalk . Centro de soporte de tecnología de software de la USAF . 21 (5): 27–30. ISSN  2160-1593 . Archivado desde el original (PDF) el 26 de mayo de 2012 . Consultado el 20 de julio de 2011 .
  • Craig Larman, Victor R. Basili (junio de 2003). "Desarrollo iterativo e incremental: una breve historia" (PDF) . Computadora IEEE . Sociedad de Informática IEEE. 36 (6): 47–56. doi : 10.1109 / MC.2003.1204375 . ISSN  0018-9162 . S2CID  9240477 . Consultado el 10 de enero de 2009 .