Desenvolvimento iterativo e incremental
O Desenvolvimento Iterativo
e Incremental é um 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
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 iterativo ou em cascata – ambos são estrategias de
retrabalho. A alternativa ao desenvolvimento incremental é desenvolver todo o
sistema com uma integração única.
Desenvolvimento iterativo é
uma estrategia 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
A idéia 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 subseqüentes 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
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.
Ciclo
de Vida Iterativo e Incremental
O modelo de ciclo de vida incremental e iterativo
foi proposto como uma resposta aos problemas encontrados no modelo em cascata.
Um processo de desenvolvimento segundo essa abordagem divide o desenvolvimento
de um produto de software em ciclos. Em cada ciclo de desenvolvimento, podem
ser identificadas as fases de análise, projeto, implementação e testes. Essa
característica contrasta com a abordagem clássica, na qual as fases de análise,
projeto, implementação e testes são realizadas uma única vez.
Cada um dos ciclos considera um subconjunto de
requisitos. Os requisitos são desenvolvidos uma vez que sejam alocados a um
ciclo de desenvolvimento. No próximo ciclo, um outro subconjunto dos requisitos
é considerado para ser desenvolvido, o que produz um novo incremento do sistema
que contém extensões e refinamentos sobre o incremento anterior.
Assim, o desenvolvimento evolui em versões,
através da construção incremental e iterativa de novas funcionalidades até que
o sistema completo esteja construído. Note que apenas uma parte dos requisitos
é considerada em cada ciclo de desenvolvimento. Na verdade, um modelo de ciclo
de vida iterativo e incremental pode ser visto como uma generalização da
abordagem em cascata: o software é desenvolvimento em incrementos e cada
incremento é desenvolvido em cascata (figura).
A abordagem incremental e iterativa somente é
possível se existir um mecanismo para dividir os requisitos do sistema em
partes, para que cada parte seja alocada a um ciclo de desenvolvimento. Essa
alocação é realizada em função do grau de importância atribuído a cada
requisito.
Tipos de Ciclos de Processos
O PROCESSO ITERATIVO
A noção de Processo Iterativo corresponde à ideia
de “ melhorar (ou refinar) pouco - a - pouco ” o sistema ( iterações ). Em cada
iteração a equipe de desenvolvimento identifica e especifica os requisitos
relevantes, cria um projeto utilizando a arquitetura escolhida como guia,
implementa o projeto em componentes e verifica se esses componentes satisfazem
os requisitos. Se uma iteração atinge os seus objectivos, o desenvolvimento
prossegue com a próxima iteração, caso contrário a equipa deve rever as suas
decisões e tentar uma nova abordagem.
Portanto, o âmbito do sistema não é alterado, mas
o seu detalhe vai aumentando em iterações sucessivas. Um excelente exemplo de
aplicação do processo iterativo encontra-se no trabalho artístico, em que o
resultado final de uma obra sofre inúmeras iterações.
O PROCESSO INCREMENTAL
A noção de processo incremental corresponde à
ideia de “ aumentar (alargar) pouco-a-pouco ” o âmbito do sistema. Uma boa
imagem para este atributo é a de uma mansão que foi construída por sucessivos
incrementos a partir de uma primeira casa com apenas duas divisões.
Um incremento não é necessariamente a adição do
código executável correspondente aos casos de uso que pertencem à iteração em
andamento. Especialmente nas primeiras fases do ciclo de desenvolvimento, os
desenvolvedores podem substituir um projeto superficial por um mais detalhado
ou sofisticado. Em fases avançadas os incrementos são tipicamente aditivos.
Funcionamento
Fases do
RUP
Em cada ciclo de desenvolvimento, podem ser
identificadas as fases de análise, projeto, implementação e testes. Essa
característica contrasta com a abordagem clássica, na qual as fases de análise,
projeto, implementação e testes são realizadas uma única vez.
Cada um dos ciclos considera um subconjunto de
requisitos. Os requisitos são desenvolvidos uma vez que sejam alocados a um
ciclo de desenvolvimento. No próximo ciclo, um outro subconjunto dos requisitos
é considerado para ser desenvolvido, o que produz um novo incremento do sistema
que contém extensões e refinamentos sobre o incremento anterior.
Assim, o desenvolvimento evolui em versões, através
da construção incremental e iterativa de novas funcionalidades até que o
sistema completo esteja construído. Note que apenas uma parte dos requisitos é
considerada em cada ciclo de desenvolvimento. Na verdade, um modelo de ciclo de
vida iterativo e incremental pode ser visto como uma generalização da abordagem
em cascata: o software é desenvolvimento em incrementos e cada incremento é
desenvolvido em cascata (figura).
A abordagem incremental e iterativa somente é
possível se existir um mecanismo para dividir os requisitos do sistema em
partes, para que cada parte seja alocada a um ciclo de desenvolvimento. Essa
alocação é realizada em função do grau de importância atribuído a cada
requisito.
Vantagens
·
Redução
dos riscos envolvendo custos a um único incremento. Se os desenvolvedores
precisarem repetir a iteração, a organização perde somente o esforço mal
direcionado de uma iteração, não o valor de um produto inteiro.
·
Redução
do risco de lançar o projeto no mercado fora da data planejada. Identificando
os riscos numa fase inicial o esforço despendido para gerenciá-los ocorre cedo,
quando as pessoas estão sob menos pressão do que numa fase final de projeto.
·
Aceleração
do tempo de desenvolvimento do projeto como um todo, porque os desenvolvedores
trabalham de maneira mais eficiente quando buscam resultados de escopo pequeno
e claro.
·
Reconhecimento
de uma realidade freqüentemente ignorada: as necessidades dos usuários e os
requisitos correspondentes não podem ser totalmente definidos no início do
processo. Eles são tipicamente refinados em sucessivas iterações. Este modelo
de operação facilita a adaptação a mudanças de requisitos.
Desvantagens
·
Dificuldade
de gerenciamento. Isso ocorre porque as fases de do ciclo podem estar ocorrendo
de forma simultânea.
·
O usuário
pode se entusiasmar excessivamente com a primeira versão do sistema e pensar
que tal versão já corresponde ao sistema como um todo.
·
Como todo
modelo esta sujeito a riscos de projeto:
O projeto pode não satisfazer aos requisitos do
usuário.
A verba do projeto pode acabar.
O sistema de software pode não ser adaptável,
manutenível ou extensível.
O sistema de software pode ser entregue ao usuário
tarde demais.
Modelo de um Processo
DESENVOLVIMENTO ITERATIVO E INCREMENTAL
O desenvolvimento de um produto comercial de
software é uma grande tarefa que pode ser estendida por vários meses,
possivelmente um ano ou mais.
É mais fácil dividir o trabalho em partes menores
(iterações) tendo cada uma como resultado um incremento (processo incremental).
Assim sendo, o princípio subjacente a este processo
é que a equipe envolvida pode refinar e melhorar pouco-a-pouco a qualidade e os
detalhes do sistema envolvido.
Referências Bibliográficas
·
Eduardo
BEZERRA. Princípio de Análise e Projeto de Sistemas com UML . . :
Campus, 2002 . ISBN 8535210326
·
http://pt.wikipedia.org/wiki/Desenvolvimento_iterativo_e_incremental:
Origem: Wikipédia