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.
Postar um comentário

Postagens mais visitadas deste blog

MANUAL DE REDAÇÃO DA PRESIDÊNCIA DA REPÚBLICA

Plural de substantivos compostos

Atualidades - 15 de agosto de 2016