Bienvenue dans l’épisode 15, sur le debugging. On ne va pas parler des méthodes de résolution de bugs, qui vont dépendre de chaque langage, plateforme, et bug bien sûr.
Ce qui va m’intéresser ici c’est de voir comment un bug peut arriver, comment le résoudre, et comment gérer ce qui se passe humainement durant les étapes de résolution du bug.
Là encore j’ai de quoi faire une petite série, pour l’instant en deux épisodes : aujourd’hui sur la détection et la réaction au bug, et la semaine prochaine sur la résolution du bug. Il n’est pas impossible que d’ici quelque temps on reprenne le sujet si ça vous intéresse et si je trouve encore d’autres choses à dire.
Quoi de neuf, docteur ?
Pour ne pas épuiser la métaphore sur la voiture, et parce que bien souvent on rabaisse les développeurs à des exécutants techniques, je vais plutôt choisir une métaphore filée sur la médecine.
On parle parfois d’un développeur sur un bug comme d’un pompier, un démineur, mais je n’aime pas le côté urgence forcée, et l’absence de responsabilité que cela sous-entend.
Pour moi, intervenir sur un bug, c’est comme être le médecin traitant face à quelques symptômes. On pourrait dire chirurgienne, mais j’aime moins l’aspect d’intervention certes d’une haute technicité, mais ponctuelle et qui ignore la santé globale : à résoudre les soucis un par un, on peut facilement oublier d’avoir une vision générale.
Les causes
Je suis obligé de commencer par la définition du mot “bug” la plus générale qui soit : quelque chose d’inattendu ou de néfaste que l’on attribue (à tort ou à raison) à votre système.
Et donc la cause la plus générale qui soit, c’est qu’un postulat sur lequel vous vous basiez… n’est plus valide en ce moment.
Ça peut être dans votre infra, vos données, votre code, votre documentation ou vos spécifications. Pour être clair, il y a quelque chose de :
- physiquement cassé : connexion, serveur…
- mal tourné dans l’environnement : configuration, dépendances…
- différent de vos attentes dans les données, ce qui peut “casser” un algo…
- mal exprimé dans votre documentation, et ça coince ceux qui dépendent de vous
- pas très clair dans les messages d’erreur ou options proposées
- pas prévu ou mal anticipé dans vos spécifications
- dangereux dans la résolution hâtive d’un bug, qui cause un autre bug !
Ou enfin, tout simplement, c’est que votre code est en défaut.
Le corps médical a le même problème : outils cassés, prescriptions mal suivies parce que pas claires ou trop contraignantes, situation imprévue, combinaison de médicaments ou de maladies aux effets combinés désastreux… Sans parler de l’environnement global du patient qui serait toxique ou délétères (mauvaises habitudes…) et ça finit toujours pareil :
quelqu’un va voir son ou sa médecin (qui est rarement la cause du souci), exige une solution (rapide si possible), et le tout sous peine de conséquences (parfois dramatiques).
Le message n’est pas clair
De même, un diagnostic est parfois difficile quand il y a une ou plusieurs causes de départ, mais qu’on ne les voit pas parce que les informations sont cachées, conflictuelles, similaires à un autre cas… pensez à la série Dr House si vous voulez un exemple.
Mais, c’est pas mon problème ?
Pourquoi ai-je tenu à faire cette liste si longue et qui parle si peu de code ?
Tout d’abord parce que les cas de la vraie vie sont au moins aussi nombreux.
Mais aussi parce qu’on tentera d’attribuer des erreurs de ces huit catégories-là à votre code, faute de mieux comprendre ou par calcul politique. Pour être clair, parce qu’il y a quelqu’un qui pense “ce bug, c’est pas mon problème”.
Enfin, pour ne pas vous entendre, en tant que développeurs et développeuses, dire ce genre de phrase. Parce que toutes ces catégories sont ou devraient être de votre ressort : comprendre les implications des choix en amont, en aval, savoir dire non et expliquer les options à ceux qui feront les choix.
Accepteriez-vous de voir un médecin qui se dédouane de vos problèmes ?
Un ou une médecin a une position de prestige, de pouvoir, et vous êtes en position de dépendance. Les sujets abordés vous touchent directement.
Les décisions ont intérêt d’être claires et concises. On n’accepte pas d’être cobaye, de jouer aux devinettes. Toute action doit être motivée et expliquée, y compris quand il s’agit de se dessaisir du sujet pour le confier à un confrère ou une consoeur.
Et pourtant, on serait tellement en colère de voir une décision hâtive et fausse prise avec autorité et aplomb, se révéler fausse : on se sentirait trompé, on perd confiance, on peut se mettre en colère ! Mais à l’inverse, ça donne davantage confiance de s’entendre dire “je ne sais pas, on va chercher” ou “j’ai une piste, on va faire des examens pour confirmer”, ou encore “j’ai plusieurs pistes, on va tester pour voir”.
Avant le bug : monitoring
Je n’ai pas retrouvé de source mais Toyota avait une manière de décrire les problèmes, non par leurs conséquences comme souvent, mais comme étant une déviation de la norme.
Les tests médicaux, analyse ou monitorings sont chers ou pas pratiques. On aura tendance à ne les faire que quand tout va mal. C’est un peu dommage, et c’est pourquoi on encourage non seulement à un suivi de ce qui a été mal un jour, mais aussi parfois à un checkup régulier.
Avant de se dire ce qui est normal, il faut pouvoir le suivre, savoir ce qui est dans la norme ou pas. Et encore, pensez à la météo, aux pollens ou aux grippes : il y a la norme saisonnière. Pour un site web de commerce, par exemple, quelles sont les heures, les jours de la semaine, les périodes de l’année les plus importantes ?
Après le décès de Michael Jackson, Google a reçu tellement de requêtes qu’ils ont cru à une attaque. Après chaque événement marquant, Wikipedia reçoit un flot de modifications plus ou moins légitimes : il est important d’avoir un plan d’action, même s’il dit juste “attention, il se passe davantage de choses que la normale”.
Identification du bug
L’identification d’un problème est facilitée si vous avez un monitoring en place. Sinon, c’est souvent par hasard, par chance (en anticipation), ou parce que les conséquences de votre bug vont remonter avec bruit.
Je pense qu’il y aurait beaucoup à dire, et chaque métier a probablement ses moyens d’améliorer et d’anticiper l’identification de problèmes, mais ça dépend tellement de chaque cas que je vais arrêter là.
À la semaine prochaine !
Et voilà, on a vu ce qu’on peut faire avant et au moment où l’on détecte un problème, à la semaine prochaine pour voir comment on peut réagir et corriger ce bug !