El Enfoque incremental utiliza un número determinado de pasos y el desarrollo va de principio a fin en una trayectoria lineal de progresión.
El desarrollo incremental se realiza en pasos del diseño, implementación, prueba / verificación, mantenimiento. Estos se pueden dividir en sub-pasos, pero la mayoría de los modelos incrementales siguen ese mismo patrón. El Waterfall Model es un enfoque tradicional de desarrollo incremental.
El Enfoque iterativo no tiene un número determinado de pasos, más bien el desarrollo se realiza en ciclos.
El desarrollo iterativo está menos relacionado con el seguimiento del progreso de las funciones individuales. En su lugar, se enfoca en crear un prototipo de trabajo primero y agregar funciones en los ciclos de desarrollo donde se realizan los pasos de Incrementar el Desarrollo para cada ciclo. 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 elecciones de diseño a menudo se 'descubren' durante el proceso de desarrollo. Bloquear a los desarrolladores en un conjunto de suposiciones sin el contexto adecuado puede conducir a diseños deficientes en el mejor de los casos o a un completo descarrilamiento del desarrollo en el peor.
El enfoque iterativo se está convirtiendo en una práctica común porque se adapta mejor al camino natural de la progresión en el desarrollo de software. En lugar de invertir mucho tiempo / esfuerzo en perseguir el "diseño perfecto" basado en suposiciones, el enfoque iterativo consiste en crear algo que sea "lo suficientemente bueno" para comenzar y evolucionar para adaptarse a las necesidades del usuario.
tl; dr: si estuvieras escribiendo un ensayo bajo el Modelo incremental, intentarías escribirlo perfectamente desde el principio hasta el final de una oración a la vez. Si lo escribiera 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:
He modificado mi definición de "Enfoque incremental" para que se ajuste 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 de ellas se aplican de la misma manera en la práctica.
Los pasos son los siguientes:
- Adjudicación del contrato
- Revisión de diseño preliminar
- Revisión de diseño crítico
- congelación de especificaciones
- Desarrollo
- Fielding / Integration
- Verificación
- Pruebas de confiabilidad
El PDR y el CDR son donde se crea y revisa la especificación. Una vez que se completa la especificación, debería estar congelada para evitar la invasión del alcance. La integración se produce si el software se utiliza para ampliar un sistema preexistente. La verificación es para verificar que la aplicación coincida con la especificación. La confiabilidad es una prueba para probar que la aplicación será confiable a largo plazo, esto se puede especificar de manera muy similar a un SLA (Acuerdo de nivel de servicio) donde se requiere que el sistema mantenga un cierto porcentaje de tiempo de actividad (ex 99% de tiempo de actividad por 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 un grado apreciable de detalle (ex UML). La mayoría de los 'tipos de negocios' a cargo de la administración / contratación no se dan cuenta de que, cuando se trata del desarrollo de software, el código en sí mismo es la especificación. Las especificaciones en papel a menudo toman tanto o más tiempo / esfuerzo para escribir que el código en sí, y en general resultan ser incompletos / inferiores en la práctica.
Los enfoques incrementales intentan la pérdida de tiempo / recursos al tratar el código como la especificación. En lugar de ejecutar la especificación en papel a través de varios pasos de revisión, el código mismo pasa por varios ciclos de revisión.