Articulo de referencia

Desarrollo iterativo e incremental

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érm...

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 se ha sugerido ampliamente para grandes esfuerzos de desarrollo. Por ejemplo, la norma DOD-STD-2167 de 1985 [ 2 ] 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

Descripción general

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

La idea básica de este método es desarrollar un sistema mediante ciclos repetidos (iterativos) y en porciones más pequeñas (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, y, siempre que sea posible, los pasos clave del 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 funcionalidades. [ 3 ]

El procedimiento en sí consta de la etapa de inicialización, la etapa de iteración y la Lista de Control del Proyecto. La etapa de inicialización crea una versión base del sistema. El objetivo de esta implementación inicial es crear un producto con el que el usuario pueda interactuar. Debe ofrecer una muestra de los aspectos clave del problema y proporcionar una solución lo suficientemente sencilla como para comprenderla e implementarla fácilmente. Para guiar el proceso de iteración, se crea una lista de control del proyecto que registra todas las tareas que deben realizarse. Incluye elementos como nuevas funcionalidades 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.

Una iteración implica rediseño e implementación, que se conciben como simples, directas y modulares, permitiendo el rediseño en esa etapa o como una tarea futura añadida a la lista de control del proyecto. El nivel de detalle del diseño no viene determinado por el enfoque iterativo. En un proyecto iterativo ligero, el código puede ser 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 la retroalimentación del usuario y en las herramientas de análisis de programas disponibles. Incluye el análisis de la estructura, la modularidad, la usabilidad , la fiabilidad, la eficiencia y el logro de los objetivos. La lista de control del proyecto se modifica en función de los resultados del análisis.

desarrollo iterativo

Fases

El desarrollo incremental divide la funcionalidad del sistema en incrementos (partes). En cada incremento, se entrega una parte de la funcionalidad mediante trabajo interdisciplinario , desde los requisitos hasta la implementación . El Proceso Unificado agrupa los incrementos/iteraciones en fases: inicio, elaboración, construcción y transición.

  • La fase inicial identifica el alcance del proyecto, los requisitos (funcionales y no funcionales) y los riesgos a un alto nivel, pero con suficiente detalle como para poder estimar el trabajo realizado.
  • La elaboración proporciona una arquitectura funcional que mitiga los principales riesgos y cumple con los requisitos no funcionales.
  • La construcción va completando la arquitectura de forma incremental con código listo para la producción, generado a partir del análisis, el diseño, la implementación y las pruebas de los requisitos funcionales.
  • La fase de transición consiste en integrar el sistema en el entorno operativo de producción.

Cada una de las fases puede dividirse en una o más iteraciones, que generalmente tienen un plazo fijo en lugar de un número limitado de funcionalidades. Los arquitectos y analistas trabajan una iteración por delante de los desarrolladores y evaluadores para mantener su lista de tareas pendientes siempre llena.

Uso e historia

Muchos ejemplos de uso temprano se proporcionan 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 NASA de la década de 1960 .

Algunos de esos ingenieros del programa Mercury formaron posteriormente una nueva división dentro de IBM , donde «otro ejemplo temprano y notable de un gran éxito de IID [fue] el núcleo mismo del software del transbordador espacial de la NASA: el sistema principal de software de aviónica, que [ellos] construyeron entre 1977 y 1980. El equipo aplicó IID en una serie de 17 iteraciones a lo largo de 31 meses, con un promedio de unas ocho semanas por iteración. Su motivación para evitar el ciclo de vida en cascada fue que los requisitos del programa del transbordador cambiaron durante el proceso de desarrollo del software». [ 4 ]

Algunas organizaciones, como el Departamento de Defensa de los Estados Unidos, prefieren las metodologías iterativas, comenzando con la norma MIL-STD-498 , que "fomenta claramente la adquisición evolutiva y la identificación y detección de intrusiones".

La instrucción 5000.2 del Departamento de Defensa, publicada en el año 2000, establecía una clara preferencia por el IID:

Existen dos enfoques para alcanzar la capacidad total: evolutivo y de un solo paso (cascada). Se prefiere el enfoque evolutivo. En este enfoque, la capacidad final que se entrega al usuario se divide en dos o más bloques, con incrementos crecientes de capacidad. El desarrollo de software debe seguir un proceso iterativo de desarrollo en espiral, en el que las versiones de software, que se expanden continuamente, se basan en el aprendizaje de desarrollos anteriores. También puede realizarse por fases.

Las revisiones recientes de la DoDI 5000.02 ya no hacen referencia al "desarrollo en espiral", pero sí defienden 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 para su ciclo de programación con el fin de 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 ]

Uso en hardware y sistemas embebidos

Si bien el término desarrollo iterativo e incremental surgió en la industria del software, muchos proyectos de desarrollo de hardware y software embebido utilizan técnicas iterativas e incrementales.

Ejemplos de esto pueden verse en varias industrias. Un sector que se ha visto afectado sustancialmente por este cambio de mentalidad recientemente ha sido la industria de lanzamientos espaciales , con nuevas fuerzas competitivas significativas en acción debido a la innovación tecnológica más rápida y extensa impulsada por la formación de empresas privadas dedicadas a los lanzamientos espaciales. Estas empresas, como SpaceX [ 7 ] y Rocket Lab [ 8 ] , ahora brindan servicios comerciales de lanzamiento orbital en la última década, algo que solo seis naciones habían hecho antes de hace una década [ 9 ] . La nueva innovación en los enfoques de desarrollo tecnológico, los precios y las ofertas de servicios, incluida la capacidad, existente solo desde 2016, de volar al espacio en una etapa de propulsión previamente utilizada (reutilizable) , reduce aún más el precio de acceso al espacio [ 10 ] [ 7 ] .

SpaceX ha sido explícita sobre su esfuerzo por incorporar prácticas de diseño iterativo en 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. [ 11 ]

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

Véase también

Referencias

  1. Larman, Craig (junio de 2003). "Desarrollo iterativo e incremental: una breve historia" (PDF) . Computer . 36 (6): 47–56 . doi : 10.1109/MC.2003.1204375 . ISSN 0018-9162 . S2CID 9240477. Estábamos haciendo desarrollo incremental ya en 1957, en Los Ángeles, bajo la dirección de Bernie Dimsdale [en ServiceBureau Corporation de IBM]. Era colega de John von Neumann , así que quizás lo aprendió allí, o lo asumió como algo totalmente natural. Recuerdo que Herb Jacobs (principalmente, aunque todos participamos) desarrolló una gran simulación para Motorola, donde la técnica utilizada fue, por lo que puedo decir...  
  2. DOD-STD-2167 Desarrollo de software para sistemas de defensa (04 JUN 1985) en everyspec.com
  3. Farcic, Viktor (21 de enero de 2014). "Modelos de desarrollo de software: desarrollo iterativo e incremental" . Technology Conversations . Archivado del original el 25 de marzo de 2014.
  4. 1 2 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). "Operación del Sistema de Adquisiciones de Defensa" (PDF) . Disposiciones del Departamento de Defensa . Subsecretario de Defensa para Adquisiciones, Tecnología y Logística. págs. 12–14 . Archivado del original (PDF) el 9 de agosto de 2017. Consultado el 9 de agosto de 2017 . 
  6. USAID. "Política operativa del ciclo del programa ADS, capítulo 201". Archivado el 23 de octubre de 2019 en Wayback Machine . Consultado el 19 de abril de 2017.
  7. 1 2 Belfiore, Michael (9 de diciembre de 2013). "The Rocketeer" . Foreign Policy . Archivado del original el 10 de diciembre de 2013. Recuperado el 11 de noviembre de 2018 .
  8. "¡Un vistazo exclusivo al interior de la nueva megafábrica secreta de Rocket Lab!" . Everyday Astronaut . 11 de octubre de 2018. Archivado del original el 12 de octubre de 2018. Consultado el 11 de noviembre de 2018 .
  9. Clark, Stephen (28 de septiembre de 2008). "Finalmente, un dulce éxito para el cohete Falcon 1" . Spaceflight Now . Consultado el 11 de noviembre de 2018. El primer cohete de combustible líquido desarrollado por el sector privado en alcanzar con éxito la órbita.
  10. Berger, Eric (25-06-2018). "El cohete ruso Proton, anterior al Apolo, finalmente dejará de volar. Los problemas técnicos y el auge de SpaceX son factores que contribuyen a ello" . arsTechica . Consultado el 26-06-2018 . El rápido auge de alternativas de bajo coste, como el cohete Falcon 9 de SpaceX, ha provocado que el número de lanzamientos del Proton en un año determinado se reduzca de unos ocho a solo uno o dos.
  11. Fernholz, Tim (21 de octubre de 2014). "Lo que se necesitó para que SpaceX de Elon Musk revolucionara Boeing, superara a la NASA y se convirtiera en una empresa espacial seria" . Quartz . Recuperado el 11 de noviembre de 2018. Pero SpaceX siempre se consideró una empresa tecnológica, y sus enfrentamientos con la NASA a menudo adoptaban una forma que los desarrolladores de computadoras —o cualquiera familiarizado con el problemático lanzamiento de healthcare.gov— reconocerían como generacional. SpaceX siguió un proceso de diseño iterativo, mejorando continuamente los prototipos en respuesta a las pruebas. La gestión de productos tradicional exige un plan sólido ejecutado hasta su finalización, una receta para sobrecostos.
  12. Gruss, Mike (24 de abril de 2015). "Evolución de un plan : ejecutivos de ULA explican la lógica detrás de las decisiones de diseño de Vulcan" . Space News . Recuperado el 25 de abril de 2015. 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. 

Lecturas adicionales

  • Dr. Alistair Cockburn (mayo de 2008). "Uso del desarrollo incremental e iterativo" (PDF) . STSC CrossTalk . 21 (5). Centro de soporte de tecnología de software de la USAF : 27–30 . ISSN 2160-1593 . Archivado del 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) . IEEE Computer . 36 (6). IEEE Computer Society: 47–56 . doi : 10.1109/MC.2003.1204375 . ISSN 0018-9162 . S2CID 9240477. Recuperado el 10 de enero de 2009 .