Pular para o conteúdo
Próxima aulaGerenciamento de Dependências

Exercício 06: Code Smells

Cada grupo deve criar um exemplo de código com um code smell sorteado pelo professor, a partir do catálogo do Tópico 10. Nas próximas etapas, os colegas vão identificar e refatorar esses exemplos.

Cada grupo recebe um smell do catálogo abaixo:

Letra Smells
A Método Longo, Classe Grande
B Obsessão por Primitivos, Lista Longa de Parâmetros, Agrupamentos de Dados
C Classes Alternativas com Interfaces Diferentes, Recusa de Herança
D Comandos Switch, Campo Temporário
E Mudança Divergente, Cirurgia de Espingarda, Hierarquias de Herança Paralelas
F Comentários, Código Duplicado, Código Morto
G Classe Preguiçosa, Classe de Dados, Generalidade Especulativa
H Inveja de Função, Intimidade Inapropriada, Cadeia de Mensagens
I Homem do Meio, Classe de Biblioteca Incompleta
  • Um único smell dominante; o código deve parecer um programa real.
  • No máximo 3 a 4 classes/unidades e cerca de 40 a 60 linhas.
  • Deve compilar e executar sozinho, com saída determinística (sem aleatoriedade, horário, rede ou banco).
  • Sem dependências externas: Java 17 (só o JDK) ou Python 3.10+ (só a biblioteca padrão).
  • Não revele o smell no código, em comentários, nomes ou strings.
  • Sem nomes dos integrantes nos arquivos de código; a autoria fica no README.md.
  • Variem os domínios entre os grupos (evitem todos usar e-commerce ou banco).
GRUPO07/
├── README.md
└── src/

O README.md começa com a ficha de identificação e depois traz a intenção do código, como executar e a saída esperada:

---
grupo: GRUPO07
integrantes: [Fulano de Tal, Beltrano de Tal]
linguagem: python
dominio: "Biblioteca universitária"
smell: long-method
categoria: bloaters
execucao: "python src/main.py"
---
## Intenção do código
...
## Como executar
...
## Saída esperada
...

A intenção deve explicar o que o código faz, sem mencionar o smell.

Os colegas vão receber apenas o código e a intenção, sem a ficha — por isso o smell deve ficar oculto no restante do material.

Um pacote de exemplo está disponível em exemplo-code-smells.zip.

Um arquivo GRUPOxx.zip no AVA, com a pasta GRUPOxx/ como raiz, em UTF-8.

  • O pacote segue a estrutura e os nomes definidos?
  • O código compila e executa sem erros?
  • O smell é único e não óbvio?
  • O smell ficou oculto no código e na intenção?
  • O tamanho e o número de classes respeitam os limites?