Boa Prática: Desenvolver IterativamentePara diminuir os riscos, desenvolva gradativamente de modo iterativo. Cada iteração resulta em um release executável. Tópicos
O que É Desenvolvimento Iterativo?
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 atividades em modelagem de negócios, requisitos, análise e design, implantaçã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 se concentram nas atividades de gerenciamento, requisitos e design. As iterações na fase de construção se concentram no design, na implementação e no teste. E as iterações na fase de transição e concentram no teste e na implementação.
As iterações
devem ser gerenciadas no modo Por que Desenvolver Iterativamente?
É 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. Vantagens de uma Abordagem
Iterativa
Geralmente, uma abordagem iterativa é superior a uma abordagem linear ou em cascata, por vários motivos.
Um cliente disse uma vez: "Com a abordagem de 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 Rational Unified Process (RUP), 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. Diminuindo os Riscos
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 prontos para uso, habilidades das pessoas e assim por diante. Pode ser que riscos aparentes demonstrem que não são riscos, e riscos novos e inesperados aparecerão. A integração não é uma "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. Acomodando Mudanças
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 a entrega demorada, planejamentos atrasados, clientes insatisfeitos e desenvolvedores frustrados. Vinte e cinco anos atrás, Fred Brooks escreveu: "Planeje para jogar 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. Buscando Melhor Qualidade
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. Aprendendo e Aprimorando
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. Aumentando a Reutilizaçã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. |
Rational Unified Process
|