vignette|upright=1|Le Mac triste : écran indiquant un code erreur sur les premières versions du MacIntosh d'Apple.

En informatique, un bug ou bogueAu Québec, la graphie bogue est plus fréquente dans l'usage et reflète mieux la prononciation usuelle que la graphie étymologique bug. Par ailleurs, la graphie bogue est recommandée en France par la Délégation générale à la langue française et aux langues de France (DGLFLF), au Canada et en Belgique. Voir la section terminologie. (prononcé en français européen et en français nord-américain) est un défaut de conception d'un programme informatique à l'origine d'un dysfonctionnement.

La gravité du dysfonctionnement peut aller de bénigne, causant par exemple des défauts d'affichage mineurs à majeure, tels un plantage du système pouvant entraîner de graves accidents, par exemple la destruction en vol de la première fusée Ariane 5, en 1996.

Un bug peut résider dans une application, dans les logiciels tiers utilisés par cette application, voire dans le firmware d'un composant matériel comme ce fut le cas du bug de la division du PentiumBug qui a affecté les premières versions de ce processeur.. Un correctif (patch) est un morceau de logiciel destiné à corriger un ou plusieurs bugs.

Description Les bugs sont une des causes de dysfonctionnement des appareils informatiques ; parmi les autres causes de dysfonctionnement, on trouve : Les erreurs de manipulation, les virus informatiques — des logiciels malveillants qui falsifient les logiciels présents dans l'appareil. Mais aussi le dépassement des capacités du matériel - mémoire pleine, réseau saturé, processeur occupé - ainsi que l'absence de compatibilité, les pannes du matériel informatique, les valeurs incorrectes des paramètres de configuration et les influences extérieures (température et champs magnétiques). Un bug peut provoquer un plantage c'est-à-dire un arrêt inattendu d'un logiciel voire d'importantes pertes d'informations ou dans des cas extrêmes une véritable catastrophe (voir explosion du vol 501 de la fusée Ariane 5). Une faille de sécurité est un défaut mineur qui ne provoque pas de dysfonctionnement en utilisation courante, mais permet à un utilisateur malicieux ou un logiciel malveillant d'effectuer des opérations non autorisées à partir d'un exploit. Un système critique est un dispositif informatique dont le dysfonctionnement peut mettre en danger la santé et la vie des gens et des écosystèmes, provoquer des importants dégâts matériels ou avoir des répercussions sur la stabilité économique et politique.

Terminologie Le mot anglais , signifiant insecte, appartient au jargon des ingénieurs de matériel et représentant les problèmes qui y survenaient. L'utilisation du terme pour décrire les défauts de systèmes mécaniques date d'au moins avant les années 1870. Thomas Edison, entre autres, utilisait le mot dans ses notesEdison to Puskas, , Edison papers, Edison National Laboratory, U.S. National Park Service, West Orange, N.J., cité dans ..

Le terme « bogue » est référencé dans le dictionnaire Larousse en ligne avec pour définition : « Défaut de conception ou de réalisation d'un programme informatique, qui se manifeste par des anomalies de fonctionnement de l'ordinateur.. »

vignette|redresse=1|Photo du « premier cas réel de bug (insecte) », dans le journal d'entretien du Harvard Mark conservé à la Smithsonian Institution.

Le Trésor de la langue française informatisé ne retient le mot « bogue » que dans son acception de « Enveloppe piquante de la châtaigne, de la faîne, de la noisette et de certaines graines de légumineuses ».

La Commission d’enrichissement de la langue française, l'Office québécois de la langue française et la Direction de la langue française (Belgique) recommandent le terme « bogue » ainsi que les dérivés déboguer, débogage et débogueur...

Le terme est parfois faussement attribué à Grace Hopper. Elle constata dans son journal d'entretien, conservé à la Smithsonian Institution, en date du , , que deux contacts d'un relais causaient le mauvais fonctionnement du Harvard Mark II, l'un des premiers ordinateurs électromécaniques.

Hopper ne trouva pas le bug, comme elle le reconnaissait volontiers. Les opérateurs qui l'ont trouvé plus tard, y compris William « Bill » Burke, du laboratoire d'armes naval étaient familiers avec le terme d'ingénierie et amusés ont gardé l'insecte avec l'annotation « premier cas réel de bug trouvé »....

était un terme utilisé par les ingénieurs en mécanique et électricité, expliquant les anomalies rencontrées dans l'équipement, longtemps avant que Grace Hopper eût entendu parler de ce motLe départ de l'intrigue du film Brazil est une illustration de cette anecdote : un insecte provoque un court-circuit dans une machine, transformant le nom Tuttle en Buttle ; ici, le met à jour les excès de la bureaucratie..

Causes Dans son livre paru en 1987, Frederick Brooks dit que la présence de bugs dans les logiciels n'est pas un accident mais est due à la nature même des logiciels, autrement dit, il existe des bugs dans les logiciels parce que ce sont des logiciels. Il dit également qu'il n'existe pas de balle en argent - un outil miracle - pour parer aux bugs, faisant ici allusion à une légende du Moyen Âge. selon laquelle seule une balle en argent, évocatrice de la couleur de la Lune, peut parer au loup-garou..

Les logiciels sont des produits invisibles et immatériels, leur modification ne requiert pas de matière première. L'évolution très rapide du marché informatique engendre une forte demande en changement. Tous ces facteurs font que les changements dans les logiciels sont beaucoup plus fréquents que dans d'autres produits tels que les automobiles ou les bâtiments.

Les ordinateurs sont parmi les produits les plus complexes que l'homme ait fabriqué, et ils ont par conséquent un très grand nombre d'états. Les logiciels sont plus complexes que les ordinateurs, et, contrairement à une automobile, aucune pièce ne se ressemble. La conformité à de nombreuses normes, caractéristique des domaines proches de la télécommunication, accroît la complexité de ces derniers. Les logiciels sont de plus des produits invisibles, qui ne peuvent pas être représentés dans un espace géométrique, les représentations graphiques de logiciels comportent souvent deux, voire trois ou quatre diagrammes qui correspondent chacun à une réalité différente.

Conséquences Erreurs Les bugs peuvent amener les logiciels à tenter d'effectuer des opérations impossibles à réaliser (exceptions) : division par zéro, recherche d'informations inexistantes. Ces opérations - qui ne sont jamais utilisées lors de fonctionnement correct du logiciel - déclenchent un mécanisme à la fois matériel et logiciel qui met alors hors service le logiciel défaillant, ce qui provoque un crash informatique ou un déni de service.

Un chien de garde est un dispositif électronique autonome qui sert à déceler les dysfonctionnements. Ce mécanisme est souvent utilisé avec les systèmes critiques et l'informatique industrielle.

L'écran bleu de la mort est, dans le langage populaire, le nom donné au message de mise hors service des systèmes d'exploitation Microsoft Windows, qui s'affiche lorsqu'une exception est décelée au cœur du système d'exploitation. La Kernel panic est le message affiché dans des conditions similaires sur les systèmes d'exploitation UNIX.

Dysfonctionnements courants Une fuite de mémoire est un dysfonctionnement dû à un bug dans les opérations d'allocation de mémoire. Avec ce dysfonctionnement, la quantité de mémoire utilisée par le logiciel défaillant va en augmentant continuellement. Si le logiciel défaillant arrive à utiliser la quasi-totalité de la mémoire disponible, celui-ci gêne alors le déroulement des autres logiciels et les entraîne à des dysfonctionnements.

Une erreur de segmentation est un dysfonctionnement dû à un bug dans des opérations de manipulations de pointeurs ou d'adresses mémoire. Le logiciel défaillant va tenter de lire ou d'écrire des informations dans un emplacement de mémoire (segment) qui n'existe pas ou qui ne lui est pas autorisé. Le mécanisme de détection des exceptions provoque alors la mise hors service du logiciel défaillant.

Un dépassement d'entier est un dysfonctionnement dû à un bug dans des opérations de calcul mathématique. Le logiciel défaillant va tenter d'effectuer un calcul dont le résultat est supérieur à la valeur maximum autorisée. Le mécanisme de détection des exceptions provoque alors la mise hors service du logiciel défaillant.

Un dépassement de tampon est un dysfonctionnement dû à un bug. Un logiciel qui doit écrire des informations dans un emplacement déterminé et limité de mémoire (mémoire tampon) dépasse les limites de cet emplacement et va alors écrire des informations sur un emplacement destiné à un autre usage, cette modification inopinée entraine une exécution erratique du logiciel, qui peut se terminer par une erreur de segmentation ou un dépassement de capacité. C'est une faille de sécurité courante des serveurs qui est souvent exploitée par les pirates informatiques. voir Exploit.

Un dépassement de pile est un dysfonctionnement dans lequel la taille de la pile d'exécution d'un logiciel dépasse la capacité de la mémoire tampon qui la contient, ce qui provoque des dysfonctionnements similaires à un dépassement de tampon. La pile d'exécution est une structure de données stockée en mémoire qui contient l'état du déroulement des automatismes du logiciel (voir processus (informatique)), cette structure est enregistrée dans une mémoire tampon dont la taille est sur-dimensionnée. Un dépassement de pile résulte d'un déroulement erroné à la suite d'un bug.

Une situation de compétition (anglais ) est un dysfonctionnement dû à un bug, qui fait que dans un même logiciel deux automatismes qui travaillent simultanément donnent des résultats différents suivant l'automatisme qui termine avant l'autre.

Un interblocage (anglais deadlock) est un dysfonctionnement durant lequel plusieurs automatismes s'attendent mutuellement, c'est-à-dire qu'ils attendent chacun que l'autre libère les ressources qu'il utilise pour poursuivre. Les ressources restent verrouillées durant les attentes, ce qui peut bloquer d'autres automatismes et par effet domino bloquer l'ensemble du système. Un mécanisme de prévention provoque l'annulation de l'opération lorsque la durée d'attente dépasse le délai admissible (anglais timeout).

Dans le folklore hacker

Plus le code est complexe, plus il est difficile de localiser un bug. Des bugs qui dépendent d'une combinaison de conditions imprévues et improbables sont particulièrement difficiles à localiser. Dans le folklore hacker il existe des catégories de bugs bizarres dont les noms humoristiques sont dérivés de ceux d'éminents scientifiques en physique quantique et en mathématique..

Heisenbug : (du principe d'incertitude de Heisenberg) un bug qui disparaît ou se modifie quand on essaye de l'isoler. Mandelbug : (des ensembles de Mandelbrot) un bug dont les causes sont si obscures et complexes que le résultat est un comportement chaotique et non déterministe. Schrödinbug : (du chat de Schrödinger) un bug qui ne se manifeste pas jusqu'à ce que quelqu'un lise le code source, utilise le programme d'une façon peu ou pas usuelle et constate qu'il n'aurait jamais dû fonctionner. Bohr bug : Un bug répétable, qui se reproduit lorsqu'un ensemble - même inconnu - de conditions sont remplies..

L'exécution pas-à-pas d'un logiciel à l'aide d'un débogueur peut provoquer des Heisenbug du simple fait que le logiciel se déroule moins rapidement. Et les situations de compétition peuvent entraîner des Mandelbug, où le comportement du programme est différent à chaque fois que celui-ci est exécuté..

Cycle de vie Description