Iteração (Ágil)
Introdução
Em geral
Desenvolvimento iterativo e incremental (ou incremental) é um processo de desenvolvimento de software criado em resposta aos pontos fracos do modelo tradicional em cascata.
Basicamente este modelo de desenvolvimento, que nada mais é do que um conjunto de tarefas agrupadas em pequenas etapas repetitivas (iterações),[1] é um dos mais utilizados nos últimos tempos, pois, por estar relacionado a novas estratégias de desenvolvimento de software e programação extrema, é utilizado em diversas metodologias.
O modelo consiste em várias etapas de desenvolvimento em cada incremento, que começam com a análise e terminam com o estabelecimento e aprovação do sistema.[2].
Conceito de desenvolvimento iterativo e incremental
Um projeto é planejado em diferentes blocos de tempo chamados de iteração.
Em uma iteração, repete-se um determinado processo de trabalho que proporciona um resultado mais completo para um produto final, para que quem o utiliza receba benefícios deste projeto de forma crescente.
Para isso, cada requisito deve ter um desenvolvimento completo em uma única iteração que deve incluir testes e documentação para que a equipe atinja todos os objetivos necessários e esteja pronta para ser entregue ao cliente. Isso evita atividades de risco no projeto concluído.
O que se busca é que em cada iteração os componentes consigam evoluir o produto dependendo das finalizações das iterações anteriores, agregando mais opções de requisitos e conseguindo assim uma melhoria muito mais completa.
Uma forma muito essencial de direcionar o processo iterativo incremental é priorizar os objetivos e requisitos com base no valor oferecido ao cliente.[3].
Para apoiar o desenvolvimento de projetos através deste modelo, foram criados frameworks (ambientes de trabalho), dos quais os dois mais famosos são o Rational Unified Process e o Dynamic Systems Development Method. O desenvolvimento incremental e iterativo também é uma parte essencial de um tipo de programação conhecido como Extreme Programming e outras estruturas de desenvolvimento rápido de software.