🎯 Introdução à Engenharia de Software
O que é Engenharia de Software?
Engenharia de Software é uma disciplina que aplica princípios de engenharia ao desenvolvimento de software, focando na criação de sistemas confiáveis, eficientes e sustentáveis. Vai além da simples programação, abrangendo todo o ciclo de vida do software.
🔄 Programação vs Engenharia de Software
✨ Características de Software de Qualidade
Funcionalidade
Atende aos requisitos especificados
Confiabilidade
Funciona consistentemente
Usabilidade
Fácil de usar e aprender
Eficiência
Usa recursos de forma otimizada
Manutenibilidade
Fácil de modificar e evoluir
Portabilidade
Funciona em diferentes ambientes
🔄 Ciclo de Vida do Software (SDLC)
Modelo Cascata (Waterfall)
Características:
- Processo sequencial e linear
- Cada fase deve ser completada antes da próxima
- Documentação extensa
- Ideal para projetos com requisitos bem definidos
Fases do Modelo Cascata:
Análise de Requisitos
Definição detalhada dos requisitos do sistema
Design
Arquitetura e design detalhado do sistema
Implementação
Codificação do software
Testes
Verificação e validação do software
Implantação
Instalação e entrega do software
Manutenção
Correções e melhorias contínuas
Metodologias Ágeis
Scrum
- Sprints de 1-4 semanas
- Daily Standups diários
- Sprint Review e Retrospectiva
- Papéis: Product Owner, Scrum Master, Development Team
Kanban
- Fluxo contínuo de trabalho
- Limitação de WIP (Work in Progress)
- Visualização do trabalho em quadros
📜 Manifesto Ágil - Valores Fundamentais
Indivíduos e interações > processos e ferramentas
Software funcionando > documentação abrangente
Colaboração com cliente > negociação de contratos
📝 Engenharia de Requisitos
Levantamento e Análise de Requisitos
A Engenharia de Requisitos é fundamental para o sucesso de qualquer projeto de software. Envolve a identificação, análise, documentação e validação das necessidades dos stakeholders.
Tipos de Requisitos
Funcionais
O que o sistema deve fazer
- Autenticação de usuários
- Processamento de pagamentos
- Geração de relatórios
Não-Funcionais
Como o sistema deve operar
- Performance e escalabilidade
- Segurança e privacidade
- Usabilidade e acessibilidade
🏗️ Design e Arquitetura
Padrões Arquiteturais
O design de software define como o sistema será estruturado e organizado. Padrões arquiteturais como MVC, MVVM e Microserviços ajudam a criar sistemas robustos, manuteníveis e escaláveis.
Padrões de Design
MVC - Model View Controller
Separação entre dados, interface e lógica de negócio
MVVM - Model View ViewModel
Ideal para aplicações com interface rica
Microserviços
Arquitetura distribuída e independente
Princípios SOLID
Single Responsibility
Uma classe deve ter apenas uma razão para mudar
Open/Closed
Aberto para extensão, fechado para modificação
Liskov Substitution
Subtipos devem ser substituíveis por seus tipos base
Interface Segregation
Interfaces específicas são melhores que uma geral
Dependency Inversion
Dependa de abstrações, não de implementações
✅ Qualidade e Testes
Garantia da Qualidade de Software
A qualidade de software é assegurada através de processos sistemáticos de testes e verificação. A pirâmide de testes guia a estratégia de testes adequada.
Pirâmide de Testes
🧪 Testes Unitários
Testam componentes individuais
70%🔗 Testes de Integração
Testam interação entre componentes
20%🌐 Testes E2E
Testam o sistema completo
10%TDD - Test-Driven Development
🔴 Escrever Teste
Escreva um teste que falha
🟢 Fazer Passar
Implemente o código mínimo
🔵 Refatorar
Melhore o código mantendo os testes
📊 Gerenciamento de Projetos
Metodologias de Desenvolvimento
O gerenciamento eficaz de projetos de software envolve planejamento, controle e coordenação de todas as atividades do desenvolvimento.
Controle de Versão com Git
🌿 Branches Principais
- Main/Master: Código de produção
- Develop: Desenvolvimento ativo
- Feature: Novas funcionalidades
- Release: Preparação para produção
- Hotfix: Correções urgentes
🔄 Git Flow Workflow
Estimativas e Planejamento
Planning Poker
Estimativa colaborativa usando cartas
Story Points
Medição relativa de complexidade
Velocity
Velocidade da equipe em sprints
🔧 Manutenção e Evolução
Ciclo de Vida Pós-Desenvolvimento
A manutenção de software continua após o deployment inicial. Envolve correções, melhorias e adaptações às mudanças nos requisitos.
Tipos de Manutenção
Corretiva
Corrige defeitos e bugs descobertos
20%Adaptativa
Adapta o software a mudanças no ambiente
25%Perfectiva
Melhora performance e manutenibilidade
50%Preventiva
Previne futuros problemas
5%Refatoração
🎯 Melhor Legibilidade
Código mais fácil de entender e manter
⚡ Melhor Performance
Otimização sem alterar funcionalidade
🐛 Menos Bugs
Código mais robusto e confiável
🚀 Maior Produtividade
Desenvolvimento mais rápido e eficiente
📋 Estrutura Completa do Material
Introdução à Engenharia de Software
Conceitos fundamentais e diferenças entre programação e engenharia
Ciclo de Vida do Software (SDLC)
Modelos Waterfall, Ágil, DevOps e CI/CD
Engenharia de Requisitos
Tipos de requisitos e processo de levantamento
Design e Arquitetura
Padrões MVC/MVP/MVVM, monolito vs microserviços, princípios SOLID
Qualidade e Testes
Pirâmide de testes, TDD e métricas de qualidade
Gerenciamento de Projetos
Estimativas, Git e metodologias ágeis na prática
Manutenção e Evolução
Tipos de manutenção, refatoração e documentação