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.