Um projeto que usa o desenvolvimento iterativo tem um ciclo de vida que consiste em várias iterações. Uma iteração
incorpora um conjunto quase seqüencial de tarefas em modelagem de negócio, requisitos, análise e design, implementação,
teste e implementação, em várias proporções, dependendo do local em que ela está localizada no ciclo de
desenvolvimento. As iterações nas fases de iniciação e de elaboração concentram-se nas atividades de gerenciamento,
requisitos e design. As iterações na fase de construção concentram-se no design, na implementação e no teste. E as
iterações na fase de transição concentram-se no teste e na implementação. As iterações devem ser gerenciadas em um
estilo com caixa de hora, ou seja, o planejamento de uma iteração deve ser
considerado fixo e o escopo do conteúdo da iteração gerenciado ativamente para atender a esse planejamento.
É provável que um design inicial contenha falhas em relação a seus principais requisitos. A descoberta tardia dos
defeitos de design resulta em saturações caras e, em alguns casos, até mesmo no cancelamento do projeto.
Todos os projetos têm um conjunto de riscos envolvidos. Quanto mais cedo você puder verificar que evitou um risco no
ciclo de vida, mais precisos serão seus planos. Muitos riscos nem são descobertos até que você tente integrar o
sistema. É impossível prever todos eles, por mais experiente que seja a equipe de desenvolvimento.
Em um ciclo de vida em cascata, você não poderá verificar se ficou livre de um risco até o final do ciclo.
Em um ciclo de vida iterativo, a seleção do incremento a ser desenvolvido em uma iteração é feita com base em uma lista
dos principais riscos. Como a iteração produz um executável testado, você poderá verificar os riscos diminuíram.
Geralmente, uma abordagem iterativa é superior a uma abordagem linear ou em cascata, por vários motivos.
-
Os riscos são reduzidos mais cedo, pois os elementos são integrados progressivamente.
-
Os requisitos e as táticas de alteração são acomodados.
-
A melhoria e o refinamento do produto são facilitados, resultando em um produto mais robusto.
-
As organizações podem aprender a partir dessa abordagem e aprimorar seus processos.
-
A capacidade de reutilização aumenta.
Um cliente disse uma vez: "Com a abordagem em cascata, tudo parece bem até quase no final do projeto, às vezes até a
metade da integração. Aí, tudo desmorona. Com a abordagem iterativa, é muito difícil ocultar a verdade durante muito
tempo."
Geralmente, os gerentes de projeto resistem à abordagem iterativa, pois consideram-na um infindável refinamento. No RUP
(Rational Unified Process), a abordagem interativa é muito controlada; o número, a duração e o objetivo das iterações
são planejados. As tarefas e as responsabilidades dos participantes são definidas. São capturadas medidas de progresso
objetivas. Ocorre algum retrabalho de uma iteração para a outra, mas isso também é cuidadosamente controlado.
Uma abordagem iterativa permite que você diminua os riscos mais cedo, pois muitos deles são descobertos somente durante
a integração. No desdobramento da iteração inicial, você passa por todas as disciplinas, praticando muitos
aspectos do projeto: ferramentas, softwares off-the-shelf, habilidades das pessoas e assim por diante. Pode ser que
riscos aparentes demonstrem que não são riscos e riscos novos e inesperados irão aparecer.
A integração não é uma "grande explosão" no final. Os elementos são incorporados progressivamente. Na realidade, a
abordagem iterativa é uma integração quase contínua. O que costumava ser um período longo, incerto e difícil, que
levava até 40% do esforço total no final de um projeto e que dificultava a precisão do planejamento, é dividido em seis
a nove integrações menores que iniciam com um número muito menor de elementos a serem integrados.
A abordagem iterativa permite considerar os requisitos de alteração, uma vez que eles normalmente serão
alterados durante o processo.
As mudanças nos requisitos e a "ascensão lenta" dos requisitos têm sido sempre as principais origens de problemas
para um projeto, levando à entrega demorada, planejamentos atrasados, clientes insatisfeitos e desenvolvedores
frustrados. Vinte e cinco anos atrás, Fred Brooks escreveu: "Planeje para jogar um fora, você fará isso de qualquer
maneira." Os usuários mudarão de idéia com o tempo. Essa é a natureza humana. Forçar os usuários a aceitarem o sistema
como o imaginaram originalmente está errado. Eles mudam de idéia porque o contexto é variável; eles aprendem mais sobre
o ambiente e a tecnologia e vêem a demonstração intermediária do produto durante o seu desenvolvimento.
Um ciclo de vida iterativo fornece o gerenciamento com um modo de fazer mudanças táticas no produto. Por exemplo, para
competir com os produtos existentes, você poderá decidir lançar um produto com funcionalidade reduzida mais cedo como
reação a uma movimentação de um concorrente ou poderá adotar um outro fornecedor de uma determinada tecnologia.
A iteração também permite mudanças tecnológicas durante o processo. Se alguma tecnologia é alterada ou se torna um
padrão conforme aparece uma nova, o projeto poderá aproveitá-la. Particularmente, esse é o caso de mudanças de
plataforma e de infra-estrutura de nível inferior.
Uma abordagem iterativa resulta em uma arquitetura mais robusta, pois os erros são corrigidos após várias iterações. As
falhas iniciais são detectadas conforme o produto amadurece, durante as iterações iniciais. Os gargalos de desempenho
são descobertos e podem ser reduzidos, em vez de aparecerem na véspera da liberação.
Desenvolver iterativamente, ao contrário de executar testes uma vez ao final do projeto, resulta em um produto
totalmente testado. Houve muitas oportunidades para testar as funções críticas após várias iterações, e os próprios
testes, além dos softwares de teste, tiveram tempo para amadurecer.
Os desenvolvedores podem aprender durante o processo, e as várias capacidades e especialidades são empregadas mais
completamente durante todo o ciclo de vida.
Em vez de esperar muito tempo simplesmente fazendo planos e aprimorando suas habilidades, os testadores começam a
testar cedo, a escrita técnica começa cedo e assim por diante. A necessidade de treinamento adicional ou de ajuda
externa pode ser detectada nas revisões de avaliação das iterações iniciais.
O próprio processo pode ser melhorado e refinado durante o seu desenvolvimento. A avaliação ao final de uma iteração
não considera apenas o status do projeto de uma perspectiva de programação do produto, mas também analisa o que precisa
ser alterado na organização e no processo para melhorar o desempenho na próxima iteração.
Um ciclo de vida iterativo facilita a reutilização. Identificar as partes comuns quando estão parcialmente projetadas
ou implementadas é mais fácil que identificar todas as semelhanças no início.
É difícil identificar e desenvolver partes reutilizáveis. As revisões de design nas iterações iniciais possibilitam que
os arquitetos de software identifiquem reutilizações inesperadas e potenciais, e as iterações subseqüentes permitem que
eles desenvolvam e amadureçam posteriormente esse código comum.
O uso de uma abordagem iterativa facilita o aproveitamento dos produtos desenvolvidos internamente e adquiridos prontos
para serem usados. Você terá várias iterações para selecioná-los, integrá-los e confirmar que eles são adequados à
arquitetura.
|