terça-feira, 14 de agosto de 2012

Vida Interativa e Incremental de Desenvolvimento de Software!


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



Nenhum comentário:

Postar um comentário