Pular para o conteúdo principal

Questão de Engenharia de Software — Geral — INSTITUTO AOCP 2023

Engenharia de SoftwareGeral
Código
qa542751
Banca
INSTITUTO AOCP
Órgão
CODEBA
Ano
2023
Cargo
Ana Por ( )

No contexto do desenvolvimento de software, refatoração é uma técnica que visa melhorar a estrutura interna do código sem alterar seu comportamento externo. Assinale a alternativa correta sobre refatoração.

  1. ARefatoração torna o código mais difícil de entender, aumentando a complexidade.
  2. BAo refatorar, os testes existentes são irrelevantes, pois a refatoração não afeta o comportamento do software.
  3. CRefatoração pode ajudar a simplificar o código, tornando-o mais modular e reutilizável.
  4. DRefatoração frequentemente resulta em uma completa reescrita do código, alterando seu comportamento externo.
  5. ECode smells são indícios de que o código está bem otimizado e não requer refatoração.
Revelar gabarito e comentário

GabaritoC — Refatoração pode ajudar a simplificar o código, tornando-o mais modular e reutilizável.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Refatoração: conceito e características

Gabarito: letra C. Refatoração é a técnica de modificar a estrutura interna do código sem alterar seu comportamento externo, e uma de suas finalidades é justamente simplificar o código, tornando-o mais modular e reutilizável — exatamente o que a alternativa C afirma. As demais alternativas distorcem o conceito, seja invertendo seus efeitos, seja negando a importância dos testes ou confundindo refatoração com reescrita completa.

A refatoração (do inglês refactoring) é um processo disciplinado de reorganização do código que visa melhorar sua estrutura interna — legibilidade, coesão, acoplamento, eliminação de redundâncias — sem modificar o comportamento externo observável pelo usuário. O termo foi popularizado por Martin Fowler no livro Refactoring: Improving the Design of Existing Code, que a define como "o processo de mudar um sistema de software de tal forma que não altere o comportamento externo do código [projeto], embora melhore sua estrutura interna".

A técnica é uma prática central em metodologias ágeis, especialmente no Extreme Programming (XP), onde é aplicada continuamente para manter o código limpo e adaptável. A ideia é que, ao refatorar, o desenvolvedor examina o projeto existente em busca de redundâncias, elementos não utilizados, algoritmos ineficientes, estruturas de dados inadequadas e outras falhas de projeto que possam ser corrigidas para produzir um código melhor. Por exemplo, um componente com baixa coesão (que realiza três funções pouco relacionadas) pode ser refatorado em três componentes distintos, cada um com alta coesão, facilitando integração, teste e manutenção.

Um ponto crucial é que a refatoração não adiciona funcionalidade — ela apenas reorganiza o que já existe. Por isso, é fundamental que o sistema possua testes automatizados antes de refatorar: eles garantem que o comportamento externo não foi alterado após as mudanças estruturais. Sem testes, a refatoração se torna arriscada, pois não há como verificar se a estrutura interna foi melhorada sem quebrar o que já funcionava.

A distinção que mais confunde em provas é entre refatoração e reescrita completa (ou reengenharia). Enquanto a refatoração é uma mudança incremental e cirúrgica que preserva o comportamento, a reescrita envolve recriar o sistema do zero, frequentemente alterando funcionalidades e arquitetura. Outra confusão comum é associar refatoração a code smells: na verdade, code smells (maus cheiros no código) são indícios de que o código precisa de refatoração, não de que está bem otimizado.

Guarde o par estrutura interna × comportamento externo: é exatamente nessa fronteira que as alternativas desta questão se dividem. A alternativa correta é a que reconhece os benefícios da refatoração (simplificação, modularidade, reutilização), enquanto as incorretas negam esses benefícios ou confundem o escopo da técnica.

1Conceito
Melhora estrutura interna
Não altera comportamento externo
Não adiciona funcionalidade
2Benefícios
Simplifica o código
Modularidade
Reutilização
3Pré-requisito
Testes automatizados
4Distinções
Reescrita completa (altera comportamento)
Code smells (indicam necessidade de refatorar)
Refatoração
LEVELsoulevel.com.br
Refatoração: Conceito (Melhora estrutura interna, Não altera comportamento externo, Não adiciona funcionalidade); Benefícios (Simplifica o código, Modularidade, Reutilização); Pré-requisito (Testes automatizados); Distinções (Reescrita completa (altera comportamento), Code smells (indicam necessidade de refatorar))

Alternativa A — ❌ Incorreta

Afirma que a refatoração torna o código mais difícil de entender e aumenta a complexidade. Isso é o oposto do que a técnica busca: a refatoração melhora a clareza e a legibilidade do código, dividindo-o em módulos mais coesos e de maior reaproveitamento, evitando duplicação. O objetivo central é justamente simplificar a estrutura interna, não complicá-la.

Alternativa B — ❌ Incorreta

Diz que os testes existentes são irrelevantes na refatoração. Isso é falso e perigoso: os testes automatizados são fundamentais para a refatoração, pois são eles que garantem que o comportamento externo não foi alterado após as mudanças estruturais. Sem testes, não há como verificar se a refatoração não introduziu defeitos. A refatoração depende de uma suíte de testes confiável.

Alternativa C — ✅ Correta ⟵ GABARITO

Afirma que a refatoração pode ajudar a simplificar o código, tornando-o mais modular e reutilizável. Isso está correto: ao refatorar, o desenvolvedor reorganiza o código para melhorar sua estrutura, o que frequentemente resulta em módulos menores, mais coesos e com maior potencial de reutilização. A simplificação e a modularidade são benefícios diretos da técnica, como visto no exemplo de extrair método (Extract Method) e na divisão de componentes de baixa coesão em componentes de alta coesão.

Alternativa D — ❌ Incorreta

Afirma que a refatoração frequentemente resulta em uma completa reescrita do código, alterando seu comportamento externo. Isso confunde refatoração com reescrita/reengenharia: a refatoração é uma mudança incremental que preserva o comportamento externo, enquanto a reescrita envolve recriar o sistema do zero, frequentemente com alterações de funcionalidade. A refatoração não altera o comportamento externo — esse é seu princípio fundamental.

Alternativa E — ❌ Incorreta

Diz que code smells são indícios de que o código está bem otimizado e não requer refatoração. Isso é invertido: code smells (maus cheiros) são sinais de que o código precisa de refatoração. São padrões de código que indicam problemas de design, como duplicação, métodos longos, classes grandes, etc. A presença de code smells é justamente o gatilho para aplicar a refatoração, não um sinal de qualidade.

NÃO CAIA NESSA!

A banca explora a inversão de conceitos: a alternativa E troca o significado de code smells (que indicam necessidade de refatoração, não otimização), e a alternativa D confunde refatoração com reescrita completa. O candidato que não domina a definição precisa de refatoração — "melhorar a estrutura interna sem alterar o comportamento externo" — cai facilmente nessas armadilhas. Com treino, você reconhece essas inversões de longe 💪.

PEGA ESSA DICA!

Para questões de refatoração, memorize o par estrutura interna × comportamento externo e a relação com testes automatizados. Se a alternativa mencionar "reescrita", "alteração de comportamento" ou "complexidade aumentada", desconfie imediatamente — são distratores clássicos. E lembre-se: code smells = precisa refatorar, nunca o contrário.

Gabarito: letra C

Link permanente: /questoes/qa542751