Schrödinbug é um tipo único de erro de software que existe no código mas nunca se manifesta até que um desenvolvedor leia essa seção do código e perceba que contém um bug. O termo é um trocadilho com o “gato de Schrödinger”: o bug existe e não existe simultaneamente até ser observado. Segundo Wikipédia (2026), este termo é usado principalmente no jargão profissional e descreve mais um fenômeno psicológico do que técnico no trabalho do desenvolvedor.
Principais Pontos
Schrödinbug é um termo do jargão profissional de desenvolvedores que designa um bug de software que existe no código por anos mas nunca causa uma falha até que alguém leia essa seção do código e perceba que há um erro. Depois disso, o bug começa a se manifestar.
O nome faz referência clara ao experimento mental de Erwin Schrödinger com um gato que está simultaneamente vivo e morto até que o observador abra a caixa. No caso de um bug — ele está simultaneamente “funcionando” e “quebrado” até que um desenvolvedor olhe o código.
É importante entender que Schrödinbug não é uma característica técnica da execução do programa mas sim um fenômeno cognitivo. O código contém objetivamente um erro, mas uma combinação de circunstâncias ou características dos dados de entrada nunca ativou o caminho de execução problemático até que o desenvolvedor analisou o código.
De um ponto de vista técnico, um Schrödinbug é um defeito lógico comum que nunca entrou no fluxo de execução do programa porque todas as chamadas seguiram o caminho “feliz”. Assim que um desenvolvedor lê o código, muda seu comportamento ou modo de teste — e o bug se manifesta.
O nome Schrödinbug é uma contração do sobrenome do físico Erwin Schrödinger e da palavra “bug” (erro). Em 1935, Schrödinger propôs um experimento mental ilustrando o problema da interpretação de Copenhague da mecânica quântica.
O experimento com o gato: em uma caixa selada estão uma substância radioativa, um contador Geiger e um frasco de veneno. Se a substância decair, o contador aciona um mecanismo que quebra o frasco e o gato morre. Enquanto a caixa está fechada, o gato está simultaneamente vivo e morto (superposição de estados).
A analogia com a programação: enquanto ninguém leu a seção de código que contém o erro, o programa funciona corretamente — o bug está simultaneamente “vivo” e “morto”. Assim que um desenvolvedor abre o arquivo e lê o código, a superposição colapsa e o bug começa a se manifestar (“matando” o comportamento correto do programa).
Schrödinbug é principalmente um fenômeno psicológico e não uma característica técnica da execução do código. Examinemos o mecanismo de sua ocorrência sob a perspectiva da psicologia cognitiva do programador.
Quando um desenvolvedor escreve código, ele está em estado de “fluxo” e pode não notar um erro lógico. O código passa pela revisão, testes, vai para produção e funciona por meses. Então o desenvolvedor volta a este código para refatorar, lê com atenção e de repente vê: “Isto é claramente um bug!”
Depois de perceber o erro, o desenvolvedor começa a procurar deliberadamente cenários onde o bug se manifeste. Ele altera dados de teste, executa o depurador, percorre ramos do código — e em algum momento realmente causa a falha. O bug é “encontrado” precisamente porque o desenvolvedor agora sabe onde procurar.
O viés cognitivo — viés de confirmação — desempenha um papel fundamental. Ao ver um erro no código, o desenvolvedor subconscientemente começa a procurar sua manifestação no comportamento do programa. Qualquer log incomum ou falha é imediatamente interpretado como consequência do erro encontrado, mesmo que a causa real possa ser diferente.
Vamos examinar vários cenários reais da prática de desenvolvimento que descrevem um Schrödinbug clássico.
Em um aplicativo Android, um desenvolvedor usou a flag `isEnabled = true` por padrão, embora a nova funcionalidade devesse estar desativada. O código com a flag incorreta funcionou em produção por três meses — ninguém reclamou porque a funcionalidade realmente deveria estar ativada. Quando o desenvolvedor leu o código para preparar o próximo lançamento, percebeu o erro, mudou a flag para `false` — e imediatamente recebeu um relatório de bug de que a funcionalidade havia desaparecido.
Um método de biblioteca continha um óbvio erro de divisão por zero mas nunca era chamado em cenários reais. A biblioteca era usada em cinco projetos e ninguém notou o problema. Durante uma revisão de código, um novo desenvolvedor apontou o erro — e após a correção descobriu-se que um dos projetos dependia daquele comportamento “incorreto”.
Schrödinbug ocupa um lugar único na classificação de erros de software. Vamos compará-lo com outros tipos.
| Tipo de bug | Manifestação antes de ler o código | Manifestação depois de ler o código | Natureza |
|---|---|---|---|
| Schrödinbug | Nunca | Começa a se manifestar | Psicológica |
| Bohrbug | Sempre com os mesmos dados | Sempre com os mesmos dados | Determinista |
| Mandelbug | Às vezes, caoticamente | Às vezes, caoticamente | Sistêmica |
| Heisenbug | Consistentemente | Desaparece no depurador | Técnica |
Schrödinbug é o único tipo de bug cuja manifestação depende diretamente da consciência do desenvolvedor sobre o erro. Esta é sua natureza paradoxal.
Embora Schrödinbug seja mais um fenômeno psicológico, existem métodos práticos para minimizar seu impacto em um projeto.
Quanto mais cedo um erro for detectado, menor a probabilidade de cair na categoria Schrödinbug. Programação em par e revisões de código obrigatórias para cada linha de código reduzem o número de defeitos ocultos ao mínimo.
Analisadores estáticos de código (ESLint, detekt, ktlint, SpotBugs) detectam erros potenciais em tempo de compilação sem esperar que um humano os note. Linters podem identificar bugs “dormindo” em ramos de código morto.
A cobertura de testes de todos os ramos do código, incluindo os raramente usados, é a única maneira de garantir que um Schrödinbug não espere anos por seu momento. Ferramentas como JaCoCo para Java ajudam a rastrear ramos não cobertos.
// Example of potential Schrödinbug — bug in rarely called branch
def processOrder(Order order) {
if (order.isRush()) {
// This branch was never tested in production
sendRushNotification(order) // there may be a bug here
}
}
Neste exemplo, um Schrödinbug pode existir por anos se pedidos urgentes nunca entrarem no sistema. Assim que o primeiro pedido desse tipo aparecer, o bug se manifestará — mas até aquele momento, os desenvolvedores pensam que o código está correto.
Perguntas Frequentes
Schrödinbug é um fenômeno real do jargão profissional, mas descreve mais um fenômeno cognitivo e psicológico do que uma categoria técnica de erro. O termo é usado por desenvolvedores para descrever uma situação onde perceber um erro no código leva à sua primeira manifestação.
O paradoxo é que o bug existe objetivamente mas subjetivamente não se manifesta até ser descoberto. Antes de ler o código, o programa funciona corretamente embora tenha um erro. Depois de ler, o bug “materializa-se” e começa a causar falhas.
A analogia é direta: assim como o gato de Schrödinger está simultaneamente vivo e morto até que a caixa seja aberta, um Schrödinbug está simultaneamente “funcionando” e “quebrado” até que o desenvolvedor abra o arquivo de código e o leia. A observação colapsa a superposição.
Sim, um Schrödinbug pode ser perigoso se o erro oculto estiver em uma seção crítica do código raramente executada — por exemplo, no processamento de pagamentos sob condições específicas ou na lógica de recuperação após uma falha. Descobrir tal erro no pior momento possível pode levar a problemas sérios.
O único método confiável é garantir 100% de cobertura de código com testes, incluindo todos os ramos e casos limite. Se cada linha de código for executada em pelo menos um teste, um Schrödinbug será detectado durante os testes e não após a leitura do código em produção.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também