Pular para o conteúdo principal

Questão de Engenharia de Software — Git — FCC 2026

Engenharia de SoftwareGit
Código
fc142280
Banca
FCC
Órgão
ARTESP
Ano
2026
Cargo
Esp RT ( )

Uma equipe de TI de uma agência reguladora de transporte intermunicipal está desenvolvendo um sistema crítico para registrar infrações, gerenciar permissões e integrar com APIs externas. Deseja-se adotar um sistema de controle de versão que ofereça rastreabilidade, auditoria, suporte a release estável, branching para novos módulos e colaboração entre diferentes times (ex: fiscal, back-end, front-end).

 

Considerando Git e SVN, a abordagem mais apropriada para esse cenário é

  1. Aadotar Git distribuído com uso de branches leves para cada módulo (infrações, notificações, permissões), tags para release regulatórias (ex: "v1.0-regulação"), commit assinado (GPG) e controle centralizado via repositório remoto oficial, garantindo rastreabilidade, auditoria e colaboração modular sem comprometer a integridade do histórico.
  2. Butilizar SVN com trunk único para todos os desenvolvedores, garantindo centralização e simplificando o histórico, de modo que todo commit represente uma nova versão regulatória consolidada.
  3. Cempregar SVN com branches para cada módulo (infrações, notificações, permissões), criando cópias para desenvolvimento paralelo; e, ao final de cada iteração, os branches são mesclados ao trunk central para homologação.
  4. Dusar Git em modo distribuído, mas limitar-se a um fluxo centralizado, em que todos os desenvolvedores enviam diretamente para o repositório "oficial", sem ramificações complexas, para manter controle rígido sobre o histórico.
  5. Eadotar Git, mas proibir o uso de merge e branches: cada novo desenvolvimento deve ser feito por commit direto na linha principal para evitar divergências, visando manter simplicidade e evitar divergências entre times.
Revelar gabarito e comentário

GabaritoA — adotar Git distribuído com uso de branches leves para cada módulo (infrações, notificações, permissões), tags para release regulatórias (ex: "v1.0-regulação"), commit assinado (GPG) e controle centralizado via repositório remoto oficial, garantindo rastreabilidade, auditoria e colaboração modular sem comprometer a integridade do histórico.

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”.

Controle de Versão: Git vs SVN no cenário de sistema crítico

Gabarito: letra A. A alternativa A é a mais apropriada porque combina o Git distribuído — que oferece rastreabilidade, auditoria e suporte a branches leves e tags — com práticas de commit assinado (GPG) e um repositório remoto oficial como ponto central de controle, atendendo integralmente aos requisitos de rastreabilidade, auditoria, release estável e colaboração modular entre times. As demais alternativas ou subutilizam os recursos do Git (B, D, E) ou apresentam limitações do SVN que não atendem à necessidade de branching leve e colaboração distribuída (C).

O controle de versão é uma prática essencial da Gerência de Configuração de Software (GCS), que visa monitorar e registrar alterações em arquivos ao longo do tempo. Existem três modelos principais: local (armazena alterações em um único computador), centralizado (um servidor central armazena o repositório e os clientes interagem com ele) e distribuído (cada cliente mantém uma cópia completa do repositório e pode comunicar-se com outros clientes). O Git é o exemplo mais conhecido de sistema distribuído, enquanto o SVN (Apache Subversion) é o representante clássico do modelo centralizado.

A escolha entre Git e SVN depende diretamente das necessidades do projeto. O Git trata os dados como um conjunto de snapshots do sistema de arquivos, realiza a maioria das operações localmente (não depende de conexão com servidor), garante a integridade dos dados usando checksums (cada commit recebe um ID exclusivo de 40 caracteres, soma SHA-1) e não remove dados, apenas adiciona novas versões. Essas características tornam o Git ideal para cenários que exigem rastreabilidade completa, auditoria e colaboração entre múltiplos times, pois cada desenvolvedor tem uma cópia integral do histórico e pode trabalhar de forma independente, mesclando suas alterações posteriormente.

No cenário descrito — um sistema crítico para registrar infrações, gerenciar permissões e integrar APIs externas, com necessidade de rastreabilidade, auditoria, release estável, branching para novos módulos e colaboração entre diferentes times — o Git distribuído é a escolha natural. As branches leves do Git permitem que cada módulo (infrações, notificações, permissões) seja desenvolvido em paralelo sem interferência, as tags permitem marcar releases regulatórias (como "v1.0-regulação"), e o commit assinado (GPG) garante a autenticidade e integridade das alterações, essencial para auditoria. O repositório remoto oficial funciona como ponto central de integração, garantindo que o histórico seja preservado e que todos os times colaborem de forma coordenada.

A pegadinha central desta questão é a tentação de escolher o SVN por sua centralização, que parece mais "controlada" para um sistema crítico. No entanto, o SVN tem limitações significativas: branches são cópias completas (pesadas), o histórico é centralizado (depende do servidor) e a colaboração distribuída é limitada. O Git, mesmo sendo distribuído, pode ser usado com um fluxo centralizado (todos enviam para um repositório oficial), combinando o melhor dos dois mundos: a flexibilidade e rastreabilidade do modelo distribuído com o controle centralizado do repositório remoto. É exatamente essa combinação que a alternativa A descreve.

Guarde a distinção fundamental: Git = distribuído, branches leves, snapshots, operações locais; SVN = centralizado, branches pesadas, dependente do servidor. É nessa fronteira que as alternativas se dividem — as que propõem SVN ou que limitam o uso do Git (proibindo branches/merge) falham em atender aos requisitos de colaboração modular e rastreabilidade.

Critério

Git (distribuído)

SVN (centralizado)

Modelo

Distribuído (cada cliente tem cópia completa do repositório)

Centralizado (servidor central armazena o repositório)

Branches

Leves (snapshots, eficientes para paralelismo)

Pesadas (cópias completas do diretório)

Operações

Locais (não dependem de conexão com servidor)

Dependentes do servidor

Integridade

Checksums SHA-1 (cada commit tem ID exclusivo)

Revisões sequenciais

Colaboração

Múltiplos repositórios, mesclagem flexível

Um único servidor, colaboração limitada

Adequação ao cenário

Atende rastreabilidade, auditoria, branches leves, tags e colaboração entre times

Limitações em branching leve e colaboração distribuída

1Git (distribuído)
Branches leves
Operações locais
Checksums SHA-1
Fluxo centralizado possível
2SVN (centralizado)
Branches pesadas
Depende do servidor
Revisões sequenciais
3Requisitos do cenário
Rastreabilidade → Git
Auditoria → commit GPG
Release estável → tags
Colaboração modular → branches
Git vs SVN
LEVELsoulevel.com.br
Git vs SVN: Git (distribuído) (Branches leves, Operações locais, Checksums SHA-1, Fluxo centralizado possível); SVN (centralizado) (Branches pesadas, Depende do servidor, Revisões sequenciais); Requisitos do cenário (Rastreabilidade → Git, Auditoria → commit GPG, Release estável → tags, Colaboração modular → branches)

Alternativa A — ✅ Correta ⟵ GABARITO

A alternativa A descreve exatamente a abordagem mais apropriada: Git distribuído com branches leves para cada módulo (infrações, notificações, permissões), tags para releases regulatórias, commit assinado (GPG) para auditoria e controle centralizado via repositório remoto oficial. Essa combinação atende a todos os requisitos do enunciado: rastreabilidade (histórico completo e imutável), auditoria (commits assinados), release estável (tags), branching para novos módulos (branches leves) e colaboração entre times (modelo distribuído com ponto central de integração). O Git garante a integridade do histórico por meio de checksums SHA-1, e o repositório remoto oficial assegura que todos os times trabalhem sobre uma base comum, sem comprometer a integridade.

Alternativa B — ❌ Incorreta

A alternativa B propõe SVN com trunk único para todos os desenvolvedores. O erro está em afirmar que "todo commit represente uma nova versão regulatória consolidada" — isso é inviável e inadequado, pois mistura o conceito de commit (alteração incremental) com o de release (versão consolidada). Além disso, o SVN centralizado com trunk único não oferece o branching leve necessário para desenvolver módulos em paralelo (infrações, notificações, permissões) sem interferência entre times. A centralização do SVN até poderia simplificar o controle, mas sacrifica a colaboração modular e a rastreabilidade distribuída que o Git oferece, tornando a alternativa inadequada para o cenário.

Alternativa C — ❌ Incorreta

A alternativa C propõe SVN com branches para cada módulo, criando cópias para desenvolvimento paralelo e mesclando ao trunk central ao final de cada iteração. Embora o SVN suporte branches, elas são cópias completas do diretório, o que as torna pesadas e menos eficientes que as branches leves do Git. Além disso, o SVN é centralizado: o histórico depende do servidor, e a colaboração distribuída (cada time com sua cópia completa) não é possível. Para um sistema crítico com múltiplos times e necessidade de auditoria, o Git distribuído é superior, pois permite que cada time trabalhe de forma independente e mescle suas alterações com mais flexibilidade e rastreabilidade.

Alternativa D — ❌ Incorreta

A alternativa D propõe Git em modo distribuído, mas limitado a um fluxo centralizado, sem ramificações complexas. O erro está em "sem ramificações complexas" — o enunciado exige branching para novos módulos (infrações, notificações, permissões), e a alternativa D elimina essa possibilidade. Embora o fluxo centralizado (todos enviam para o repositório oficial) seja uma prática válida e até recomendada para controle rígido, a proibição de ramificações impede o desenvolvimento paralelo de módulos, que é um requisito explícito do cenário. A alternativa A já contempla o controle centralizado via repositório remoto, mas mantém as branches leves, que são essenciais para a colaboração modular.

Alternativa E — ❌ Incorreta

A alternativa E propõe proibir o uso de merge e branches, com todo desenvolvimento feito por commit direto na linha principal. Essa abordagem é totalmente inadequada para o cenário, pois elimina a capacidade de desenvolver módulos em paralelo (infrações, notificações, permissões) e aumenta drasticamente o risco de conflitos e divergências entre os times. A justificativa de "evitar divergências" é falha: sem branches e merge, os desenvolvedores seriam forçados a trabalhar sequencialmente, o que inviabiliza a colaboração entre diferentes times e compromete a rastreabilidade (cada commit direto na linha principal dificulta identificar a origem e o propósito das alterações). O Git foi projetado exatamente para suportar branches e merge de forma eficiente, e proibi-los é um contrassenso.

NÃO CAIA NESSA!

A banca explora a tentação da centralização para um sistema crítico. O candidato pode pensar que o SVN (centralizado) é mais "controlado" e, portanto, mais adequado. No entanto, o Git distribuído com repositório remoto oficial oferece o mesmo controle centralizado, mas com a flexibilidade de branches leves e a rastreabilidade distribuída que o SVN não possui. A pegadinha está em associar "controle" a "centralização" e esquecer que o Git pode ser usado de forma centralizada sem perder suas vantagens. Fique atento: a alternativa A é a única que combina distribuição + controle centralizado + branches + tags + assinatura GPG, atendendo a todos os requisitos do enunciado.

PEGA ESSA DICA!

Para questões que comparam Git e SVN, monte uma tabela mental com os critérios-chave: modelo (distribuído vs centralizado), branches (leves vs cópias completas), operações (locais vs dependentes do servidor), integridade (checksums SHA-1 vs revisões sequenciais) e colaboração (múltiplos repositórios vs um único servidor). Quando o enunciado pedir rastreabilidade, auditoria e colaboração entre times, o Git é quase sempre a resposta — mas verifique se a alternativa mantém as branches e não as proíbe, como nas alternativas D e E.

Gabarito: letra A

Link permanente: /questoes/fc142280