Page d'accueil encyclopedie-enligne.com en page d'accueil
Liste Articles: [0-A] [A-C] [C-F] [F-J] [J-M] [M-P] [P-S] [S-Z] | Liste Catégories | Une page au hasard | Pages liées

Bogue (informatique)


Un bogue informatique est une anomalie dans un programme informatique l'empêchant de fonctionner correctement. Leur gravité peut aller de bénigne (défauts d'affichage mineur) à majeure (explosion du vol 501 de la fusée Ariane 5).

Les bogues sont généralement dus à un problème de conception du logiciel ; celui-ci peut être localisé (et la correction simple), mais peut aussi bien être un problème général de conception, nécessitant une refonte profonde. Plus rarement, les bogues dans les logiciels peuvent être dus à des bogues dans les outils logiciels de développement utilisés par les programmeurs du logiciel. Enfin, le matériel lui-même peut comporter des bugs (célèbre cas des premières versions du processeur Pentium).

Sommaire

Origine du mot

Photo du premier bug informatique
Agrandir
Photo du premier bug informatique

Le terme est dérivé du mot anglais bug, venant du jargon des ingénieurs de matériel et représentant les erreurs de matériel qui survenaient. Le terme est quelquefois inexactement crédité à Grace Hopper à la suite d'une anecdote dans laquelle elle a déterminé que la raison du mauvais fonctionnement d'un des premiers ordinateurs électromécaniques était un insecte - bug signifie insecte en langue anglaise - coincé entre deux contacts du relais qui faisait fonctionner l'appareil.

En 1946, Hopper a rejoint la faculté de Harvard au laboratoire où elle a continué son travail sur Mark II et Mark III. Elle a attribué une erreur dans Mark II à un papillon nocture pris dans un relais, créant le terme bug. L'insecte fut enlevé avec soin et placé dans un journal de bord. Cette première anomalie a popularisée l'expression bug ou bogue pour représenter les erreurs dans un programme.

Malgré l'intérêt de l'anecdote ci-dessus, il est reconnu que l'utilisation du mot bug 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 notes.

En France, le terme « bogue » est recommandé par la Délégation générale à la langue française et aux langues de France (DGLF) depuis un arrêté paru au Journal officiel du 30 décembre 1983. À cette époque le genre féminin était préconisé. Cependant à la fin de la décennie 90, les dictionnaires tels que le « Nouveau petit Robert » et le « Petit Larousse illustré » rapportaient l'usage de ce terme au masculin, sans doute sous l'influence québécoise où l'Office de la langue française prônait depuis longtemps l'emploi du genre masculin. Désormais la DGLF recommande elle aussi le genre masculin pour ce mot.

Effets

Il est dit qu'il y a des bogues dans tous les programmes informatiques. En revanche, les programmes bien écrits contiennent relativement peu de bogues, et ceux-ci n'empêchent généralement pas le système de continuer ses tâches. Au contraire, les programmes moins bien écrits, quelquefois dits bogués, contiennent beaucoup d'anomalies qui interfèrent souvent avec le fonctionnement du programme.

Les bogues ont des effets qui varient grandement. Quelques-uns ont un effet subtil sur le fonctionnement du logiciel et peuvent demeurer inconnus pendant une grande période de temps. D'autres sont plus sévères et peuvent faire planter ou geler le logiciel. Dans certains cas systèmes d'exploitation, les bogues de logiciels peuvent rendre instable le système jusqu'à ce qu'il soit rechargé. Les systèmes d'exploitation Microsoft Windows sont réputés pour avoir ce type de problèmes. D'autres problèmes peuvent mener à de sévères failles de sécurité ; le dépassement de tampon est un des bogues les plus communs permettant à l'attaquant d'exécuter un nouveau programme sur la machine cible.

Le coût des bogues peut être considérable. Steve McConnell compte plusieurs bogues qui ont coûté au-dessus de 100 millions de dollars US. Le cas le plus spectaculaire est celui de la fusée européenne Ariane 5, qui a coûté plus de 1 milliard de dollars. Quelque temps après le décollage, elle fut détruite à cause d'une erreur dans l'ordinateur de guidage à bord de l'appareil. La sonde de Vénus Mariner 1 fut perdue d'une façon similaire en 1962. Un trait d'union oublié dans un programme Fortran a coûté plus de 80 millions de dollars. D'après Arthur C. Clarke, ce fut le « plus coûteux trait d'union de l'histoire ».

Approche formelle

Un bogue est un non-respect de la spécification du système, c'est-à-dire de la définition de ce que le système est censé faire. Une spécification peut être informelle et vague (comme : « le logiciel est un traitement de textes qui ne provoque pas d'erreur à l'exécution »), ou formelle et précise (« tri(t) est une permutation de t telle que tri(t) est ordonnée pour la relation < »), y compris au point d'obtenir des formules mathématiques. Un programme bogué est un programme dont l'implémentation, c'est-à-dire le code fonctionnant en pratique, ne vérifie pas la spécification.

On peut se demander s'il existerait des méthodes universelles, sans faille et automatiques qu'il suffirait de suivre pour se rendre compte si un programme est bogué ou non. La réponse est non. En effet, si une telle méthode existait, il serait possible de l'automatiser par un ordinateur, c'est-à-dire par un logiciel d'analyse. Cet analyseur devrait opérer sur des programmes à analyser quelconques et devrait, par exemple, répondre à la question suivante : « l'état final du programme peut-il être un état d'erreur à l'exécution, ou est-il forcément un état correct (ou une non-terminaison) ». Or, le théorème de Rice dit qu'on ne peut répondre à cette question sur un système à état infini. Plus généralement, toute question de spécification portant sur l'état final du programme est indécidable, c'est-à-dire qu'un logiciel ou une méthode automatique ne peut y répondre, sauf les questions dont la réponse est toujours vraie ou toujours fausse.

On pourrait objecter que les ordinateurs sont des systèmes à état fini : chaque ordinateur a une quantité finie de mémoire. Cependant, à l'exception de systèmes de très petite taille, il convient, à des fins d'analyse, de considérer les ordinateurs comme des systèmes à mémoire non bornée. En effet, les techniques d'analyses utilisant la finitude de l'état vont toutes, de façon plus ou moins détournée ou optimisée, chercher à énumérer les états du système. Un système à n bits de mémoire a 2n états ; dans un ordinateur personnel actuel, n est de l'ordre de 238. On voit donc que toute tentative d'énumération des états du système est vouée à l'échec.

L'impossibilité de la recherche automatique universelle des bogues est donc un problème d'ordre fondamental, et non une limitation de la technologie actuelle.

Comment en faire ? Comment s'en défaire ?

Les bogues sont une conséquence de la nature de la tâche de programmation. Quelques-uns surviennent à cause de simples erreurs d'inattention d'un programmeur écrivant du code source. D'autres bogues sont le résultat d'interférences inattendues entre différentes parties d'un logiciel. Certains, enfin, relèvent de la non-prise en compte des termes exacts des normes définissant les langages et les bibliothèques employés par les programmeurs (cf. exemple). Ces situations arrivent parfois quand les logiciels deviennent trop complexes pour que les programmeurs puissent penser à toutes les possibilités d'interaction entre plusieurs parties d'un programme.

L'industrie du développement logiciel fait de gros efforts pour trouver des méthodes de prévention des erreurs des programmeurs menant à des bogues. Cela inclut :

Trouver et corriger les bogues, ou déboguer, est une partie majeure de la programmation de logiciels. Maurice Wilkes, pionnier de l'informatique, décrit ses réalisations des années 1940 en disant que l'essentiel du reste de sa vie serait occupée à réparer les erreurs dans ses propres programmes. Alors que les programmes informatiques deviennent de plus en plus complexes, les bogues deviennent plus fréquents et difficiles à corriger. Quelquefois, les programmmeurs passent plus de temps et d'efforts à trouver et à corriger les bogues qu'à écrire du nouveau code.

Habituellement, la partie la plus difficile du débogage est de trouver la partie du code responsable de l'erreur. Une fois localisée, la corriger est souvent facile. Des programmes appelés débogueurs existent afin d'aider les programmeurs à trouver les bogues. Toutefois, même avec l'aide d'un débogueur, dénicher un bogue est une tâche souvent très difficile.

Ordinairement, la première étape pour trouver un bogue est de trouver un moyen de le reproduire facilement. Une fois le bogue reproduit, le programmeur peut utiliser le débogueur ou un autre outil pour observer l'exécution du programme dans son contexte habituel, et éventuellement trouver le problème. En revanche, il n'est pas toujours facile de reproduire un bogue. Certains sont causés par des entrées au logiciel qui peuvent être difficiles à reproduire pour le programmeur. D'autres peuvent disparaître quand le programme est lancé dans un débogueur ; ceux-ci sont appelés heisenbugs (faisant, par plaisanterie, référence au principe d'incertitude de Heisenberg.) Enfin, les bogues des programmes parallèles (composés de plusieurs modules s'exécutant de façon concurrente, par exemple sur plusieurs processeurs) sont souvent difficiles à reproduire s'ils dépendent de l'ordonnancement précis des calculs sur la machine.

Exemple

Exemple de code non bogué mais pouvant provoquer une erreur et correction du code pour un fonctionnement détectant les erreurs des autres programmes ou de la machine.

 fonction IncPointeur( pointeur )
 *pointeur ++
 fin fonction
 fonction IncPointeur( pointeur )
 si EstValide( pointeur )
 *pointeur ++
 retour OK
 sinon
 retour ERREUR
 fin si
 fin fonction

Humour et citations célèbres liées aux bugs

Voir aussi

Liens externes




This site support the Wikimedia Foundation. This Article originally from Wikipedia. All text is available under the terms of the GNU Free Documentation License Page HistoryOriginal ArticleWikipedia