Pesquisa · Mapa mental

Heisenbug

No jargão da programação de computadores, heisenbug é um bug de software que parece desaparecer ou alterar seu comportamento quando se tenta estudá-lo. O termo é um trocadilho com o nome de Werner Heisenberg, o físico que primeiro afirmou o efeito observador da mecânica quântica, que afirma que o ato de observar um sistema altera inevitavelmente seu estado. Em eletrônica, o termo tradicional é efeito de prova, em que anexar uma ponta de prova a um dispositivo muda seu comportamento.

Fonte: Wikipédia (pt)Atualizado em 10/07/2026
01

Exemplos

Imagem: qu1j0t3 · BY-NC · Openverse

Heisenbugs ocorrem porque tentativas comuns de depurar um programa, como inserir instruções de saída ou executá-lo com um depurador, geralmente têm o efeito colateral de alterar o comportamento do programa de maneiras sutis, como alterar os endereços de memória de variáveis e o tempo de sua execução. Um exemplo comum de heisenbug é um bug que aparece quando o programa é compilado com um compilador com suporte a otimização, mas não quando o mesmo programa é compilado sem otimização (como geralmente é feito com o propósito de examiná-lo com um depurador). Durante a depuração, os valores que um programa otimizado normalmente manteria nos registros são frequentemente colocados na memória principal. Isso pode afetar, por exemplo, o resultado de comparações de ponto flutuante, uma vez que o valor na memória pode ter alcance e precisão menores do que o valor no registrador. Da mesma forma, Heisenbugs podem ser causados por efeitos colaterais em expressões de teste usadas em asserções de tempo de execução em linguagens como C e C++, onde a expressão de teste não é avaliada quando as asserções são desativadas no código de produção usando a macro NDEBUG .

02

Termos relacionados

Imagem: Marlenecitybox · BY-SA · Openverse

Um bohrbug, por oposição, é um "bug bom e sólido". Como o modelo de átomo de Bohr determinístico, eles não mudam seu comportamento e são detectados com relativa facilidade. Um mandelbug (batizado em homenagem ao fractal de Benoît Mandelbrot) é um bug cujas causas são tão complexas que não podem ser reparadas ou fazem seu comportamento parecer caótico ou mesmo não determinístico. O termo também se refere a um bug que exibe um comportamento fractal (ou seja, auto-similaridade), revelando mais bugs (quanto mais fundo um desenvolvedor vai no código para corrigi-lo, mais bugs ele encontra). Um schrödinbug ou schroedinbug (nomeado em homenagem a Erwin Schrödinger e seu experimento de pensamento) é um bug que se manifesta na execução de software depois que um programador percebe que o código nunca deveria ter funcionado. Um hindenbug (nomeado após o desastre de Hindenburg) é um bug com comportamento catastrófico.

03

História do termo

Imagem: Odkq · BY-SA · Openverse

O termo também foi usado em 1985 por Jim Gray, em um artigo sobre falhas de software (e às vezes é erroneamente atribuído a ele por causa desta publicação) e também em 1986 por Jonathan Clark e Zhahai Stewart na lista de discussão (posteriormente Usenet grupo de notícias) comp.risks . Bruce Lindsay, pesquisador da IBM, afirmou em uma entrevista da ACM Queue em 2004 que estava presente quando o Heisenbug foi originalmente definido. Uma aparição anterior nas publicações da ACM é de 1983.

04

Resolução

Heisenbugs são difíceis de identificar e corrigir; muitas vezes, a tentativa de resolvê-los leva a mais comportamentos inesperados. Como o problema se manifesta como resultado de um bug de base separado, o comportamento pode ser difícil de prever e analisar durante a depuração. No geral, o número de heisenbugs identificados deve diminuir à medida que um software amadurece.

Vídeos recomendados

Fontes consultadas

Continue pesquisando