Plano da Disciplina — Engenharia de Software¶
Identificação¶
| Carga horária | 40 horas (8 aulas de 5h, ou 16 aulas de 2h30) |
| Pré-requisitos | Lógica de programação; experiência com pelo menos uma linguagem imperativa ou orientada a objetos |
| Stack de exemplo | Python 3.12+, pytest, FastAPI, Git/GitHub, GitHub Actions |
Objetivos de aprendizagem¶
Ao final desta disciplina, o estudante deverá ser capaz de:
- Explicar o que caracteriza software como produto de engenharia e por que a disciplina de Engenharia de Software existe.
- Comparar modelos de processo de software (cascata, incremental, ágil) e justificar quando cada um é adequado.
- Elicitar e especificar requisitos funcionais e não funcionais, tanto no formato clássico quanto como user stories.
- Projetar a arquitetura de um sistema simples, aplicando padrões de projeto e arquitetura reconhecidos.
- Escrever código com qualidade, aplicando práticas de clean code, revisão de código e análise estática.
- Escrever e executar testes automatizados (unitários, integração, aceitação), aplicando a pirâmide de testes e TDD.
- Construir um pipeline de CI/CD com GitHub Actions que valida, testa e publica um software automaticamente.
- Analisar a evolução de um sistema em produção, identificando débito técnico e propondo refatorações.
Cronograma¶
| Aula | Conteúdo | Capítulo |
|---|---|---|
| 1 | O que é software; a crise do software; qualidades de um bom software | Introdução à Engenharia de Software |
| 2 | Modelos de processo: cascata, incremental, orientado a reúso; Manifesto Ágil, Scrum, Kanban, DevOps | Processos: do Cascata ao Ágil e DevOps |
| 3 | Tipos de requisitos, elicitação, user stories, validação e gerência de requisitos | Especificação de Requisitos |
| 4 | Princípios de projeto, arquitetura em camadas, microsserviços, padrões de projeto | Projeto e Arquitetura de Software |
| 5 | Clean code, revisão de código, análise estática, controle de versão colaborativo | Implementação e Qualidade de Código |
| 6 | Defeito/erro/falha, pirâmide de testes, TDD; hands-on: testes com pytest em uma API FastAPI | Testes e Validação |
| 7 | Integração contínua, entrega contínua, containers; hands-on: pipeline com GitHub Actions | Integração e Entrega Contínua (CI/CD) |
| 8 | Tipos de manutenção, débito técnico, refatoração, observabilidade; revisão geral | Evolução, Manutenção e Débito Técnico |
Metodologia¶
Aulas expositivas dialogadas intercaladas com demonstrações práticas de código. As aulas 6 e 7 são majoritariamente práticas, com um projeto guiado (API REST em FastAPI) usado como fio condutor para testes automatizados e CI/CD. Recomenda-se que o estudante reproduza os exemplos de código em seu próprio ambiente.
Avaliação¶
- Prova 1 (25%) — após o Capítulo 3: fundamentos, processos e requisitos.
- Prova 2 (25%) — após o Capítulo 5: projeto, arquitetura e qualidade de código.
- Trabalho prático (35%) — implementação de uma API com suíte de testes (pytest) e pipeline de CI/CD (GitHub Actions) funcional, entregue ao final do Capítulo 7.
- Prova 3 (15%) — Capítulo 8: evolução e manutenção de software.
Bibliografia da disciplina¶
- SOMMERVILLE, Ian. Engenharia de Software. 10. ed. Pearson, 2019.
- PRESSMAN, Roger S.; MAXIM, Bruce R. Engenharia de Software: Uma Abordagem Profissional. 8. ed. McGraw Hill, 2016.
- Manifesto para Desenvolvimento Ágil de Software. Disponível em: agilemanifesto.org.
- FOWLER, Martin. Refactoring: Improving the Design of Existing Code. 2. ed. Addison-Wesley, 2018.