Pular para o conteúdo principal

Ciclos de Vida

Conceitos

Software não é apenas o programa, mas também todos os dados de documentação e configuração associados, necessários para que o programa opere corretamente.

📌 Princípios

🔹 Decomposição: Divide um problema grande em partes menores e mais gerenciáveis.

🔹 Generalização: Identifica padrões comuns para reaproveitamento e escalabilidade.

🔹 Flexibilização: Permite adaptações e mudanças sem grandes impactos.

🔹 Formalidade: Usa métodos rigorosos para garantir precisão e confiabilidade.

🔹 Abstração: Foca nos aspectos essenciais, ignorando detalhes irrelevantes.

Modelo em Cascata - Waterfall

No Modelo em Cascata, uma fase só se inicia após o término e aprovação da fase anterior, isto é, há uma sequência de desenvolvimento do projeto.

📌 Principais Características

🔹 Fases sequenciais: Requisitos → Projeto → Implementação → Testes → Implantação → Manutenção.
🔹 Rigoroso e documentado: Cada fase deve ser concluída antes de iniciar a próxima.
🔹 Baixa flexibilidade: Difícil adaptação a mudanças nos requisitos. O cliente deve citar todos requisitos desde o início.
🔹 Bem adequado para projetos estáveis: Útil quando os requisitos são bem definidos desde o início.
🔹 Entrega tardia do produto: O software só é disponibilizado ao final do processo.
🔹 Atrasa a redução de riscos: Só é possível verificar se ocorreram erros nas fases finais, que é quando o sistema é efetivamente testado.

Modelo em Cascata


Modelo Iterativo e Incremental

📌 Principais Características

🔹 Desenvolvimento incremental: O software é construído em ciclos com entregas parciais.
🔹 Maior flexibilidade: Permite ajustes constantes nos requisitos e funcionalidades.
🔹 Entrega parcial: O cliente pode receber versões úteis antes de finalizar todas funcionalidades.
🔹 Feedback contínuo: Envolve usuários e partes interessadas ao longo do processo.
🔹 Menor risco de falhas: Testes e revisões frequentes reduzem erros.
🔹 Exemplos: Modelo Espiral, Prototipação, Desenvolvimento Iterativo e Ágil.


Modelo RAD

O RAD (Rapid Application Development) é um modelo iterativo e incremental, que enfatiza o ciclo de desenvolvimento curto (60 a 90 dias).

Exemplos: Microsoft PowerApps e Delphi.

Esse desenvolvimento ocorre tão rápido, porque é utilizada o reúso de componentes a exaustão.
Como muitos componentes já estão testados, pode reduzir o tempo total de desenvolvimento.

Fases

1) Modelagem de negócio - Que informação é gerada, por quem, para onde vai e quem processa?
2) Modelagem de dados - O fluxo de informação é refinado em um modelo de dados que suporta o negócio.
3) Modelagem de Processo - Os objetos de dados definidos na modelagem de dados são transformados para conseguir o fluxo necessário para implementar uma função do negócio. Descrições do processamento são criadas para adicionar, modificar, descartar ou recuperar um objeto de dados.
4) Geração da aplicação - Utiliza ferramentas automatizadas para facilitar a construção do software.
5) Teste e modificação - Como o processo enfatiza o reúso, muitos componentes já estão testados e isso reduz o tempo total de teste.

Vantagens: Desenvolvimento rápido, custo reduzido, envolvimento maior do usuário, etc.

Desvantagens: Constroi funções desnecessárias, exige recursos humanos caros, custo alto do conjunto de ferramentas, etc.


Modelo em Prototipagem

Características:

  • Desenvolvimento inicial de um protótipo funcional para validar requisitos antecipadamente.
  • Envolvimento contínuo do cliente para refinamento do sistema.
  • Iterações frequentes, com ajustes e melhorias baseados no feedback.
  • Foco na usabilidade e experiência do usuário antes da implementação final.
  • A qualidade da documentação não é uma prioridade.

Vantagens:
✅ Redução de falhas, pois os requisitos são melhor compreendidos.
✅ Maior satisfação do cliente devido à visualização antecipada do sistema.
✅ Flexibilidade para mudanças antes da fase de desenvolvimento completo.
✅ Redução de custos com retrabalho e correções tardias.

Auxiliam a construção do produto de duas maneiras:

(1) ou para levantar os requisitos do sistema junto aos usuários e depois ser efetivamente descartado;
(2) para ser refinado, refinado e refinado até chegar ao sistema final desejado pelos usuários.


Modelo em Espiral

Características:

  • Baseado em ciclos iterativos, cada um contendo planejamento, análise de riscos, desenvolvimento e avaliação.
  • Enfatiza a identificação e mitigação de riscos antes de avançar para a próxima fase.
  • Adequado para projetos complexos e de grande porte.
  • Nos primeiros ciclos não é necessário a entrega de uma versão, podendo ser apenas uma especificação.
  • Combina elementos de prototipagem e modelo cascata. (Prototipagem-em-etapas)

Vantagens:

✅ Maior controle de riscos ao longo do desenvolvimento.
✅ Flexibilidade para mudanças conforme o projeto evolui.
✅ Entregas incrementais permitem ajustes contínuos.
✅ Melhor adaptação para requisitos incertos ou em evolução.

Desvantagens:

✅ Exige mão de obra qualificada.
✅ Não é recomendado resolver problemas mais simples e pequenos.

Espiral proposto por Barry Boehm:

1) Planejamento: Definição de objetivos, alternativas e à delimitação do projeto.
2) Análise dos Riscos: Componente obrigatório, riscos são avaliados, buscando alternativas para mitigá-los. Um protótipo pode ser construído.
3) Engenharia: Desenvolvimento de software propriamente dito ocorre, incluindo o design, codificação e teste de software.
4) Atualização(feedback): O produto é avaliado e as próximas iterações são planejadas, podendo incluir implantação e feedback do cliente.

dica

O modelo proposto por Barry Boehm é o mais cobrado em provas, mas os nomes das fases variam de acordo com a banca.

De acordo com Pressman, cada espiral é dividida em cinco setores:

Cinco setores por Pressman

  1. Comunicação: Comunicação em si.
  2. Planejamento: Estimativa de custos, cronograma e análise de riscos.
  3. Modelagem: Análise e design.
  4. Construção: Codificação e teste.
  5. Implantação: Entrega e feedback.

Observação: Cada loop é uma fase.


Método Formal

O que é? 🧮
Uma abordagem rigorosa para desenvolvimento de software, baseada em matemática e lógica formal.

Características:

  • Uso de especificações matemáticas para descrever o sistema.
  • Verificação e prova formal para garantir a correção.
  • Redução de erros antes da implementação.

Vantagens:
✔️ Maior confiabilidade e segurança.
✔️ Menos bugs críticos no produto final.
✔️ Ideal para sistemas de missão crítica (aeronáutica, saúde, bancos).

⚠️ Desafios:

  • Alto custo e complexidade.
  • Requer especialistas em métodos formais.
dica

Quase não é cobrado.


Modelo Baseado Em Componentes

O que é?

Um modelo de desenvolvimento que reutiliza componentes de software pré-existentes para acelerar a criação de sistemas.

Componentes são módulos de software reutilizáveis, encapsulados e independentes, que oferecem funcionalidades específicas e podem ser integrados a diferentes sistemas.

Exemplos Bibliotecas (ex: jQuery, Boost, TensorFlow).
Web Services (ex: SOAP, RESTful).
Frameworks (ex: Spring, Angular, Django).

Características:

  • Uso de módulos independentes e reutilizáveis.
  • Integração de componentes prontos em novos sistemas.
  • Redução do retrabalho e aumento da eficiência.

Vantagens:
✔️ Desenvolvimento mais rápido e econômico.
✔️ Maior confiabilidade, pois os componentes já foram testados.
✔️ Facilidade de manutenção e escalabilidade.

⚠️ Desafios:

  • Compatibilidade entre componentes.
  • Dependência de terceiros para atualizações.

Fases:

  1. Espefificação de requisitos.
  2. Análise de requisitos.
  3. Modoficação de requisitos.
  4. Projeto de sistema com Reuso.
  5. Desenvolvimento e integração
  6. Validação de sistema.
dica

Os requisitos são adtaptados de acordo com os componentes disponíveis. Exemplo: Um site em Wordpress são ofertados ao clientes, mas com certas limitações e são entregues de acordo com os plugins disponíveis.


Modelo Orientado a Aspectos

O que é?

Uma abordagem que separa preocupações transversais (como logs, segurança e cache) do código principal.

Aspecto é uma unidade modular que encapsula uma preocupação transversal, ou seja, uma funcionalidade que afeta múltiplas partes do sistema, como segurança, logging, transações ou monitoramento.

Características:

  • Usa aspectos para modularizar funcionalidades que afetam várias partes do sistema.
  • Mantém o código mais limpo e organizado.
  • Complementa a Programação Orientada a Objetos (POO).

Vantagens:
✔️ Redução de código duplicado.
✔️ Melhor manutenção e reutilização.
✔️ Separação clara das responsabilidades.

⚠️ Desafios:

  • Maior complexidade na depuração.
  • Pode dificultar o entendimento para novos desenvolvedores.