samedi 6 décembre 2008

L'essence du bug

Communiquer avec une machine, c'est mon activité quotidienne. Et il est des jours que je ne souhaite à personne de vivre. Ces jours où l'entendement s'évanouit dans un brouillard d'incertitude. Ces jours où l'on finit pas croire que l'image n'est pas un modèle de la réalité. Ces jours où l'image ne figure pas une situation possible dans l'espace logique. Ces jours où vous renvoyez le modèle de machine de Turing au rang de fable cybernétique.
Ce jour où vous découvrez votre incapacité à découvrir l'essence de cette ombre qui voile l'objet de vos intentions.

- Si je puis me permettre.
- Faites.
- C'est un bug.
- Vous dites?
- "L'ombre qui voile l'objet de vos intentions", c'est une erreur, une anomalie, une déficience, un dysfonctionnement. En informatique ça s'appelle un bug.

Une erreur? Comment cela est-ce possible? Comment une machine de turing peut-elle se tromper? Une machine peut échouer; elle ne peut pas commettre d'erreur. L'erreur est le fardeau de la liberté. L'erreur est subjective. Je fais une connerie, donc je suis.

- Puis-je à nouveau me permettre?
- Je vous en prie.
- L'erreur, c'est vous qui l'avez commise. C'est votre programme qui est buggé, pas la machine.

Ainsi, Wittgenstein a donc (encore) raison:
En logique, rien n'est accidentel: quand la chose se présente dans un état de choses, c'est que la possibilité de l'état de choses doit déjà être préjugée dans la chose.
Si le programme présente une erreur, c'est que la possibilité de l'erreur doit être préjugée dans le programme.

- Ben, c'est pas ce que j'ai dit.
- ha?
- Pour reprendre vos termes, j'ai dit: "Si le programme présente une erreur, c'est que la possibilité de l'erreur doit être préjugée dans le programmeur".

Alors selon vous, l'erreur se dissimule dans mes idées. Mais alors comment puis-je en prendre conscience? Par quel miracle mes idées sont-elles claires et distinctes lorsque je test et sont-elles obscures et confuses lorsque je développe un programme informatique?

- En test y'a juste à comparer un résultat avec un attendu. C'est juste ou c'est faux. Un point c'est tout.

Le test est une simple démarche empirique où l'expérience montre que les choses sont telles qu'elles doivent être. Tester c'est percevoir et juger: regarder, relever, comparer et vérifier. Un test est un être vrai. Nulle place est faite à l'indéterminé.

- Et le développement c'est le royaume du chaos. Pas la peine d'attendre la phase de codage pour se faire une idée de la débâcle. Dès la phase de spécification on sent très bien le désarroi qui nous attend. Je me demande même si le cycle en V n'est pas une allégorie de la descente aux enfers.

Il est vrai que les phases d'analyse du besoin, de spécification et de conception souffrent des trois défauts qui produisent la confusion:
D'abord, les idées complexes constituées de trop peu d'idées simples.
Deuxièmement: ou ses idées simples sont mêlées sans ordre.
Troisièmement, elles sont inconstantes et indéterminées.
John Locke - Essai sur l'entendement humain.
Et c'est au programmeur que revient la tâche d'interpréter l'obscurité et la confusion en terme de règles logiques. Et de cette interprétation de l'imprécision, du désordre et de l'indétermination naissent les bugs. Le bug est l'essence numérique de la confusion.