Disciplina do curso de Engenharia de Software da PUC Minas
- 2°Sem 2024
- 1°Sem 2025
- 2°Sem 2025
- Aulas em PDF
- Cronograma
- Atalhos
- Laboratórios
- Projetos com Spring Boot
- Docker CLI Cheat Sheet
- Plano de Ensino
-
📕 Software Engineering – Ian Sommerville
Obra clássica que aborda de forma abrangente os principais conceitos, processos e práticas da engenharia de software, amplamente utilizada em cursos e na indústria. -
📘 Engenharia de Software Moderna - Marco Tulio Valente
Livro gratuito e atualizado que trata da engenharia de software com foco em práticas modernas, como integração contínua, microserviços e DevOps, com exemplos em Java e Python. -
📙 Análise e Projeto de Sistemas – Alan Dennis, Barbara Haley Wixom, Roberta M. Roth
Livro que aborda metodologias e técnicas modernas para análise e projeto de sistemas, incluindo modelagem de processos, requisitos e diagramas UML, com forte aplicação prática em projetos reais. -
📚 IEEE SWEBOK – Software Engineering Body of Knowledge
- PDF - Guia oficial do IEEE que organiza e descreve o corpo de conhecimento essencial da engenharia de software, servindo como referência para profissionais, educadores e certificações.
- 🧠 Blog - Martin Fowler
- 📕 Patterns of Enterprise Application Architecture - Martin Fowler
- 📕 Refactoring: Improving the Design of Existing Code - Martin Fowler
- 📄 Blog - Clean Architecture - Robert C. Martin (Uncle Bob)
- 📙 Clean Architecture – Robert C. Martin (Uncle Bob)
- 📘 Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions - Gregor Hohpe, Bobby Woolf
- 📔 Introdução à Arquitetura de Design de Software – Paulo Silveira, Guilherme Silveira, Fabio Kung, Guilherme Moreira
- 📙 Designing Software Architectures – Humberto Cervantes & Rick Kazman
- 📗 Software Architecture in Practice – Len Bass, Paul Clements, Rick Kazman
- 📒 Fundamentals of Software Architecture – Mark Richards & Neal Ford
- 📄 Architectural Styles and the Design of Network-based Software Architectures – Roy Fielding (REST)
- 📂 awesome-software-architecture (GitHub)
- 🛰️ Thoughtworks Technology Radar
- 📙 Princípios de Análise e Projeto de Sistemas com UML - Eduardo Bezerra
- 📘 UML Distilled – Martin Fowler
- 📕 UML Essencial - Martin Fowler
- 📒 Applying UML and Patterns – Craig Larman
- 📗 Fundamentos Do Desenho Orientado A Objeto Com UML - Jones Meilir Page
- 📖 UML Diagram Types - Visual Paradigm (guia ilustrado)
- 📕 Design Patterns: Elements of Reusable Object-Oriented Software – GoF (Gamma, Helm, Johnson, Vlissides)
- 📘 Head First Design Patterns – Eric Freeman & Elisabeth Robson
- 📗 Domain-Driven Design Distilled - Vaughn Vernon
- 📂 design-patterns-for-humans (Explicações simples)
- 📦 Refactoring.Guru – Exemplos em múltiplas linguagens
- 📕 Code Complete – Steve McConnell
- 📘 Clean Code – Robert C. Martin
- 📔 The Clean Coder – Robert C. Martin
- 📗 Design It! – Michael Keeling
- 📂 awesome-static-analysis
- 🗞️ ACM Transactions on Software Engineering and Methodology
- 🧪 Journal of Software Maintenance and Evolution (ACM)
- 📈 Journal of Software: Evolution and Process (Wiley)
- 📄 IEEE Software - Measuring Software Quality
- 📖 IEEE - Transactions on Software Engineering
- 📦 Requirements Engineering - Springer
- 🖼️ Draw.io (Diagramas)
- 🎓 Astah - Licença gratuita para estudantes
- 📐 PlantUML - Diagramas UML
- 📖 PlantUML - Guia oficial
- 🎨 Figma
- 🌟 StarUML
- 🧩 C4 Model – Modelo para visualização de arquitetura de software
IDE (Ambiente de Desenvolvimento Integrado) e editores especializados ajudam a escrever, depurar e manter código com mais eficiência. Ferramentas como IntelliJ IDEA e VS Code oferecem recursos como autocompletar, depuração visual, integração com Git, suporte a frameworks como Spring e muito mais.
Ao se cadastrar no GitHub Student Developer Pack, você garante acesso gratuito à versão Ultimate das ferramentas da JetBrains, como o IntelliJ IDEA Ultimate 🧠💻. Essa é uma excelente oportunidade para utilizar recursos avançados de desenvolvimento — tudo sem custo para estudantes! 🚀
1️⃣ Adicione seu e-mail institucional da PUC Minas (terminado em @sga.pucminas.br
) como e-mail secundário na sua conta do GitHub em https://github.com/settings/emails
2️⃣ Acesse a caixa de entrada do e-mail e clique no link de confirmação enviado pelo GitHub.
3️⃣ Ao acessar o GitHub Student Developer Pack, permita que o navegador compartilhe sua localização atual 🌍.
4️⃣ Selecione "PUC Minas" como sua instituição, envie um print da sua carteirinha digital do app PUC Mobile ou um comprovante de matrícula recente como forma de verificação. Depois, aguarde até 2 dias úteis para que o selo GitHub Pro 🏅 seja ativado na sua conta.
5️⃣ Acesse: https://www.jetbrains.com/shop/eform/students
➡ Vá até a aba GitHub e clique em "Authorize with GitHub" 🔑.
6️⃣ Instale o IntelliJ IDEA e, ao abrir o programa, vá em "Ativar licença". Escolha a opção "Log in with GitHub", faça login com sua conta GitHub (que já possui o selo GitHub Pro 🏅 e que você autorizou previamente no site da JetBrains — passo 5), e a licença Ultimate será ativada automaticamente 🎉.
🏁 Pronto! Agora você pode aproveitar todos os benefícios do GitHub Pro 🏅, incluindo:
- Acesso gratuito às ferramentas profissionais da JetBrains, como o IntelliJ IDEA Ultimate 🧠💻
- GitHub Copilot com sugestões inteligentes de código (com testes gratuitos por tempo limitado) 🤖
- Repositórios privados ilimitados 🔒
- Insights avançados de contribuições, métricas e estatísticas dos seus projetos 📊
- Ferramentas de CI/CD integradas com GitHub Actions ⚙️
- Integrações com dezenas de serviços e ferramentas educacionais 🧩
Esses recursos ajudam a elevar seu aprendizado, organizar seus projetos e turbinar sua produtividade como desenvolvedor 💼🚀
🔗 Confira todos os detalhes do plano GitHub Pro para estudantes aqui:
A documentação oficial é a principal referência para aprender, consultar funcionalidades e entender o comportamento da linguagem Java e suas bibliotecas padrão. Essencial tanto para iniciantes quanto para desenvolvedores experientes.
O ecossistema Spring oferece suporte completo para criação de aplicações Java robustas, modulares e escaláveis. O Spring Boot, em especial, simplifica a configuração e o desenvolvimento de APIs RESTful, facilitando a integração com bancos de dados, autenticação, mensageria, entre outros.
- 🚀 Spring Initializr - Gerador de projetos Spring
- 📘 Documentação Spring Boot
- 🎓 Curso de monitoria - Como criar uma API RESTful com Spring Boot
Frameworks frontend ajudam a criar interfaces responsivas e modernas, muitas vezes utilizados junto com tecnologias como JSF, Thymeleaf ou APIs REST em Java.
Clientes REST permitem enviar requisições HTTP (GET, POST, PUT, DELETE), testar endpoints, autenticações e visualizar respostas com facilidade.
Ferramentas como Docker, Fly.io, Vercel e Heroku permitem criar ambientes isolados, implantar APIs e serviços em nuvem de forma simples, escalável e muitas vezes gratuita para projetos educacionais.
- 🐳 Docker Desktop
- 🐳 Docker Hub
- ☁️ Fly.io
- ☁️ Heroku
- ☁️ Vercel
Essas ferramentas são fundamentais para persistência de dados em aplicações Java. MongoDB (NoSQL) e PostgreSQL (relacional) são amplamente utilizados em projetos web modernos.
Ferramentas como Grafana e Prometheus permitem acompanhar o comportamento da aplicação, uso de recursos e definir alertas para garantir estabilidade em ambientes produtivos.
Frameworks como JUnit e Mockito são essenciais para escrever testes unitários e mocks. Selenium e Selenide permitem testes automatizados em navegadores, garantindo qualidade e confiança em cada entrega.
Plataformas como Mercado Pago e Stripe oferecem SDKs para Java que facilitam pagamentos online, geração de cobranças, webhooks e checkout transparente.
O Twilio permite envio de SMS, ligações, mensagens de WhatsApp e muito mais, podendo ser facilmente integrado a backends Java para notificações automatizadas e comunicação em tempo real.
- 🌐 Twilio - Plataforma de comunicação (SMS, voz, WhatsApp etc.)
twilio - Repositório oficial no GitHub
- 📚 Twilio Docs
Swagger facilita a criação de APIs REST bem documentadas, com suporte a testes via interface gráfica e geração automática de contratos e documentação OpenAPI para serviços Java.
- 🌐 Swagger - Ferramenta para design, documentação e testes de APIs REST
swagger-api - Repositório oficial no GitHub
- 📚 Swagger Docs
Ferramentas para análise estatística de código, detecção de code smells, métricas de qualidade e identificação de más práticas de programação.
- PMD: Ferramenta que verifica problemas comuns em código Java, como variáveis não utilizadas, duplicação de código e estilos de codificação.
- SonarQube: Plataforma para análise contínua de qualidade de código, cobrindo múltiplas linguagens. Avalia bugs, vulnerabilidades e cobertura de testes.
- Qodana: Plataforma de análise estática de código desenvolvida pela JetBrains. Integra-se com IDEs, CI/CD e repositórios para detectar code smells, vulnerabilidades de segurança e violações de boas práticas, com suporte a múltiplas linguagens como Java, Kotlin, PHP, Python e JavaScript.
- JNose: Ferramenta focada na identificação de test smells e design smells em código Java. Ajuda na compreensão de problemas relacionados à testabilidade e manutenibilidade.
- Code Climate: Ferramenta de análise contínua de qualidade de código que gera métricas como complexidade ciclomática, duplicação, cobertura de testes e code smells. Suporta diversas linguagens e se integra com GitHub, GitLab e outros.
- CodeQL: Plataforma de análise de segurança e qualidade de código da GitHub, que permite executar consultas para detectar vulnerabilidades, bugs e más práticas em diversos tipos de código fonte.
- CK: Ferramenta de linha de comando para análise estática de código Java. Extrai métricas como CBO, LCOM, WMC, RFC, DIT, NOM e LOC, úteis para avaliar a complexidade e a qualidade do código.
Relatórios anuais e pesquisas globais ajudam a entender as principais linguagens, ferramentas, salários, preferências e tendências no mercado de desenvolvimento de software. São ótimos para orientar decisões de carreira e identificar habilidades em alta.
- DevSkiller Report 2025
- Stack Overflow Developer Survey 2025
- Stack Overflow Developer Survey 2024
- JetBrains Developer Ecosystem 2024
- GitHub Octoverse 2024
🧑🤝🧑 Exemplo de slides para apresentação em grupo:
📘 Exemplos de README de projeto:
Exemplos de portfólio profissional:
- 🌐 Portfólio
- 📦 Lib utilizada - VantaJS: https://www.vantajs.com/
- 📖 VantaJS GitHub: https://github.com/tengbao/vanta
GitHub
João Marcelo Carvalho (Aluno do curso de Engenharia de Software da PUC Minas - Campus Coração Eucarístico):
- 🌐 Portfólio
- 📦 Lib utilizada - NextJS: https://nextjs.org/
GitHub
- 🌐 Portfólio
- 📦 Lib utilizada - Shadcn: https://ui.shadcn.com/
- 📖 Shadcn Docs: https://ui.shadcn.com/docs/registry/getting-started
GitHub
- Componente React: react-terminal-ui
- Demonstração: react-terminal-ui/demo
- Styling: ines/termynal
- 🌐 Portfólio
- 📦 Lib utilizada - Three JS: https://threejs.org/
- 📖 Three JS Docs: https://threejs.org/docs/
- Repositório do website
GitHub
- https://portfolio-starter-template.webflow.io/
- https://craig-roush-portfolio-template.webflow.io/
- https://alex-grant-template.webflow.io/
- https://dexter-morgan.webflow.io/
- https://novo-demo.squarespace.com/
- https://kester-demo.squarespace.com/
- https://pt.wix.com/website-template/view/html/1913
O Figma é uma das principais ferramentas de design de interfaces e prototipagem colaborativa do mercado. Permite criar layouts, fluxos de navegação e componentes reutilizáveis de forma integrada entre designers e desenvolvedores. Com recursos de colaboração em tempo real, facilita a iteração rápida e a validação de ideias, sendo amplamente adotado por equipes ágeis e projetos orientados à experiência do usuário (UX/UI).
O Figma é uma das principais ferramentas de design de interfaces e prototipagem colaborativa do mercado. Permite criar layouts, fluxos de navegação e componentes reutilizáveis de forma integrada entre designers e desenvolvedores. Com recursos de colaboração em tempo real, facilita a iteração rápida e a validação de ideias, sendo amplamente adotado por equipes ágeis e projetos orientados à experiência do usuário (UX/UI).
- Figma - Community - Template - Dev 1
- Figma - Community - Template - Dev 2
- Figma - Community - Template - Dev 3
- Figma - Community - Template - Dev 4
- Figma - Community - Template - Dev 5
- Figma - Community - Template - Dev 6
- Figma - Templates - AWS Diagram Software
- Figma - Community - Template - AWS Diagram Software
- Figma - Community - Template - Architecture Diagram Components
- Figma - Community - Example - Architecture Diagram Components - Multiplayer
- Figma - Templates - C4 Model Examples
- Figma - Community - The C4 Model for Figma
- Figma - Community - Free Flowchart C4 Model for Visualising Software Architecture
docker --version
docker build -t minha-aplicacao .
docker build --platform linux/amd64 -t minha-aplicacao .
docker images
docker run -d -p 8080:8080 minha-aplicacao
docker run --platform linux/amd64 -d -p 8080:8080 minha-aplicacao
docker ps
docker stats
Comandos Docker: Guia rápido
Comando | Descrição |
---|---|
docker run | Executa um novo contêiner a partir de uma imagem. |
docker ps | Lista os contêineres em execução. |
docker ps -a | Lista todos os contêineres, incluindo os que não estão em execução. |
docker images | Lista todas as imagens locais disponíveis. |
docker rmi | Remove uma ou mais imagens. |
docker rm | Remove um ou mais contêineres. |
docker build | Cria uma nova imagem a partir de um Dockerfile. |
docker pull | Baixa uma imagem do Docker Hub ou de um repositório remoto. |
docker push | Envia uma imagem para um repositório remoto no Docker Hub. |
docker exec | Executa um comando em um contêiner em execução. |
docker logs | Exibe os logs de um contêiner. |
docker network | Gerencia redes Docker. |
docker volume | Gerencia volumes para persistência de dados. |
docker-compose up | Inicia e orquestra múltiplos contêineres definidos no docker-compose.yml. |
docker-compose down | Para e remove os contêineres, redes e volumes definidos no docker-compose.yml. |
docker stats | Exibe estatísticas em tempo real sobre o uso de recursos de contêineres em execução. |
docker inspect | Mostra informações detalhadas sobre um contêiner ou imagem. |
docker start | Inicia um contêiner que foi parado. |
docker stop | Para um contêiner em execução. |
docker restart | Reinicia um contêiner. |
docker pause | Pausa um ou mais contêineres em execução. |
docker unpause | Retoma um ou mais contêineres que foram pausados. |
docker commit | Cria uma nova imagem a partir das alterações em um contêiner. |
docker tag | Adiciona uma nova tag a uma imagem existente. |
docker login | Faz login em um repositório Docker. |
docker logout | Faz logout de um repositório Docker. |
docker search | Busca imagens no Docker Hub. |
docker pull | Baixa uma imagem do Docker Hub ou de um repositório remoto. |
docker cp | Copia arquivos ou diretórios entre o sistema de arquivos do contêiner e o host. |
docker volume create | Cria um novo volume Docker. |
docker volume rm | Remove um ou mais volumes. |
docker network create | Cria uma nova rede Docker. |
docker network rm | Remove uma ou mais redes. |
docker network ls | Lista todas as redes Docker. |
docker history | Mostra o histórico de camadas de uma imagem. |
Obs: Para iniciar um code review, você precisa abrir um pull request (PR) no repositório. O PR é a solicitação para mesclar suas alterações no branch principal. Depois de aberto, você e seus colegas podem navegar pelas mudanças, clicar nas linhas de código para adicionar comentários e discutir melhorias diretamente no PR.
A classe UserService
atualmente contém lógica de acesso direto ao banco de dados usando EntityManager
. Para seguir o princípio da separação de responsabilidades e melhorar a testabilidade do código, considere extrair essa lógica para um DAO (UserDAO
).
- Redução do acoplamento entre a camada de serviço e a persistência.
- Facilidade para substituir a implementação do DAO futuramente (por exemplo, ao trocar Hibernate por outra tecnologia).
- Facilidade para criar mocks e testar a lógica de negócio isoladamente.
- Criar uma classe
UserDAO
com métodos comofindById(Long id)
esave(User user)
. - Injetar essa classe no
UserService
. - Mover a lógica de persistência para o DAO.
Um roadmap é um guia visual que apresenta etapas, habilidades ou conhecimentos necessários para atingir um objetivo específico. Ele ajuda a organizar o aprendizado ou desenvolvimento ao longo do tempo, mostrando caminhos recomendados e prioridades.
Veja também:
A arquitetura de um app Spring Boot é como um ecossistema bem orquestrado, onde cada componente tem um papel essencial para garantir a escalabilidade, manutenibilidade e organização do sistema.
🔍 Entender a fundo cada uma dessas peças é o que diferencia um bom desenvolvedor!
Confira abaixo o papel fundamental de cada componente ilustrado no GIF:
- 🎬 Gif criado por Victor Targino Von Melentovytch
Componente | Descrição |
---|---|
🧭 Controller | É a primeira linha de contato, recebendo as requisições HTTP e devolvendo as respostas. Atua como a interface da aplicação. |
🧠 Service | Contém as regras de negócio da aplicação. É onde a lógica central é executada, separada da interface e da persistência. |
💾 Repository | Responsável pela comunicação com o banco de dados, abstraindo as operações de persistência e consulta. |
🔗 JPA (Java Persistence API) | Atua como uma ponte entre objetos Java e tabelas do banco de dados, facilitando o mapeamento e a persistência dos dados. |
🌐 REST | Define os padrões de comunicação via HTTP, essenciais para a construção de APIs modernas e interoperáveis. |
📦 Entity | Representa uma tabela do banco de dados como um objeto Java. Base para o mapeamento e a persistência dos dados. |
🧪 Testes | Garante que todas as funcionalidades funcionem como esperado. Pilar para a qualidade e robustez do software. |
📤 DTOs (Data Transfer Objects) | Objetos leves usados para transportar dados entre camadas, evitando o envio de informações desnecessárias. |
📚 Swagger | Ferramenta que gera uma documentação interativa da API, facilitando o entendimento e uso por outros desenvolvedores. |
🔐 Security | Cuida da autenticação (quem você é) e autorização (o que você pode fazer), protegendo os recursos da aplicação. |
⚙️ Configuration | Centraliza as configurações da aplicação, como portas, credenciais e parâmetros de comportamento. |
🚨 Exception Handler | Centraliza o tratamento de erros, permitindo respostas consistentes e amigáveis em caso de falhas. |
✅ Conhecer a arquitetura do Spring Boot ajuda a escrever sistemas mais limpos, coesos e testáveis. Cada camada tem sua função e respeitar essa separação é o primeiro passo para a excelência no desenvolvimento backend.
O Spring Boot continua sendo uma das ferramentas mais poderosas e utilizadas por desenvolvedores Java. Sua proposta de simplificar o desenvolvimento de aplicações robustas e prontas para produção o tornou o padrão de fato no desenvolvimento backend moderno.
Em 2025, dominar o Spring Boot é essencial para quem deseja se destacar como desenvolvedor backend. Com a crescente adoção de arquiteturas de microserviços e práticas nativas de nuvem, a demanda por profissionais especializados nesse ecossistema só aumenta.
O roadmap abaixo vai te guiar desde os conceitos fundamentais até os tópicos mais avançados, combinando teoria e prática de forma progressiva. Você entenderá como o ecossistema evoluiu — com recursos como compilação nativa, melhorias de performance e integração com a nuvem — e como aplicar esses conhecimentos no desenvolvimento de aplicações reais.
Um roadmap é um guia visual que apresenta etapas, habilidades ou conhecimentos necessários para atingir um objetivo específico. Ele ajuda a organizar o aprendizado ou desenvolvimento ao longo do tempo, mostrando caminhos recomendados e prioridades.
- 📘 Spring Boot Roadmap 2025 – AmigosCode
- 📗 Spring Boot Roadmap – roadmap.sh
Java Developer Roadmap – kamranahmedse/developer-roadmap (GitHub)