El Enfoque incremental utiliza un número establecido de pasos y el desarrollo va de principio a fin en un camino lineal de progresión.
El desarrollo incremental se realiza en pasos desde el diseño, implementación, prueba / verificación, mantenimiento. Estos pueden desglosarse aún más en subpasos, pero la mayoría de los modelos incrementales siguen el mismo patrón. El modelo de cascada es un enfoque tradicional de desarrollo incremental.
El enfoque iterativo no tiene un número establecido de pasos, sino que el desarrollo se realiza en ciclos.
El desarrollo iterativo se preocupa menos por el seguimiento del progreso de las características individuales. En cambio, primero se enfoca en crear un prototipo funcional y agregar características en los ciclos de desarrollo donde se realizan los pasos de Incremento de desarrollo para cada ciclo. El modelado ágil es un enfoque iterativo típico.
El modelo incremental se desarrolló originalmente para seguir el modelo de línea de ensamblaje tradicional utilizado en las fábricas. Desafortunadamente, el diseño y desarrollo de software tiene poco en común con la fabricación de bienes físicos. El código es el modelo, no el producto final del desarrollo. Las buenas opciones de diseño a menudo se 'descubren' durante el proceso de desarrollo. Bloquear a los desarrolladores en un conjunto de supuestos sin el contexto adecuado puede conducir a diseños deficientes en el mejor de los casos o un descarrilamiento completo del desarrollo en el peor de los casos.
El enfoque iterativo se está convirtiendo en una práctica común porque se adapta mejor al camino natural de progresión en el desarrollo de software. En lugar de invertir mucho tiempo / esfuerzo persiguiendo el 'diseño perfecto' basado en suposiciones, el enfoque iterativo se trata de crear algo que sea 'suficientemente bueno' para comenzar y evolucionar para satisfacer las necesidades del usuario.
tl; dr: si estuviera escribiendo un ensayo bajo el Modelo incremental, intentaría escribirlo perfectamente desde el principio hasta el final de una oración a la vez. Si lo escribió bajo el Modelo iterativo, sacaría un borrador rápido y trabajaría para mejorarlo a través de un conjunto de fases de revisión.
Actualizar:
Modifiqué mi definición de 'Enfoque incremental' para adaptarme a un ejemplo más práctico.
Si alguna vez ha tenido que lidiar con la contratación, el enfoque incremental es la forma en que se llevan a cabo la mayoría de los contratos (especialmente para los militares). A pesar de las muchas variaciones sutiles del típico 'Modelo de cascada', la mayoría / todas se aplican de la misma manera en la práctica.
Los pasos son los siguientes:
- Adjudicación del contrato
- Revisión preliminar de diseño
- Revisión de diseño crítico
- Congelación de especificaciones
- Desarrollo
- Fielding / Integración
- Verificación
- Pruebas de confiabilidad
El PDR y el CDR son donde se crea y revisa la especificación. Una vez que se complete la especificación, debe congelarse para evitar el deslizamiento del alcance. La integración ocurre si el software se usa para extender un sistema preexistente. La verificación es para verificar que la aplicación coincida con la especificación. La confiabilidad es una prueba para demostrar que la aplicación será confiable a largo plazo, esto se puede especificar de manera muy similar a un SLA (Service Level Agreement) donde el sistema debe mantener un cierto porcentaje de tiempo de actividad (por ejemplo, 99% de tiempo de actividad durante 3 meses) )
Este modelo funciona muy bien para sistemas que son fáciles de especificar en papel pero difíciles de producir. El software es muy difícil de especificar en papel con cualquier grado apreciable de detalle (ex UML). La mayoría de los 'tipos de negocios' a cargo de la gestión / contratación no se dan cuenta de que, cuando se trata del desarrollo de software, el código en sí es la especificación. Las especificaciones en papel a menudo tardan tanto o más tiempo / esfuerzo en escribirse que el código en sí y, en la práctica, generalmente resultan ser incompletas / inferiores.
Los enfoques incrementales intentan perder el tiempo / los recursos tratando el código en sí como la especificación. En lugar de ejecutar la especificación de papel a través de múltiples pasos de revisión, el código en sí pasa por múltiples ciclos de revisión.
Como con cualquier adjetivo, y la mayoría de las cosas en el desarrollo de software ... ¡depende!
Depende del contexto y de cómo se usa el término. Entonces, está preguntando sobre la diferencia entre los enfoques incrementales e iterativos para el desarrollo de software, pero su cita analiza el diseño iterativo, que es algo diferente (aunque similar).
Entonces, respondiendo específicamente como un enfoque para el desarrollo de software ...
La pregunta está fuera de lugar. No es uno ni el otro. No puede compararlos directamente, ya que se refieren a diferentes partes del proceso.
El desarrollo de software iterativo es por naturaleza incremental. El desarrollo de software incremental no tiene que ser iterativo.
Un incremento es un pequeño movimiento, con suerte hacia adelante. Es una forma de referirse a cada paso del trabajo que se lleva a cabo.
Una iteración es un ciclo de trabajo.
Entonces, una iteración se refiere al ciclo de desarrollo general que se utiliza. Un incremento se refiere a cada paso individual del trabajo. Una iteración producirá un incremento, que se compone de uno o más incrementos reales para el software (generalmente más).
En conclusión...
El desarrollo de software iterativo es un tipo específico de enfoque para el desarrollo de software, que funciona en iteraciones en lugar de un enfoque tradicional en cascada. Scrum es un buen ejemplo.
El desarrollo incremental de software es más general y se refiere al avance del trabajo en pasos, que es una característica de la mayoría de los enfoques (¿quizás todos?). Dicho esto, el término se usa con más frecuencia en relación con enfoques modernos y ágiles, lo que probablemente explica la confusión entre los dos términos muy similares.
Y finalmente, por supuesto, depende de cómo se entiende el término cuando se usa, que a menudo varía significativamente según el hablante, la época del mes, etc.
Una pregunta más interesante es, ¿dónde encaja un enfoque empírico para el desarrollo de software en todo esto? La belleza de un enfoque iterativo es que permite el empirismo, que es donde sucede la magia.
Espero que esto ayude.
Este artículo lo describe bien, con ejemplos.
fuente