Questão de Engenharia de Software — Refatoração — INSTITUTO AOCP 2023
Engenharia de Software›Refatoração
Código
qq971003
Banca
INSTITUTO AOCP
Órgão
IF-MA
Ano
2023
Nível
Superior
Cargo
Analista De Tecnologia Da Informação - Desenvolvimento De Sistemas
Em relação ao refactoring no contexto de testes de software, assinale a alternativa que apresenta uma prática recomendada para garantir a qualidade e a manutenibilidade do código.
ARealizar refactoring apenas quando houver bugs no código, ignorando a legibilidade e a estrutura.
BEvitar o uso de testes automatizados, pois podem atrasar o processo de refactoring.
CRealizar refactoring apenas no início de um projeto de desenvolvimento de software, antes de adicionar novas funcionalidades.
DFazer refactoring sem executar testes após as mudanças, pois o processo de refactoring não deve alterar o comportamento do código.
ERealizar refactoring em pequenos passos, garantindo que os testes continuem passando após cada mudança.
Revelar gabarito e comentário▾
GabaritoE — Realizar refactoring em pequenos passos, garantindo que os testes continuem passando após cada mudança.
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 e Testes de Software
Gabarito: letra E. A prática recomendada para garantir qualidade e manutenibilidade durante o refactoring é realizar mudanças em pequenos passos, executando os testes após cada alteração para assegurar que o comportamento externo do código permaneça inalterado. Essa é a essência do refactoring: melhorar a estrutura interna sem modificar a funcionalidade, e os testes automatizados são o instrumento que valida essa premissa.
Refatoração (ou refactoring) é o processo de modificar um sistema de software para melhorar sua estrutura interna sem alterar seu comportamento externo. O objetivo é aprimorar o design, aumentar a legibilidade e facilitar a manutenção, reduzindo a chamada dívida técnica. O termo foi popularizado por Martin Fowler no livro "Refactoring: Improving the Design of Existing Code", que descreve diversas técnicas, como extrair método, renomear variável e simplificar condicionais.
A regra de ouro da refatoração é que ela não adiciona funcionalidades — apenas reorganiza o código existente. Por isso, é fundamental que o sistema possua uma suíte de testes automatizados antes de iniciar qualquer refatoração. Esses testes funcionam como uma rede de segurança: se, após uma mudança, algum teste falhar, o desenvolvedor sabe imediatamente que o comportamento foi alterado de forma indesejada. Sem testes, é impossível garantir que a refatoração não introduziu bugs.
Na prática, a refatoração deve ser feita em pequenos passos incrementais. Em vez de reescrever grandes blocos de código de uma só vez, o desenvolvedor aplica uma transformação pequena e segura, executa os testes, e só então prossegue para a próxima mudança. Esse ciclo — mudar, testar, verificar — é o que minimiza riscos e mantém o código sempre em um estado funcional. Essa prática é tão importante que é uma das doze práticas do Extreme Programming (XP), metodologia ágil que valoriza a melhoria contínua do código.
A banca explora exatamente a confusão entre refatoração e outras atividades de desenvolvimento. Muitos candidatos pensam que refatorar é "reescrever o código para adicionar funcionalidades" ou que pode ser feito sem testes, mas isso contraria o conceito fundamental. A alternativa correta é a que reflete a prática disciplinada: pequenos passos com verificação contínua por meio de testes.
1Mudança pequena
2Executar testes
3Verificar comportamento
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Realizar refactoring apenas quando houver bugs, ignorando legibilidade e estrutura, é o oposto do que a prática recomenda. A refatoração é uma atividade contínua de melhoria do código, não uma correção reativa de defeitos. Ela deve ser aplicada sempre que o código apresentar "bad smells" (maus cheiros), como duplicação, métodos longos ou acoplamento excessivo, independentemente da existência de bugs. Ignorar a legibilidade e a estrutura é justamente o que a refatoração combate.
Alternativa B — ❌ Incorreta
Evitar testes automatizados é um erro grave. Os testes são o pré-requisito essencial para a refatoração segura, pois garantem que o comportamento externo não foi alterado. Sem eles, qualquer mudança estrutural pode introduzir defeitos silenciosos. A afirmação inverte a relação: testes não atrasam o processo; eles o viabilizam.
Alternativa C — ❌ Incorreta
A refatoração não é uma atividade restrita ao início do projeto. Ela deve ser aplicada ao longo de todo o ciclo de vida do software, sempre que houver necessidade de melhorar a estrutura do código. Adiar a refatoração para o início do projeto ignora que o código evolui e se deteriora com o tempo, acumulando dívida técnica. A prática recomendada é refatorar continuamente, em pequenos incrementos.
Alternativa D — ❌ Incorreta
Fazer refactoring sem executar testes após as mudanças é arriscado e contrário à boa prática. Embora a refatoração não deva alterar o comportamento externo, é impossível garantir isso sem testes. A execução dos testes é exatamente o mecanismo que valida a premissa de que o comportamento permaneceu inalterado. A alternativa tenta justificar a ausência de testes com um argumento teórico, mas na prática os testes são indispensáveis.
Alternativa E — ✅ Correta ⟵ GABARITO
Realizar refactoring em pequenos passos, garantindo que os testes continuem passando após cada mudança, é a prática recomendada. Esse ciclo incremental — mudar, testar, verificar — minimiza riscos, mantém o código sempre funcional e permite detectar imediatamente qualquer alteração indesejada de comportamento. É exatamente o que a literatura e as metodologias ágeis, como o XP, preconizam.