Questão de Engenharia de Software — Geral — FUNDATEC 2025
Engenharia de Software›Geral
Código
qa699984
Banca
FUNDATEC
Órgão
SBC
Ano
2025
Cargo
POSCOMP ( )
Para modernizar seu sistema de core banking desenvolvido há décadas, uma grande instituição financeira adotou um processo metodológico formal. A primeira etapa consistiu em uma análise de inventário, na qual todos os sistemas legados foram catalogados e priorizados por sua importância estratégica e custo de manutenção. Uma vez selecionado o sistema principal, a equipe realizou a reestruturação dos seus documentos técnicos, organizando e digitalizando manuais antigos. Em seguida, iniciou-se a fase de engenharia reversa, na qual os analistas estudaram o código-fonte para extrair e entender as regras de negócio, a arquitetura e o modelo de dados implícitos. Com esse entendimento, procederam com a reestruturação do código para melhorar sua modularidade e a reestruturação dos dados para otimizar o esquema do banco de dados. Finalmente, na fase de engenharia direta, a equipe utilizou as especificações e componentes aprimorados para reconstruir e implantar uma nova versão do sistema sobre uma plataforma tecnológica moderna, preservando a funcionalidade original. O conjunto completo dessas atividades, executadas de forma sequencial e integrada, descreve um processo formal conhecido na Engenharia de Software como:
ARefatoração de software.
BManutenção adaptativa de software.
CReengenharia de software.
DMelhoria do processo de software.
EGarantia da qualidade de software.
Revelar gabarito e comentário▾
GabaritoC — Reengenharia de software.
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”.
Reengenharia de Software: o processo completo de revitalização de sistemas legados
Gabarito: letra C. O enunciado descreve, de forma sequencial e integrada, as três fases clássicas da reengenharia de software — análise de inventário, engenharia reversa e engenharia direta —, com o objetivo de reconstruir um sistema legado sobre uma plataforma moderna, preservando sua funcionalidade. Esse é exatamente o escopo da reengenharia, que se distingue da refatoração (mudança interna sem alterar comportamento), da manutenção adaptativa (ajuste pontual a mudanças no ambiente) e da melhoria de processo (aprimoramento do processo de desenvolvimento, não do software em si).
A reengenharia de software é um processo formal de revitalização de sistemas legados, que busca extrair o conhecimento embutido no código antigo e reconstruí-lo com tecnologia atual, mantendo a funcionalidade original. Ela se diferencia de outras atividades de manutenção por ser um processo completo e estruturado, que envolve a análise do sistema existente, a recuperação de sua especificação e a reconstrução em uma nova base tecnológica.
O processo de reengenharia, conforme descrito por autores como Sommerville e Pressman, segue uma sequência típica de atividades. A primeira é a análise de inventário, na qual todos os sistemas legados são catalogados e priorizados com base em critérios como importância estratégica e custo de manutenção. Em seguida, vem a reestruturação dos documentos, que organiza e digitaliza a documentação existente, muitas vezes obsoleta ou incompleta. A terceira fase é a engenharia reversa, na qual os analistas estudam o código-fonte para extrair e entender as regras de negócio, a arquitetura e o modelo de dados implícitos — ou seja, recuperar a especificação a partir do código. Depois, ocorre a reestruturação do código e a reestruturação dos dados, melhorando a modularidade e otimizando o esquema do banco de dados. Finalmente, a engenharia direta utiliza as especificações e componentes aprimorados para reconstruir e implantar a nova versão do sistema sobre uma plataforma tecnológica moderna.
A reengenharia é motivada pela necessidade de acompanhar a evolução tecnológica e de negócios. Sistemas legados, desenvolvidos há décadas, muitas vezes rodam em plataformas obsoletas, com alto custo de manutenção e dificuldade de integração com novas tecnologias. A reengenharia permite modernizar esses sistemas sem perder o conhecimento de negócio embutido neles, que muitas vezes não está documentado em lugar nenhum além do próprio código.
A distinção entre reengenharia e outros conceitos é crucial para resolver esta questão. A refatoração é uma técnica de melhoria interna do código, que altera sua estrutura sem mudar seu comportamento externo, geralmente aplicada de forma contínua e incremental. A manutenção adaptativa é um tipo de manutenção que modifica o software para se adaptar a mudanças no ambiente (novo sistema operacional, nova legislação, etc.), sem alterar sua funcionalidade principal. A melhoria do processo de software (como CMMI ou MPS.BR) foca em aprimorar o processo de desenvolvimento, não o software em si. A garantia da qualidade é um conjunto de atividades para assegurar que o software atenda aos requisitos de qualidade.
A pegadinha desta questão está em confundir reengenharia com refatoração. A refatoração é uma atividade mais restrita, focada na melhoria interna do código, enquanto a reengenharia é um processo mais amplo, que envolve engenharia reversa e direta, reestruturação de código e dados, e reconstrução em nova plataforma. O enunciado deixa claro que o processo inclui análise de inventário, engenharia reversa e engenharia direta — elementos que não fazem parte da refatoração.
Guarde a fronteira entre reengenharia e refatoração: a reengenharia é um processo completo de revitalização, com engenharia reversa e direta; a refatoração é uma técnica pontual de melhoria interna do código. É exatamente nessa fronteira que as alternativas se dividem.
1Análise de inventário
2Reestruturação de documentos
3Engenharia reversa
4Reestruturação de código e dados
5Engenharia direta
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
A refatoração é uma técnica de melhoria interna do código que altera sua estrutura sem mudar seu comportamento externo. Ela é aplicada de forma contínua e incremental, geralmente em pequenos passos, e não envolve as fases de análise de inventário, engenharia reversa e engenharia direta descritas no enunciado. A refatoração é uma parte da reengenharia, mas não o processo completo.
Alternativa B — ❌ Incorreta
A manutenção adaptativa é um tipo de manutenção que modifica o software para se adaptar a mudanças no ambiente, como novo sistema operacional, nova legislação ou novas regras de negócio. Ela é uma atividade pontual, que não envolve a análise de inventário, a engenharia reversa ou a reconstrução completa do sistema em nova plataforma. O enunciado descreve um processo muito mais amplo e estruturado.
Alternativa C — ✅ Correta ⟵ GABARITO
A reengenharia de software é exatamente o processo descrito no enunciado: análise de inventário, reestruturação de documentos, engenharia reversa, reestruturação de código e dados, e engenharia direta. O objetivo é reconstruir um sistema legado sobre uma plataforma moderna, preservando sua funcionalidade original. Esse é o conceito clássico de reengenharia, conforme descrito por autores como Sommerville e Pressman.
Alternativa D — ❌ Incorreta
A melhoria do processo de software (como CMMI ou MPS.BR) foca em aprimorar o processo de desenvolvimento, não o software em si. Ela envolve a definição de processos, métricas, treinamento e melhoria contínua, mas não a análise de inventário, a engenharia reversa ou a reconstrução de um sistema legado. O enunciado descreve a modernização de um sistema específico, não a melhoria do processo.
Alternativa E — ❌ Incorreta
A garantia da qualidade de software é um conjunto de atividades para assegurar que o software atenda aos requisitos de qualidade, como testes, revisões e auditorias. Ela é uma atividade transversal, que pode ser aplicada em qualquer fase do desenvolvimento, mas não é o processo de modernização descrito no enunciado. A garantia da qualidade não envolve engenharia reversa nem reconstrução do sistema.
A reengenharia de software é o processo formal de revitalização de sistemas legados, que combina engenharia reversa (extrair conhecimento do código) e engenharia direta (reconstruir com tecnologia moderna). É a resposta que melhor descreve o conjunto completo de atividades apresentado no enunciado.