Twitter YouTube SoundCloud LinkedIn

Tiennot blog

Culture informatique (épisode 1) : c'est quoi, un bug ?

Lundi 16 mai 2011, 22:17 (par guilhem)

Le terme « bug » peut être traduit en français par le mot « insecte » . Selon la légende, l'emploi de ce mot pour désigner un dysfonctionnement dans un programme informatique remonte au 9 septembre 1945. Ce jour là, un informaticien du nom de Grace Hopper aurait retiré un petit insecte coincé dans un contact de relais du premier ordinateur au monde, le Harvard Mark II. Il aurait alors relevé l'incident dans un de ses carnets de note, et depuis, l'emploi du mot « bug » est resté. Cependant, bien que cette note existe bel et bien, il semble que l'usage du mot soit antérieur à l'apparition des ordinateurs, le terme étant alors employé dans le cadre des machines de précision.

image : /images/blog/relais.jpg
Relais (collection personnelle)

Le mot anglais est aujourd'hui passé dans le langage courant, à tel point que peu de gens savent qu'il existe un équivalent en français : « bogue » (au masculin). Ainsi, on ne parle pas de « débugger » un programme, mais bien de « déboguer » un programme.

En cas de bogue, le comportement du programme impacté devient pour le moins erratique, et dépendant du système d'exploitation. Voyons cela avec un exemple simple :


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int *i = NULL;

  printf("Programme générant un bogue\n");
  *i = 10; // Ligne qui provoque le bogue

  return 0;
}

Le code ci-dessus affiche simplement une phrase à l'écran, avant de tenter un accès à une zone mémoire à laquelle il n'a pas le droit d'accéder (en l'occurrence, l'adresse 0x0).

Sous Windows, vous obtenez le message (pas très instructif) suivant :

image : /images/blog/bogue_win.png

Tandis que sous Linux, le terminal vous renvoie ceci (remarquez, on n'est pas tellement plus avancé) :

image : /images/blog/bogue_linux.png

Dans tous les cas, le bogue conduit à la terminaison brutale du programme. On le remarque aisément, les messages d'erreurs renvoyés par le système d'exploitation ne sont pas très explicites, et bien souvent, l'aide d'un programme spécialement conçu pour traquer les bogues (le « débogueur ») se révèle indispensable. Toutefois, on peut faire ici une liste succincte des principales sources de bogues dans les programmes :

- accès en lecture/écriture à une zone mémoire à laquelle le programme n'a pas accès (c'est le cas de notre exemple, il tente un accès en écriture)
- allocation/libération de mémoire : en particulier si le programmeur tente de libérer un bloc mémoire qui l'a déjà été
- dépassement de capacité : si le programme « déborde » d'une zone mémoire
- boucle infinie : le programme boucle indéfiniment (exemple : boucle « while »)

Et j'en passe... Le plus souvent, il s'agit donc d'une erreur humaine, d'un oubli.

Maintenant, vous vous demandez sûrement : que faire lorsque je constate un bogue dans un logiciel ? Si vous êtes développeur, le mieux est de faire un « rapport de bogue » décrivant le plus précisément possible les conditions d'apparition et les symptômes du problème aux développeurs du logiciel (il faut regarder dans la documentation du logiciel pour voir comment faire). Et même, pourquoi pas tenter de le corriger, si le logiciel est libre ou open source ?

En revanche, si vous ne vous sentez pas une âme de développeur, difficile de faire mieux qu'écumer les forums ou autres sites web à la recherche d'une solution provisoire. Et quand bien même vous ne trouveriez pas de solution, souvenez-vous : « it's not a bug, it's a feature ! » (« ce n'est pas un bogue, c'est une fonctionnalité ») :D

Commentaires