🎯 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

Aspecto
Programação
Engenharia de Software
Foco
Código
Processo completo
Escala
Individual
Equipe
Abordagem
Soluções rápidas
Soluções sustentáveis
Ênfase
Funcionalidade básica
Qualidade e manutenção

✨ 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:

1
Análise de Requisitos

Definição detalhada dos requisitos do sistema

2
Design

Arquitetura e design detalhado do sistema

3
Implementação

Codificação do software

4
Testes

Verificação e validação do software

5
Implantação

Instalação e entrega do software

6
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

S
Single Responsibility

Uma classe deve ter apenas uma razão para mudar

O
Open/Closed

Aberto para extensão, fechado para modificação

L
Liskov Substitution

Subtipos devem ser substituíveis por seus tipos base

I
Interface Segregation

Interfaces específicas são melhores que uma geral

D
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

1
🔴 Escrever Teste

Escreva um teste que falha

2
🟢 Fazer Passar

Implemente o código mínimo

3
🔵 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

1Criar feature branch
2Desenvolver funcionalidade
3Merge para develop
4Criar release branch
5Merge para main

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

1

Introdução à Engenharia de Software

Conceitos fundamentais e diferenças entre programação e engenharia

2

Ciclo de Vida do Software (SDLC)

Modelos Waterfall, Ágil, DevOps e CI/CD

3

Engenharia de Requisitos

Tipos de requisitos e processo de levantamento

4

Design e Arquitetura

Padrões MVC/MVP/MVVM, monolito vs microserviços, princípios SOLID

5

Qualidade e Testes

Pirâmide de testes, TDD e métricas de qualidade

6

Gerenciamento de Projetos

Estimativas, Git e metodologias ágeis na prática

7

Manutenção e Evolução

Tipos de manutenção, refatoração e documentação