Partilhar: WhatsApp
aulify
UC UC02837 · T. Desenv. Software

Ficha 02 · Git, qualidade e PAP

Controlo de versões, CI, relatório e defesa
Versão · Aluno
Tempo · 60 minutos
Cotação · 100 pontos
Aluno(a)
Turma
Data
Objectivos da ficha

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:

  1. Nomes não descritivosp, d, x não dizem nada. → calcular_total, item, total.

  2. Números mágicos1, 2, 0.9, 0.8 sem significado claro. → constantes ou enum: TIPO_PREMIUM, DESCONTO_PREMIUM = 0.10.

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

  1. Introdução — apresenta o problema, motivação e objectivos do projecto.
  2. Análise de requisitos — define o que o sistema tem de fazer (funcionais e não-funcionais).
  3. Tecnologias e arquitectura — justifica as escolhas técnicas e mostra o desenho do sistema.
  4. Desenvolvimento — descreve a implementação, decisões e dificuldades superadas.
  5. Testes — explica a estratégia de testes e os resultados.
  6. Conclusões — avalia objectivos atingidos, limitações e trabalho futuro.
  7. 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.

  1. Ensaiar e cronometrar — respeitar o tempo (~15 min), falar com fluidez.
  2. Demo ao vivo com plano B — ter um vídeo gravado caso a demo falhe no momento.
  3. Slides limpos — pouco texto, mostrar o produto a funcionar, não código a rolar.
  4. Antecipar perguntas — porquê esta stack? como garantes segurança? como escalaria? o que farias diferente?
  5. 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.