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 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.
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:
- Comunicação: Comunicação em si.
- Planejamento: Estimativa de custos, cronograma e análise de riscos.
- Modelagem: Análise e design.
- Construção: Codificação e teste.
- 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.
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:
- Espefificação de requisitos.
- Análise de requisitos.
- Modoficação de requisitos.
- Projeto de sistema com Reuso.
- Desenvolvimento e integração
- Validação de sistema.
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.