Questão de Engenharia de Software — Manutenção e Melhoria de Software (Reuso, Reengenharia, Refatoração, Engenharia Reversa) — FUNDATEC 2025
Engenharia de Software›Manutenção e Melhoria de Software (Reuso, Reengenharia, Refatoração, Engenharia Reversa)
Código
qa700071
Banca
FUNDATEC
Órgão
Pref Três de Maio
Ano
2025
Cargo
Prof (3 de Maio)
Ao revisar um trecho de código de um colega, um professor de linguagem computacional se depara com a seguinte situação: def process_data(input): data = [] for i in range(len(input)): if input[i] > 0: data.append(input[i] * 2) total = 0 for x in data: total += x avg = total / len(data) if data else 0 result = [] for val in data: if val > avg: result.append(val) return result Considerando as boas práticas de programação, qual alternativa descreve a melhor abordagem para refatorar esse código?
AApenas melhorar os nomes das variáveis e adicionar comentários explicando cada seção do código.
BManter a estrutura atual, mas adicionar tratamento de exceções para divisão por zero no cálculo da média.
CCombinar todos os loops em um único loop para melhorar a eficiência, mesmo que isso torne o código mais complexo.
DConverter o código para uma linguagem de programação mais eficiente, como C++, em vez de modificar a versão em Python.
EDividir o código em funções especializadas com nomes descritivos, substituir loops complexos por compreensões de lista e adicionar um docstring.
Revelar gabarito e comentário▾
GabaritoE — Dividir o código em funções especializadas com nomes descritivos, substituir loops complexos por compreensões de lista e adicionar um docstring.
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 de código: boas práticas e clareza
Gabarito: letra E. A melhor abordagem para refatorar o código apresentado é dividi-lo em funções especializadas com nomes descritivos, substituir loops complexos por compreensões de lista e adicionar um docstring — exatamente o que a alternativa E propõe. Isso segue o princípio da refatoração: melhorar a estrutura interna do código sem alterar seu comportamento externo, tornando-o mais legível, coeso e fácil de manter.
A refatoração é o processo de modificar um sistema de software para melhorar sua estrutura interna sem alterar o comportamento externo. O código original, embora funcional, apresenta vários problemas de legibilidade e organização: variáveis com nomes genéricos (data, input, x, val), múltiplos loops que poderiam ser simplificados, e toda a lógica concentrada em uma única função. O objetivo da refatoração não é apenas "fazer funcionar" — o código já funciona — mas torná-lo mais claro, coeso e fácil de manter.
A alternativa E aborda exatamente os três pilares da boa refatoração:
Dividir em funções especializadas: separar a lógica em funções com responsabilidades únicas (ex.: filtrar positivos, calcular média, filtrar acima da média) melhora a coesão e o reaproveitamento.
Substituir loops por compreensões de lista: em Python, compreensões de lista são mais concisas, legíveis e idiomáticas que loops tradicionais para transformações e filtros.
Adicionar docstring: documentar o propósito da função ajuda outros desenvolvedores (e o futuro você) a entender o código rapidamente.
O código refatorado poderia ficar assim:
def process_data(input):
"""Retorna os valores positivos dobrados que estão acima da média."""
doubled = [i * 2 for i in input if i > 0]
if not doubled:
return []
avg = sum(doubled) / len(doubled)
return [val for val in doubled if val > avg]
Perceba como a refatoração mantém o comportamento externo idêntico, mas o código fica mais curto, claro e expressivo. As outras alternativas falham por abordar apenas aspectos superficiais ou por sugerir mudanças que não são refatoração.
A pegadinha desta questão está em confundir refatoração com outras práticas: otimização prematura (alternativa C), mudança de linguagem (alternativa D) ou apenas cosmética (alternativa A). Refatoração é sobre melhorar a estrutura interna do código, não sobre performance ou reescrita em outra linguagem.
Refatoração: Definição (Melhora a estrutura interna, Sem alterar comportamento externo); Pilares (Funções especializadas, Compreensões de lista, Docstring); Não é (Otimização prematura, Mudança de linguagem, Apenas comentários)
Alternativa A — ❌ Incorreta
Apenas melhorar nomes de variáveis e adicionar comentários é uma melhoria superficial. A refatoração vai além: envolve reestruturar o código, extrair funções, simplificar lógica e melhorar o design. Comentários em excesso podem até ser um "code smell" — o ideal é que o código seja autoexplicativo, com nomes descritivos e funções bem definidas.
Alternativa B — ❌ Incorreta
O código já trata a divisão por zero com a expressão if data else 0. Adicionar tratamento de exceções seria redundante e não resolveria os problemas estruturais do código. A refatoração não se limita a corrigir bugs pontuais — ela busca melhorar a estrutura geral.
Alternativa C — ❌ Incorreta
Combinar todos os loops em um único loop para "melhorar a eficiência" é otimização prematura. O código atual tem complexidade O(n) — combinar loops não mudaria a complexidade assintótica e tornaria o código mais complexo e difícil de entender, violando o princípio KISS (Keep It Simple). Refatoração prioriza clareza, não micro-otimizações.
Alternativa D — ❌ Incorreta
Converter para C++ não é refatoração — é reescrita em outra linguagem. Refatoração preserva a linguagem e o comportamento externo, apenas melhora a estrutura interna. Além disso, trocar de linguagem é uma decisão de arquitetura muito mais ampla, que envolve custos, riscos e reescrita completa.
Alternativa E — ✅ Correta ⟵ GABARITO
Esta alternativa descreve precisamente as boas práticas de refatoração: dividir em funções especializadas (melhora coesão e reuso), usar compreensões de lista (código mais idiomático e legível em Python) e adicionar docstring (documentação clara do propósito). Essas mudanças melhoram a legibilidade e manutenibilidade sem alterar o comportamento externo — exatamente o que define refatoração.
PEGA ESSA DICA!
Na prova, identifique refatoração por três palavras-chave: estrutura interna, sem alterar comportamento externo e legibilidade. Se a alternativa mencionar mudança de linguagem, otimização de performance ou apenas comentários, descarte — não é refatoração.