Comment débugger un problème de manière efficace ?

Mis à jour le dimanche 20 janvier 2019 par johackim

Aujourd'hui, je partage avec vous mon processus pour résoudre des problèmes en apparence complexes, mais qui peuvent se résoudre facilement si l'on utilise la bonne méthode.

Je me suis souvent retrouvé face à des problèmes techniques en apparence très complexes et qui m'ont demandé parfois des dizaines d'heures pour les résoudre... Face à la complexité de certains problèmes, j'ai passé mon temps à :

  • Faire des suppositions plutôt qu'à isoler le problème pour mieux le comprendre.
  • Copier-coller bêtement le problème sur un moteur de recherche sans poser le problème sur papier de manière claire et précise.
  • Faire des va-et-vient, et réparer le problème de manière temporaire plutôt que le résoudre à la source et de manière définitive.

Récemment, j'ai réussi à réparer un problème qui arrivait de manière récurrente et aléatoire sur mon infrastructure web.

Du coup, j'en profite pour créer et partager avec vous une sorte de procédure sous la forme d'une checklist de 5 étapes à réaliser dans l'ordre :

  1. Je supprime le superflu et réduis mon environnement de travail le plus possible pour isoler le problème
  2. Je trouve le moyen de reproduire ce problème à tous les coups (minimum 5 à 10 fois d'affilées) et avec le moins d'étapes possible
  3. Si l'erreur ne se reproduit pas à tous les coups, je reviens à l'étape 1 dans le but de supprimer les comportements aléatoires
  4. Une fois le problème correctement isolé et facilement reproductible, je rédige sur papier une description précise et détaillée du problème, comme si je m'adressai à un collègue
  5. Enfin, après avoir collecté toutes les données en lien avec le problème, je tente de résoudre le problème (avec des recherches internet ci-besoin). Sinon je délègue le bug à quelqu'un d'autre en prenant soin de lui donner tout ce que je sais sur celui-ci.

Pour résumer, pour résoudre un bug, il faut simplement isoler notre problème dans un environnement minimal, le reproduire au moins 10 fois, collecter un maximum de données et décrire notre problème sur papier. De cette façon, on améliore notre compréhension du problème afin de mieux le résoudre.

Je suis quelqu’un de très visuel et le simple fait d'écrire le problème sur papier m'aide beaucoup à le résoudre.

Il existe aussi la méthode Rubber Ducking qui consiste à placer un canard en caoutchouc près de soi et de lui décrire le problème. Le fait de dire votre problème à haute voix rendra la solution plus claire.

Je ferai prochainement un article sur l'utilisation de la commande git bisect run, qui permet d'automatiser plus ou moins le processus de debug.


Références :