¿Cuál es la diferencia entre el enfoque incremental e iterativo para el desarrollo de software?

16

El enfoque incremental es un método de desarrollo de software en el que el modelo se diseña, implementa y prueba de forma incremental (se agrega un poco más cada vez) hasta que se termina el producto. Implica tanto desarrollo como mantenimiento. El producto se define como terminado cuando cumple con todos sus requisitos.

El diseño iterativo es una metodología de diseño basada en un proceso cíclico de creación de prototipos, pruebas, análisis y refinación de un producto o proceso. En función de los resultados de las pruebas de la iteración más reciente de un diseño, se realizan cambios y mejoras. Este proceso está destinado a mejorar la calidad y la funcionalidad de un diseño. En el diseño iterativo, la interacción con el sistema diseñado se utiliza como una forma de investigación para informar y evolucionar un proyecto, a medida que se implementan versiones sucesivas o iteraciones de un diseño.

Parece que ambos métodos consisten en crear una parte del sistema, refinarlo para pasar todos los casos de prueba, agregar otro componente del sistema y refinarlo nuevamente, esto se repite hasta que el sistema esté terminado.

¿Cuál es la diferencia real entre estas dos formas de diseñar software?

¿Cómo es posible combinar estos dos métodos para formar un enfoque de diseño iterativo e incremental?

Computernerd
fuente

Respuestas:

13

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.

Evan Plaice
fuente
+1 por buen ejemplo, aunque la descripción incremental me parece mal
Basilevs
@Basilevs ¿Eso es mejor?
Evan Plaice
66
La cascada no es incremental. Incremental se refiere específicamente a la construcción de software (diseño a prueba) pieza por pieza. En el modelo de cascada tradicional, realiza todo su diseño, luego toda su implementación y luego todas sus pruebas. No es incremental en absoluto. Existen variaciones de cascada, como dónde manejaría sus requisitos de ingeniería por adelantado, y luego dividiría el proyecto en incrementos donde cada incremento esté diseñado, implementado, probado (e integrado y probado con otros incrementos), pero esto no es tradicional cascada.
Thomas Owens
0

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.

Nigel B. Peck
fuente