Ficha 02 · Git, qualidade e PAP
- Usar Git correctamente
- Aplicar boas práticas
- Estruturar relatório PAP
- Preparar defesa
Parte I · Git
Exercício 1 · Comandos (15 pts)
Indica o comando Git para:
a) Iniciar repositório. ___
b) Preparar todos os ficheiros alterados. ___
c) Gravar com mensagem. ___
d) Enviar para o remoto. ___
e) Criar e mudar para nova branch "feature/login". ___
f) Ver histórico resumido. ___
a) git init
b) git add .
c) git commit -m "mensagem"
d) git push origin main
e) git checkout -b feature/login
f) git log --oneline
Exercício 2 · Conventional commits (15 pts)
Reescreve estas mensagens de commit no formato convencional:
a) "mudei coisas"
b) "agora o login funciona"
c) "arranjei o bug do total errado no carrinho"
d) "actualizei o readme"
a) Demasiado vaga — depende do que mudou, ex.: refactor: reorganiza módulo de utilizadores.
b) feat: adiciona autenticação de utilizador
c) fix: corrige cálculo do total no carrinho
d) docs: actualiza README com instruções de instalação
Formato: tipo: descrição no imperativo, presente, curta. Tipos: feat, fix, docs, refactor, test, chore.
Exercício 3 · .gitignore (10 pts)
Escreve um .gitignore para um projecto Python web com virtualenv, base SQLite e ficheiro de secrets.
# Ambiente
venv/
.venv/
__pycache__/
*.pyc
# Secrets
.env
*.key
# Base de dados local
*.sqlite3
*.db
# IDE / SO
.vscode/
.idea/
.DS_Store
# Build
dist/
build/
*.egg-info/
Crítico: .env (secrets) nunca vai para o Git.
Exercício 4 · Fluxo com branch + PR (10 pts)
Descreve, em comandos, o fluxo para desenvolver uma funcionalidade "carrinho" sem mexer directamente na main.
git checkout main
git pull # estar actualizado
git checkout -b feature/carrinho # branch própria
# ... desenvolver ...
git add .
git commit -m "feat: adiciona carrinho de compras"
git push -u origin feature/carrinho
# No GitHub/GitLab: abrir Pull Request
# → revisão (próprio ou colega/orientador)
# → merge para main
git checkout main
git pull # trazer o merge
git branch -d feature/carrinho # limpar branch local
main permanece sempre funcional; o trabalho arriscado fica isolado na branch.
Parte II · Qualidade
Exercício 5 · CI (10 pts)
a) O que é Integração Contínua (CI)?
b) Que vantagem traz a uma PAP individual?
a) CI é a prática de correr automaticamente testes (e linters/build) a cada push/PR, num servidor (ex.: GitHub Actions). Detecta regressões imediatamente.
b) Mesmo sozinho:
- Garante que main está sempre funcional.
- Apanha cedo código que parte testes (não descobrir na véspera da entrega).
- Demonstra maturidade técnica ao júri (badge verde, processo profissional).
- Força a ter testes desde o início.
Exercício 6 · Code smells (15 pts)
Identifica 3 problemas de qualidade neste código e como melhorar:
def p(d):
x = d['preco'] * d['qtd']
if d['tipo'] == 1:
x = x * 0.9
elif d['tipo'] == 2:
x = x * 0.8
return x
Problemas:
-
Nomes não descritivos —
p,d,xnão dizem nada. →calcular_total,item,total. -
Números mágicos —
1,2,0.9,0.8sem significado claro. → constantes ou enum:TIPO_PREMIUM,DESCONTO_PREMIUM = 0.10. -
Falta de validação — assume que as chaves existem e são números. → validar entrada ou usar
.get()com tratamento.
Melhorado:
DESCONTOS = {"premium": 0.10, "vip": 0.20}
def calcular_total(item: dict) -> float:
subtotal = item["preco"] * item["qtd"]
desconto = DESCONTOS.get(item.get("tipo"), 0)
return subtotal * (1 - desconto)
Mais legível, sem números mágicos, extensível.
Parte III · PAP
Exercício 7 · Estrutura do relatório (15 pts)
Lista a estrutura (capítulos) de um relatório de PAP e explica o objectivo de cada um em 1 frase.
- Introdução — apresenta o problema, motivação e objectivos do projecto.
- Análise de requisitos — define o que o sistema tem de fazer (funcionais e não-funcionais).
- Tecnologias e arquitectura — justifica as escolhas técnicas e mostra o desenho do sistema.
- Desenvolvimento — descreve a implementação, decisões e dificuldades superadas.
- Testes — explica a estratégia de testes e os resultados.
- Conclusões — avalia objectivos atingidos, limitações e trabalho futuro.
- Bibliografia e anexos — fontes consultadas e material de apoio.
Exercício 8 · Preparar a defesa (10 pts)
Vais defender a PAP perante um júri. Lista 5 cuidados para a apresentação oral.
- Ensaiar e cronometrar — respeitar o tempo (~15 min), falar com fluidez.
- Demo ao vivo com plano B — ter um vídeo gravado caso a demo falhe no momento.
- Slides limpos — pouco texto, mostrar o produto a funcionar, não código a rolar.
- Antecipar perguntas — porquê esta stack? como garantes segurança? como escalaria? o que farias diferente?
- Honestidade e calma — assumir limitações com consciência do que melhoraria; postura tranquila e clara.
Bónus: começar com o problema (porque é útil), não com a tecnologia.