quinta-feira, 26 de abril de 2012

Engenharia de Software Para Concursos - Parte 2 - Modelos de Ciclo de Vida, Cascata e Prototipagem


Modelos de Ciclo de Vida ou Modelos de Processos
Um modelo de ciclo de vida é uma representação abstrata e simplificada do processo de desenvolvimento de software, apresentada a partir de uma perspectiva específica.
Para desenvolver software, existem muitas coisas a serem consideradas, mas no modelo de ciclo de vida você abstrai uma série de coisas e foca no essencial para aquele modelo. No modelo em cascata por exemplo, temos uma perspectiva baseada nas atividades que precisam ser realizada.

Poderia ser utilizada uma perspectiva baseada em papéis (envolvidos) ou de artefatos que estão sendo gerados, mas normalmente o foco fica nas etapas (atividades) a serem executadas.

O modelo de ciclo de vida é a base (esqueleto) do processo. Ele dita a ordem das atividades, os principais artefatos e produtos gerados.

Principais Modelos:

Cascata ou Clássico
Prototipagem
Métodos Formais
Espiral
Incremental

Modelo em Cascata
É o modelo clássico.  Funciona como uma linha de produção. As etapas são executadas de forma sistemática e sequêncial. Em princípio, você só pode passar para a próxima fase quando a fase anterior tiver sido completamente terminada. É um modelo orientado a planos, você planeja tudo que é necessário para uma etapa antes de começar. Cada fase prevê a entrega de algum artefato que marca seu fim. Não existe feedback e replanejamento.


Apesar de ser raro hoje em dia, este modelo pode ser aplicado em sistemas com requisitos muito bem conhecidos e simples. É necessário planejar as atividades e executar tudo de uma vez. A verdade é que o negócio de uma empresa não costuma ser estável e os requisitos sempre mudam durante o desenvolvimento e o modelo em cascata não prevê suporte para isso.

Foi a primeira abordagem estruturada para o desenvolvimento de software.

Fases do Modelo em Cascata do Pressman

1) Comunicação - Iniciação do projeto e levantamento de requisitos
2) Planejamento - Estimativas, cronograma e monitoramento
3) Modelagem - Análise e projeto
4) Construção - Codificação e teste
5) Implantação - Entrega, manutenção e feedback

Fases do Modelo em Cascata do Sommerville
1) Definição de Requisitos
2) Projeto de Software e Sistema
3) Codificaçào e Testes Unitários
4) Integração e Testes de Sistema
5) Operação e Manutenção (costuma ser a etapa de maior duração)

O analista levanta todos os requisitos na primeira fase e volta para a fábrica de software para o planejamento. O processo de desenvolvimento segue sem feedback até a implantação, o que pode demorar muito tempo, até mais de uma dezena de meses. Nesse tempo, normalmente o negócio já mudou.

Vantagens
- De fácil planejamento, organiza as atividades em uma sequênciaa com entraga bem definida.
- Funciona bem para requisitos estáveis, bem definidos e bem compreendidos.
- Fácil de aplicar a eqiupes inexperientes, porque é só fazer tudo em uma sequência simples.

Desvantagens
Acumula riscos. É um modelo não realista e simplista. No mundo real os requisitos mudam, erros acontecem no levantamento de requisitos e nada disso é percebido até que o produto seja testado ou recebido pelo cliente, lá no final. Os problemas começam a aparecer na fase de integração, quando é tarde demais. No modelo cascata clássico, que é o que foi tratado aqui, só existe uma entrega para o cliente, que acontece no final.

Na pratica, o modelo em cascata pode ser adequado a um replanejamento é possível voltar de uma fase para a fase anterior.

Fases Genéricas do Ciclo de Vida do Software
Cada autor possui a sua denominação de cada fase do ciclo de vida, mas existe uma ideia por trás de cada etapa. Abaixo, uma ideia das etapas genéricas.

- Planejamento:
Faz-se as estimativas sobre escopo, recursos, custos e prazos. Esboça-se os requisitos do sistema para poder fazer as estimativas, que são pouco precisas, mas já dão uma ideia razoável do todo.

- Análise e Especificação de Requisitos
Entende-se melhor os requisitos e o escopo, que são refinados neste momento. Não existe código gerado. Entende-se o domínio do problema. Pensa-se no comportamento e nas funcionalidades do sistema. Não existe preocupação com tecnologia. O foco é no problema e não na solução.

- Projeto ou Design
Define-se os requisitos tecnológicos do sistema. Aqui pensa-se na solução, gera-se a arquitetura do software.

- Implementação
Gera o código do programa de acordo com o projeto. É onde existe mais gente trabalhando ao mesmo tempo.

- Testes
Realizar diversos níveis de teste para satisfazer a verificação do software. O objetivo é encontrar erros no software. Testes nunca garantem que o programa está livre de erros. Os testes apenas mostram que ainda existem erros, mas não dá para mostrar que não existe erro nenhum.

 - Implantação, Operação e Manutenção
Colocar o software em produção, treinamento, manutenção e gerenciamento dos serviços do software.

Prototipagem 
Protótipo é uma versão inicial de um software que é utilizada para demonstrar conceitos ou descobrir informações e soluções a respeito de um determinado problema. É uma prova de conceito para saber se o rumo escolhido é viável tanto do ponto de visto técnico, como do ponto de vista do usuário.

Prototipagem Evolucionária

Trabalhar junto aos cliente para evoluir o protótipo a partir de uma especificação inicial bem resumida. Foca em entregar algum resultado o mais rápido possível e o protótipo evolui até que o software esteja de acordo com as necessidades do cliente.


Deve-se começar com os requisitos mais bem compreendidos. Novas funcionalidades são adicionadas a cada versão, de acordo com propostas do cliente. É aplicável a sistemas pequenos ou médios.

Esse modelo de ciclo de vida gera uma falta de visibilidade do progresso do sistema como um todo, que está sempre evoluíndo e nunca está terminado. Os sistemas crescem sem uma arquitetura adequada, porque os programadores estão preocupados em entregar rapidamente e acabam não se preocupando com boas práticas ou refactoring.

A documentação pode ser esquecida e provavelmente será, já que o foco é na entrega rápida. A cada nova versão acontecem mudanças que não são documentadas.

Prototipagem Descartável
Pequenas versões prototipadas são disponibilizadas aos clientes para compreensão e clarificação dos requisitos do sistema. Deve-se começar com os requisitos mais difíceis e menos compreendidos.

Com a utilização do protótipo o cliente tem mais condições de determinar o que ele realmente quer e a equipe pode entender melhor os requisitos. Depois o protótipo é descartado.

É útil para sistemas grandes e complicados, ou quando o cliente não sabe o que quer exatamente. Parece perda de tempo, mas os requisitos ficam bem mais claros do que se estivessem apenas escritos em um papel, de forma teórica.

Protótipos descartáveis podem ser aplicados no contexto de qualquer modelo de processo (cascata, espiral, iterativo/incremental). Funciona como uma técnica utilizada nos outros modelos de ciclo de vida.

Na prática os modelos de desenvolvimento de software se misturam. O modelo em cascata pode ser usando dentro do modelo incremental, como mini-projetos e outras combinações são possíveis.

Os protótipos podem ser visuais, para os clientes avaliarem, mas também existem protótipos não visuais para validação de conceitos, estudo de viabilidade ou arquitetura, etc.