MDP - Ciclo de Vida SW

Modelos de Ciclo de Vida: Por que precisamos deles no desenvolvimento

Desejo - alta qualidade a baixo custo.
Necessidade: trazer consistência e confiabilidade aos seus processos produtivos, reduzindo retrabalhos e margens de erro.

Vantagens: ajuda a melhorar o seu andamento e a garantir que os objetivos finais de cada passo sejam alcançados. Aumentar a velocidade de desenvolvimento, melhorar a qualidade, localizar e controlar pontos de melhoria, minimizar overhead e exposições a riscos e até mesmo melhorar as relações com os clientes.


Modelos de ciclo de vida mais aplicados:

1) Code-and-fix: É um modelo raramente recomendado, porém bastante comum. Esse uso comum se dá pelo fato de ser um modelo muito simples e não por ser eficiente. Quando se usa o modelo code-and-fix, inicia-se com uma idéia geral daquilo que se quer construir. A partir daí, usa-se qualquer combinação informal de projeto e codificação até que se tenha um produto pronto para ser entregue. De uma forma geral, podemos dizer que a ênfase do modelo code-and-fix é a produção de código.
Vantagens:
. Baixo overhead: Não se gasta tempo em planejamento, documentação, garantia da qualidade e outras atividades - o enfoque único é na codificação;. Não exige muita experiência dos desenvolvedores.
Desvantagens:
. Apresenta altos riscos: Não faz uso de metodologias de projeto nem documentação, focando no imediatismo e no improviso, entre outros;. Dificuldade de manutenção do produto final gerado;. Não há visibilidade do andamento do projeto, em razão de dificuldades em se ter uma gerência sistemática e em gerenciar riscos e a qualidade do produto;. Dificuldade de replicabilidade das soluções, uma vez que são "quase" artesanais;. Dependência essencial da qualidade individual, e não do processo + time, o que, via de regra, significa muitos riscos ao projeto.

2) Cascata ou Waterfall: É um dos modelos de ciclo de vida mais simples e mais conhecidos das organizações de desenvolvimento de software. Nele, as fases do projeto são executadas em uma seqüência linear e uma próxima fase só tem início quando a fase anterior está completamente pronta. Ao final de cada fase, é feita uma revisão para avaliar se realmente pode-se avançar para a próxima. Caso a revisão aponte que o projeto não está apto a entrar na fase seguinte, ele permanece na fase corrente até que ele seja aprovado.
Vantagens:
. Fácil de gerenciar: Etapas bem definidas e sem sobreposição;. Eficiente em casos nos quais o domínio de aplicação é bem entendido;. Eficiente no desenvolvimento de projetos em quais vários sistemas similares foram construídos anteriormente.
Desvantagens:
. Em função da dificuldade de se obter todos os requisitos do sistema no início do projeto, geralmente esse processo resulta em um atraso para o início da fase de projeto, cumulativa ao prazo final;. Raramente as fases de execução seguem um fluxo tão seqüencial e sem interações, portanto o planejamento não é de qualidade total;. Obtenção do produto final apenas no final do projeto, deixando margens de correção menores.

Prototipação evolutiva: Neste modelo, os desenvolvedores iniciam o projeto e a implementação das partes essenciais do sistema em um protótipo e refinam o mesmo, adicionando novas funcionalidades e melhorias até ele se tornar o produto de software final que eventualmente se tornará o produto a ser entregue. A diferença desse modelo de ciclo de vida com o anterior é que, naquele, fazia-se primeiramente um protótipo apenas para auxiliar na elaboração dos requisitos finais do sistema, o qual depois era descartado. Na prototipação evolutiva, o próprio protótipo será o produto entregue ao cliente.
Vantagens:
. Apropriado para sistemas nos quais os requisitos mudam rapidamente;. Provê um feedback constante do cliente a respeito do produto;. Apropriado para sistemas nos quais o cliente está apressado para que você entregue um conjunto de requisitos;. Aumenta a visibilidade do produto que está sendo desenvolvido;. Apropriado para sistemas nos quais nem você nem seu cliente conhecem bem o domínio da aplicação;. Facilita o trabalho em equipe, a disseminação de conhecimentos e a complementaridade de competências.
Desvantagens:
. Dificuldade em se prever o tempo que será necessário para produzir um produto aceitável;. Projeto pobre: Tendência a se desenvolver no modo code-and-fix, de esquecimento das fases de análise, projeto e testes;. Manutenibilidade pobre em razão do projeto idem;. Maior complexidade de gerenciar o projeto, os riscos e a qualidade do produto final.

Modelo Iterativo Incremental: Tenta combinar os benefícios do modelo cascata e da prototipação. A idéia básica é que um software deveria ser desenvolvido em partes, cada qual adicionando alguma capacidade funcional ao mesmo até que o software completo esteja implementado. A cada incremento, podem ser feitas extensões e modificações do projeto. Para o controle dessas alterações, o modelo faz uso de uma lista de controle, que contém, em ordem, todas as tarefas que devem ser executadas até a implementação final do produto. Cada passo consiste em remover a próxima tarefa selecionada, codificar e testar a implementação, fazer uma análise do produto obtido após a execução dessa fase e atualizar a lista com o resultado da análise realizada.
Vantagens:
. Disponibilidade de partes prontas do sistema mais cedo;. Facilidade nos testes: Geralmente, testar cada incremento é mais fácil do que testar o software pronto e tudo de uma vez só;. Feedback do cliente a cada incremento feito;. A aprendizagem do desenvolvedor numa linguagem é favorecida: Pode se optar em resolver as partes mais fáceis antes, enquanto ele aprende a linguagem, e deixar as partes mais complexas do sistema para depois.
Desvantagens:
. A possibilidade de o sistema ser dividido em partes como pré-requisito, já que nem sempre um sistema pode ser dividido;. Dificuldade na integração das partes desenvolvidas;. Negociação com o cliente a respeito do pagamento do produto de software final pode ser problemática, uma vez que o desenvolvimento em passos incrementais costuma induzir o cliente a acrescentar requisitos e funcionalidades que não estavam previstas no escopo inicial do projeto, o que resulta no encarecimento do desenvolvimento do produto final.


Espiral: É um modelo de ciclo de vida orientado a riscos, que reparte o projeto em mini-projetos. O conceito de risco pode referenciar desde uma compreensão pobre dos requisitos ou da arquitetura até problemas de performance ou no conhecimento da tecnologia a ser aplicada, dentre outros. Após a resolução dos riscos maiores, o modelo espiral pode ser terminado com um outro modelo de ciclo de vida qualquer.
Cada ciclo da espiral envolve alguns passos para que o mesmo seja concluído, dentre os quais:
. Determinar objetivos, alternativas e incertezas;. Identificar e resolver riscos;. Avaliar as alternativas;. Desenvolver os produtos de entrega para aquela interação e verificar seu grau de correção;. Planejar a próxima interação.
Vantagens:
. Possibilidade de combinar o modelo espiral com outros modelos de ciclo de vida;. Ajuda a aumentar a qualidade pelo planejamento e análise dos riscos em cada fase;. Maior visibilidade para a gerência, sobretudo na gerência de riscos.
Desvantagens:
. Gerência de processo mais complexa;. Necessidade de maior experiência da equipe de desenvolvimento, sobretudo dos responsáveis pela gerência;. Maior experiência da equipe e maior esforço para o desenvolvimento podem aumentar consideravelmente os custos.
Além dos modelos de ciclo de vida descritos, encontramos na literatura muitos outros modelos e cada um deles geralmente enfoca um determinado tipo de projeto específico.
Podemos perceber que todos os modelos de ciclo de vida possuem particularidades próprias e apresentam vantagens e desvantagens. Assim, a escolha de um modelo depende do contexto do projeto onde ele será aplicado.

Nenhum modelo de ciclo de vida é tido como ideal, pois aquele que é mais rápido e eficiente em certos projetos pode ser mais lento ou complexo quando o domínio do problema é trocado.
O mais importante é que as empresas de desenvolvimento de software tenham algum modelo de ciclo de vida, ou melhor, um "catálogo" de modelos personalizado de acordo com a sua estrutura organizacional e projetos (demandas e expectativas dos clientes) para que consigam níveis de excelência em seus produtos e serviços. Vale ainda lembrar que esse é um dos pré-requisitos fundamentais para que elas almejem uma certificação do tipo CMM.

Comentários

Postagens mais visitadas deste blog

Redação Ti Nota 10 - Klauss

Prova Discursiva nota 10 - Banca Cespe

Portugues - Orações