 ##  [Heisenbug](/fr/node/58939) 

 Définition

Un défaut logiciel dont le comportement observable change, disparaît ou devient irréprochable lorsqu'on tente de l'observer, d'instrumenter ou de déboguer — typiquement parce que l'acte d'observation perturbe le chronométrage, l'agencement mémoire ou l'ordonnancement de manière à masquer la cause racine.

 

 

 

 

 

 





## Principe

Principe

L'observation peut modifier l'état dans des systèmes complexes. Dans du code concurrent, optimisé ou sensible au temps, l'ajout de logs, de points d'arrêt ou de sondes peut altérer l'alignement mémoire, l'ordre d'ordonnancement ou les décisions d'optimisation, supprimant ainsi les conditions nécessaires à la manifestation du bug.

 

 

 

 

 





## Démonstration

Démonstration

Scénario concret : une condition de concurrence qui corrompt des données lorsque deux threads s'entrelacent dans une fenêtre de microsecondes ; l'insertion d'un printf ou l'attachement d'un débogueur décale le chronométrage et la corruption n'apparaît plus, rendant la reproduction et l'analyse racine difficiles.

 

 

 

 

## Mauvaise application

Mauvaise application

Rejeter un Heisenbug comme 'inexistant' parce qu'il disparaît à l'inspection, ou supposer que tous les bogues non déterministes sont des Heisenbugs. Une autre mauvaise utilisation est d'utiliser une instrumentation lourde qui dissimule le bogue au lieu d'un traçage ciblé et à faible impact ou d'un replay déterministe.

 

 

 

 

 





## Conséquence

Conséquence

Les Heisenbugs compliquent le débogage et augmentent la dépendance à des diagnostics non intrusifs, aux tests de stress et aléatoires, au record-and-replay déterministe et au renforcement du code. Mal diagnostiqués, ils conduisent à des efforts gaspillés et à des correctifs fragiles qui ne traitent pas la nondéterminisme sous-jacent.

 

 

 

 

## Inversion

Inversion

Rendre le bogue reproductible en contrôlant ou en enregistrant la nondéterminisme : utiliser des ordonnanceurs déterministes, des outils record-replay, des sondes plus légères, un échantillonnage accru ou ajouter des assertions et invariants qui exposent la défaillance sans perturber les conditions qui la provoquent.

 

 

 

 

 





## Limite

Limite

S'applique principalement aux défauts nondéterministes, sensibles au temps, à la concurrence ou à l'optimisation ; n'inclut pas les bogues qui se reproduisent systématiquement mais sont difficiles à trouver à cause de la complexité. Le terme est informel et anthropomorphique — son usage doit être diagnostique, pas une excuse pour une instrumentation insuffisante.

 

 

 

 

 





## Tension sémantique

Tension sémantique

Concurrence avec des termes comme bohrbug (déterministe, reproductible), mandelbug (complexe, émergent) et Schrödinbug (bogue qui devient apparent lorsqu'on le corrige). La tension est de savoir si la disparition sous observation signifie l'absence du défaut ou simplement le masquage de ses conditions de déclenchement.

 

 

 

 

 





## Synthèse

Synthèse

Un Heisenbug est la manifestation du principe plus large selon lequel l'observation modifie le comportement dans les logiciels complexes : le débogage doit donc utiliser des méthodes évitant la perturbation (traçage non intrusif) ou contrôler délibérément la nondéterminisme (record-replay, environnements déterministes) pour révéler les causes racines.