Le premier bug était donc un insecte qui s'était infiltré dans la machine et avait fait griller un circuit électronique. Aujourd’hui, il est plus rare de retrouver un cafard dans votre ordinateur. L’utilisation derrière le mot bug (ou bogue, en français) a donc évolué.
Alors un bug c’est quoi ? C’est tout ce qui est qualifié comme un dysfonctionnement d’un programme informatique. C’est forcément dû à un souci entre le clavier et la chaise… donc à un humain ! Sauf si c’est une panne ou un cafard.
Par exemple, si votre programme s'arrête, si rien ne se passe ou tout simplement, si l’application n’a pas le comportement que vous attendez, c’est que vous avez un bug !
Découvrez les différents types d’erreurs
Nous pouvons catégoriser les erreurs en 3 types :
les erreurs de syntaxe
les erreurs de logique
les erreurs d'exécution
1. Les erreurs de syntaxe
Ce sont les erreurs d’écriture et de langage. Chaque langage possède des règles de grammaire qui lui sont propres. Comme pour les langues vivantes. Si vous faites une erreur de syntaxe, votre code ne pourra pas se lancer ou compiler. Sinon, c’est que l’ordinateur aura mal compris votre intention.
2. Les erreurs de logique
Vous pouvez retrouver ces erreurs dès que vous codez un algorithme. Un algorithme est une suite de lignes de code ou d’étapes qui permettent de répondre à un problème précis. Ici, votre code pourra probablement se lancer, mais n’aura pas le comportement que vous attendez.
Par exemple, si vous avez une condition qui dit : “si vous lancez votre dé et que vous faites un 12”, alors vous gagnez. Le problème est que votre dé n’a que 6 faces ; vous ne pourrez donc jamais faire un 12, donc vous ne pourrez pas rentrer dans votre condition et gagner.
3. Les erreurs d'exécution
Ces erreurs se produisent après le lancement de votre code. Votre syntaxe est bonne, le programme arrive à se lancer, mais il y a une ligne que l’ordinateur n’arrive pas à interpréter. Alors le programme arrête de s'exécuter ou s'exécute mal.
Par exemple, si vous avez dans votre code une variable qui contient un tableau de 4 cases et que vous souhaitez accéder à la 5e, comme elle n’existe pas, le programme ne sait pas quoi faire et s'arrête.
Maintenant que nous sommes plus au clair avec la définition d’une erreur, voyons quelle méthodologie aborder pour identifier et corriger un bug, étape par étape.
Appliquez cette méthode pour débugger votre code
Étape 1 – Posez-vous des questions pour analyser la situation
Qu’est-ce qui vous fait dire que vous avez un souci ?
Est-ce que vous avez une erreur clairement indiquée que vous pouvez identifier ? Si oui, vous pouvez passer directement à l’étape 5 !
Ou bien, est-ce que c’est le comportement de votre application qui n’est pas celui que vous souhaitez ?
La page ou la fonctionnalité ne s’affiche pas ?
Votre programme s’est arrêté ?
La fonctionnalité a fait autre chose que ce que vous pensiez ?
Ces questions vont vous permettre de mieux structurer votre pensée, et vous aider à les traiter de manière adéquate.
C’est encore un peu flou ? C’est normal ! Nous allons continuer pas à pas, ensemble. Suivez-moi !
Étape 2 – Procédez par élimination en relisant votre code
Je sais, cela parait évident, mais pourtant, c’est là qu’on retrouve plus de la moitié des bugs. Alors, prenez le temps de bien faire les choses pour gagner du temps sur la résolution !
Pour vous relire et bien comprendre votre code, vous avez plusieurs outils à votre disposition.
Ces outils vous permettent de vous concentrer sur :
l'indentation ;
les balises / l’ouverture et la fermeture des portées ;
la ponctuation ou les caractères spéciaux ;
les oublis d’appels de fonction ;
les non-sens ;
…
Les 6 outils à votre disposition sont :
La relecture
S’il y a un bien UN outil universel, quel que soit le langage, c’est le fait de pouvoir vous relire. Cela vous permet d’identifier des erreurs d'inattention.
Votre éditeur de code (IDE)
Cela dépend du logiciel sur lequel vous travaillez, mais les plus utilisés, comme Visual Studio Code, interprètent votre code dès que vous écrivez, pour vous aider. Écoutez-le, il a sûrement quelque chose d'intéressant à vous dire !
Un formateur ou validateur de code
Outre les outils directement intégrés à votre logiciel de code, comme Prettier, il existe des sites internet qui peuvent vous relire et vous aider à identifier vos erreurs.
Un linter
Le linter est l'outil qui va relire votre code et chercher les erreurs. Un peu comme un validateur de code. L’avantage, c’est que vous pouvez le configurer pour qu’il cherche certaines anomalies en particulier. Cela peut être par exemple une règle sur le nombre de lignes des fonctions qui ne doit pas dépasser 15.
Les logs
Il faut toujours aller vérifier ce qu’il se passe dans les logs, accessibles généralement par une console. La manière d’y accéder sera différente selon les outils et les technologies utilisés.
Les breakpoints
Un breakpoint met en pause votre programme à un instant que vous avez choisi. Vous pouvez donc étudier l’état de votre projet à ce moment-là, vérifier que c’est bien le comportement attendu.
La plupart des langages dits impératifs le permettent. Vous pouvez les utiliser sur votre éditeur de code comme Visual Studio Code, ou directement dans les "developper’s tools" de votre navigateur web.
Vous n’avez pas trouvé d’erreur ? Pas de panique, nous allons continuer à chercher ensemble !
Étape 3 – Prenez du recul pour identifier clairement le problème
À cette étape, il semblerait que votre erreur soit un peu plus complexe.
Avant même de vous relancer sur de nouveaux outils de débuggage, il est important de faire un pas de côté.
Pour cela, j’ai quand même des outils à vous proposer :
Expliquez votre problème à voix haute
On l’appelle aussi la méthode du canard en plastique. Oui oui, vous avez bien compris, vous allez parler à un canard en plastique ! Bon en fait, peu importe l’objet auquel vous parlez, l’important c’est de parler à voix haute et d’expliquer ce que vous avez fait et ce que vous cherchez à faire. Cela mettra en ordre ce qu’il se passe dans votre tête et croyez-moi, ça fait des miracles !
Prenez l’air
C’est aussi un outil très efficace, votre cerveau à besoin de souffler par moment. Cela lui laisse le temps de faire son travail, de bien ranger les choses pour vous permettre d’y accéder correctement (il en est de même pour le sommeil). 😉
Faites du pseudo-code
Le pseudo-code permet de mettre sur papier (ou sur écran) une logique, sans pour autant écrire du code et la syntaxe qui va avec. Cela peut être des explications en français, des schémas, ou un mélange des deux. Le but est de vous aider à y voir plus clair dans ce que vous essayez de faire.
Testez différents cas d’utilisation
Le bug est apparu dans un cas précis, peut-être qu’il apparaîtra dans d’autres cas, peut-être pas dans tous. C’est important, pour bien comprendre, de tester plusieurs cas pour vérifier le périmètre du bug. Il se pourrait également que le souci ne vienne pas de vous, mais d’un service que vous utilisez.
Isolez la fonctionnalité
Il se peut que votre bug soit en fait lié à un autre souci, ou que sa résolution soit complexifiée par le reste du programme. Pour l’isoler, vous pouvez :
développer la fonctionnalité à part : le contexte (le code qui l’entoure, la configuration du projet, les contraintes techniques et fonctionnelles…) pose peut-être problème ;
vous servir de Git pour identifier ce qui a été modifié, potentiellement revenir en arrière et vérifier que ce bug n’était pas déjà là avant votre modification. Si vous ne connaissez pas Git, vous pouvez suivre le cours “Gérez du code avec Git et GitHub” pour ça ; 😉
commenter le code que vous supposez être la source du problème et décommenter ligne par ligne, en testant à chaque fois, afin de déterminer quelle ligne a tout fait basculer.
Étape 4 – Utilisez les ressources disponibles
Vous n’avez pas réussi à faire émerger une solution ? Ce n’est pas grave, vous avez encore des outils à votre disposition !
Il est normal de passer du temps sur un bug, c’est la base du métier.
Si vous n’avez pas réussi à trouver de votre côté, allez chercher de l’aide ailleurs.
Pour aller plus loin, vous pouvez :
Cherchez sur internet
C’est l’un des outils les plus utilisés dans le débuggage. Internet est rempli de gens qui ont déjà eu la même erreur ou un souci très similaire. Vous pouvez donc faire des recherches afin de trouver des personnes qui ont eu le même souci, et voir les solutions qui ont pu être proposées. Ou bien chercher des exemples de ce que vous souhaitez faire, pour trouver peut-être d’autres façons de faire que la vôtre. Cherchez également dans la documentation officielle pour bien comprendre comment s’utilisent le langage, les fonctions, les outils que vous utilisez.
Appuyez-vous sur l’IA
Vous avez sûrement entendu parler de nouveaux outils basés sur l’intelligence artificielle comme ChatGPT (d’Open AI), Gemini (anciennement Bard, de Google) ou peut-être même de Large (de Mistral). Ces outils sont appelés des modèles de langages (LLM). Ils peuvent être utilisés dans de nombreux domaines, et sont particulièrement des bons assistants aux développeurs. Il s’agit en quelque sorte d’un chatbot intelligent, avec qui vous pouvez interagir pour expliquer votre problème et espérer avoir la solution, ou au moins une piste pour y arriver.
Faites de la code review
La code review est un outil très puissant et très utilisé en entreprise car on code rarement un projet entièrement seul. Le principe est de faire relire par quelqu’un qui portera un nouveau regard sur votre code. Cela peut se faire à l’aide d’outils comme GitHub, GitLab, Gerrit… ou directement sur votre machine.
Demandez de l’aide ou des conseils à vos pairs
Si vous avez des gens qui vous accompagnent sur votre projet ou qui travaillent directement avec vous, échangez avec eux. La communication est un formidable outil de debug qui vous permet de vocaliser, de prendre du recul et d’avoir des idées auxquelles vous n’auriez même pas pensé. Leur temps est souvent limité, utilisez cette ressource avec parcimonie !
Avec tous les outils que vous avez maintenant, vous pouvez itérer toutes ces étapes et finir par trouver le souci. Cela peut prendre du temps, mais vous y arriverez ! 💪
Étape 5 – Résolvez le problème par incrémentations
Si vous avez identifié votre problème et que vous savez comment le résoudre, allez-y ! Sinon, il se peut que vous deviez repasser un peu de temps sur internet pour trouver des solutions à tester.
Dans tous les cas, vous allez procéder de manière incrémentale, c’est-à-dire étape par étape. Modifiez un minimum de code à la fois, mais surtout testez-le, le plus régulièrement possible ! On est rarement sûr à 100 % d’avoir bien compris son erreur, c’est pour cela qu’il est important de tester différents cas d’utilisation afin de vérifier que le comportement est bien celui souhaité, désormais. En définitive, ne criez pas victoire trop vite !
En résumé
Un bug (ou bogue) est un dysfonctionnement de mon programme qui arrive suite à une erreur humaine ou une panne.
Il existe 3 catégories d’erreurs : les erreurs de syntaxe, de logique et d'exécution.
La résolution d’un bug se fait de manière itérative et incrémentale.
Prendre le temps de bien comprendre une erreur permet de gagner du temps pour la suite !
Il existe une multitude d’outils et de méthodes à suivre pour résoudre vos bugs.
Tester régulièrement et avec des cas différents est une des clés du code et du débuggage.
Internet est souvent votre meilleur ami, mais c’est important de savoir comment lui parler.
Nous avons vu ensemble un processus qui peut s’appliquer sur n’importe quel bug, mais le mieux c’est de comprendre avec des cas pratiques. Attachez vos ceintures ! On se retrouve dans le prochain chapitre pour notre premier cas concret de débuggage !