Aug. 8, 2017, 9:40 a.m.
C’était une après-midi ensoleillée dans Westminster, une météo qui encouragerait à sortir un individu normalement constitué. Mais pas pour moi. J’étais trop occupé à répondre à des posts angoissés sur Doctissimo. C’est à ce moment que j’ai entendu le son caractéristique d’une connexion au salon Discord. À cette heure là, ç’aurait pu être n’importe qui, mais j’avais un pressentiment sur l’identité de mon interlocuteur. Un changement de fenêtre rapide me confirma que c’était bien SH58 qui venait briser la monotonie soporifique de ma journée.
« Je savais que je te trouverais là. J’aurais besoin de mon canard en plastique préféré pour un cas épineux. », a-t-il lancé sans préambule. J’ai souri, caché derrière mon écran, ne relevant pas le double sens involontaire des propos de mon interlocuteur. S’il y a bien quelqu’un sur ce salon vocal incapable de saisir l’humour graveleux, c’est bien SH58. « Ton micro doit être débranché, parce que je ne t’entends pas alors que j’attendais une réponse », insista-t-il. Je daignai enfin sortir de mon silence goguenard et lui répondis qu’en bon canard en plastique je n’étais pas sensé répondre, mais que j’étais tout ouïe:
« Tu traînais sur Stack Overflow je présume… », anticipai-je. Il confirma et poursuivit : « C’est un cas très curieux. J’irais même jusqu’à dire intéressant, alors que tu sais ce que je pense des questions liées au C++. C’est une question qui aurait pu passer inaperçue, dans le flot des énigmes sans intérêt qui foisonnent sur le site ces temps-ci. Un coup de chaud et ils en viennent à demander pourquoi leur code ne marche pas alors que c’est qu’ils ont oublié un point virgule. Même ce casu de LS-tard commence à trouver ça un peu facile (alors que d’habitude il ne rechigne pas à saisir toutes les occasions de gagner un point de réput’). Bref.
Quand j’ai vu le tag « Non reproductible », je ne savais pas trop quoi en attendre. Souvent c’est juste que le mec n’a pas compris dans quel cas ça ne marchait pas, mais le problème reste parfaitement déterministe. Mais en allant plus loin dans la description j’ai compris que ce n’était pas ce genre de cas. La situation décrite par le RedheadOfDaLeague était assez claire : un programme qui n’avait jamais posé de problème se met à sortir une erreur invraisemblable d’un coup sans modification du code à cet endroit depuis des mois.
Mais ce n’était pas le plus surprenant : Ce bug n’apparaissait qu’en changeant d’ordinateur. La même version du code qui marchait bien sur le premier ordi plantait sur le second (alors qu’une autre fois il avait marché), et affichait un sinistre ‘Rho must be strictly positive’, alors que dans le fichier de paramètre le rho sus-nommé était de 0.8, et qu’il était défini en tant que flottant dans le programme. » « Laisse-moi deviner… un problème de version compilateur ? Une bête erreur de cast d’entier en flottant ou de nombre qui devient négatif à force d’être positif ? »
« Pas d’erreur de cast détectée, même si j’ai eu un doute quand j’ai vu la taille du système de chargement des variables. Et pour les versions, tu penses bien que c’est la première chose que j’ai demandé. Et effectivement les deux étaient différents ! J’ai donc répondu d’aligner les versions. Mais moins d’une minute plus tard il est revenu dire que malgré le changement de version, le bug persistait à lui affirmer que son rho n’était pas positif alors que, à en croire son extrait de code, le paramètre était bien toujours de 0.8… Il affirmait avoir tout testé, réécrit la ligne du fichier de paramètre au cas où ç’aurait été un faux espace ou un caractère bizarre, avoir même remplacé par un 2000 dans un élan de désespoir pour être sûr qu’il était positif, et avoir essuyé le même message d’erreur. Un cas symptomatique de déraillement psychologique, si je peux me permettre d’empiéter sur tes plates-bandes. »
Je restais interdit : « En ce qui me concerne, j’aurais du mal à effleurer les tiennes pour ce cas-là. Un nombre qui devient négatif sur certains ordis avec les mêmes versions et paramètres ? C’est plutôt flippant. Il n’a pas pu se gourer dans ses posts ? »
SH58 soupira, puis répondit : « Rien de flippant là dedans, juste une erreur humaine quelque part. J’en suis sûr. Mais je n’ai pas l’impression que le problème soit dans le post Stack Overflow, je crains que le bug soit bien réel… »
Je commençai à paniquer : « Un bug dans le compilateur ? T’en en train de me dire que toutes les conditions qui testent des nombres sont foireuses ? »
Il resta muet quelques instants, et dit finalement, plus pour lui qu’à mon intention : « Oh que non… Les conditions qui testent des nombres sont tout à fait fonctionnelles. Elles ne peuvent pas foirer. Par contre c’est RedheadOfDaLeague qui a foiré comme un débutant. Et ça aurait pu planter il y a plusieurs semaines en fait. Ou jamais, avec un peu de bol. La situation ne manque pas de charme, il a un bug infâme qui aurait pu rester à jamais invisible… M’en vais l’insulter pour sa bêtise. », conclut-il avant de quitter le salon sans plus de manières.
Je demeurai interloqué, bouche bée face à mon écran et à ce manque de civisme, en me demandant ce que RedheadOfDaLeague avait bien pu faire pour se retrouver avec un tel bug et pourquoi je continuais à aider SH58 vu son comportement.
(Réponse dans l'entrée suivante)
Suivant : ÉNIGME N°1 (Solution) : Une affaire de faux-positif |