Desenvolvimento iterativo e incremental

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

O Desenvolvimento Iterativo e Incremental é um dos clássicos modelos de processo de desenvolvimento de software criado em resposta às fraquezas do modelo em cascata, o mais tradicional. Os dois padrões mais conhecidos de sistemas iterativos de desenvolvimento são o RUP (Processo Unificado da Rational) e o Desenvolvimento ágil de software. Por isso o desenvolvimento iterativo e incremental é também uma parte essencial da Programação Extrema e outros.

Definições Incremental e Iterativo[editar | editar código-fonte]

Desenvolvimento Incremental é uma estratégia de planejamento estagiado em que várias partes do sistema são desenvolvidas em paralelo, e integradas quando completas. Não implica, requer ou pressupõe desenvolvimento interativo ou em cascata – ambos são estratégias de retrabalho. A alternativa ao desenvolvimento incremental é desenvolver todo o sistema com uma integração única.

Desenvolvimento iterativo é uma estratégia de planejamento de retrabalho em que o tempo de revisão e melhorias de partes do sistema é pré-definido. Isto não pressupõe desenvolvimento incremental, mas funciona muito bem com ele. Uma diferença típica é que a saída de um incremento não é necessariamente assunto de um refinamento futuro, e seu teste ou retorno do usuário não é utilizado como entrada para planos de revisão ou especificações para incrementos sucessivos. Ao contrario, a saída de uma iteração é examinada para modificação, e especialmente para revisão dos objetivos das iterações sucessivas.

Ciclo de vida[editar | editar código-fonte]

A ideia básica por trás da abordagem iterativa é desenvolver um sistema de software incremental, permitindo ao desenvolvedor tirar vantagem daquilo que foi aprendido durante a fase inicial de desenvolvimento de uma versão do sistema. O aprendizado ocorre simultaneamente tanto para o desenvolvedor, quanto para o usuário do sistema.

Os passos fundamentais do processo estão em iniciar o desenvolvimento com um subconjunto simples de Requisitos de Software e iterativamente alcançar evoluções subsequentes das versões até o sistema todo estar implementado. A cada iteração, as modificações de projeto são feitas e novas funcionalidades são adicionadas.

O projeto em si consiste da etapa de inicialização, iteração e da lista de controle do projeto.

A etapa de inicialização cria uma versão base do sistema. O objetivo desta implementação inicial é criar um produto para que o usuário possa avaliar. Ele deve oferecer um exemplo dos aspectos chave do problema e prover uma solução que seja simples o bastante para que possa ser compreendida e implementada facilmente. Para guiar o processo iterativo, uma lista de controle de projeto é criada. Ela conterá um registro de todas as tarefas que necessitam ser realizadas. Isto inclui itens tais como novas características a serem implementadas e áreas para serem projeto na solução atual. A lista de controle deve ser continuamente revisada como um resultado da fase de análise.

A etapa iterativa envolve o re-projeto e implementação das tarefas da lista de controle do projeto e a análise da versão corrente do sistema. O objetivo para o projeto de implementação de qualquer iteração é ser simples, direto e modular, preparado para suportar re-projeto neste estágio ou como uma tarefa a ser adicionada na lista de controle do projeto. O código pode, em alguns casos, representar uma fonte maior da documentação do sistema. A análise de uma interação é baseada no feedback do usuário, e facilidades da análise do programa disponíveis. As estruturas de análise envolvidas são a modularidade, usabilidade, reusabilidade, eficiência e obtenção dos objetivos. A lista de controle do projeto é modificada à luz dos resultados da análise.

Linhas básicas para direcionar a implementação e análise incluem:

  • Qualquer dificuldade no projeto, codificação e teste de uma modificação deve ser sinalizada para que possa ser re-projetada ou recodificada.
  • Modificações devem ser ajustadas facilmente em módulos isolados e fáceis de encontrar. Se não atendem a isso, algum re-projeto deverá ser necessário.
  • Modificações de tabelas devem ser especialmente fáceis de fazer. Se qualquer modificação não é rápida e fácil de ser feita, indica-se a realização de um re-projeto.
  • Modificações devem ser fáceis para serem feitas na forma de iterações. Se elas não são, haverá um problema básico tal como um projeto falho ou uma proliferação de correções.
  • Correções devem normalmente ser permitidas por somente uma ou duas iterações. Correções devem ser necessariamente para evitar re-projeto durante uma fase de implementação.
  • A implementação existente deve ser analisada freqüentemente para determinar quão bem estão sendo atingidos os objetivos do projeto.
  • As ferramentas de análise de programa devem ser usadas sempre que necessário para ajudar na análise de implementações parciais.
  • Reclamações do usuário devem ser solicitadas e analisadas para registrar as deficiências da implementação atual.

Características[editar | editar código-fonte]

O uso de análise e medições como guia do processo de aprimoramento é uma das maiores diferenças entre o desenvolvimento iterativo e o atual Desenvolvimento ágil de software. Isto provê suporte determinante para a efetividade do processo de qualidade do produto, permitindo estudar o processo para um ambiente em particular. As atividades de medição e análise podem ser adicionadas a métodos de desenvolvimento ágil existentes.

De fato, o contexto das interações múltiplas provê vantagens no uso de medições. Medições são algumas vezes difíceis de serem compreendidas no valor absoluto, mas mudanças relativas nas medições ao longo da evolução de um sistema podem ser muito instrutivas como base para uma análise. Por exemplo, um vetor de medições, m1, m2, ... mn, pode ser definido para caracterizar vários aspectos do produto em algum ponto no tempo, por exemplo, esforço para dados, mudanças, defeitos, atributos lógicos, físicos e dinâmicos, considerações do ambiente, entre outros. Portanto, um observador pode dizer como o produto se caracteriza quanto ao tamanho, complexidade, acoplamento e coesão, se estão aumentando ou diminuindo em relação ao tempo. Tais atributos podem ser monitorados em relação a mudanças de vários aspectos do produto ou podem prover parâmetros para a medição de sinais de potenciais problemas e anomalias.

ITERATIVO x INTERATIVO[editar | editar código-fonte]

O nome iterativo (fazer de novo; REITERAR; REPETIR) e interativo (atividade ou trabalho compartilhado, em que existem trocas e influências recíprocas) se confundem em função até dos seus significados. Se imaginarmos o desenvolvimento de sistemas como puramente a criação de programas dentro da área de TI, sem a intervenção dos usuários, até que eles estejam coerentes com os requisitos de software, o correto é estarmos usando a palavra ITERATIVO, devido a repetição dessa ação.

No entanto, se imaginarmos que a cada repetição deve-se interagir com os usuários para que o sistema cada vez mais corresponda as expectativa deles, o correto seria usar, a rigor, a palavra INTERATIVO. Mas, por convenção (ou por repetição), a grande maioria dos autores de Engenharia de Software adotam a palavra ITERATIVO para identificar este tipo de desenvolvimento.