Exercício 06: Code Smells
Exercício - Code Smells
Seção intitulada “Exercício - 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.
Sorteio
Seção intitulada “Sorteio”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 |
Regras do código
Seção intitulada “Regras do código”- 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).
Estrutura do pacote
Seção intitulada “Estrutura do pacote”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: GRUPO07integrantes: [Fulano de Tal, Beltrano de Tal]linguagem: pythondominio: "Biblioteca universitária"smell: long-methodcategoria: bloatersexecucao: "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.
Entrega
Seção intitulada “Entrega”Um arquivo GRUPOxx.zip no AVA, com a pasta GRUPOxx/ como raiz, em UTF-8.
Avaliação
Seção intitulada “Avaliação”- 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?