L’algèbre booléen
1. L’origine des tests
Les tests effectués tant en algorithmique qu’en programmation sont des tests logiques, ou plutôt faisant appel à la logique. Le chapitre
Les variables et opérateurs a déjà brièvement abordé ce point lorsqu’il a été question des opérateurs booléens. Les opérateurs dits
logiques ET, OU et NON sont des représentations de la logique. De quelle logique parleton ?
Fondamentalement, la logique est la même pour tout le monde, bien que évidemment l’interprétation des résultats puisse varier d’un
individu à l’autre (en statistique par exemple). La logique est universelle. Monsieur Spock, s’il avait existé n’aurait pas dit mieux. Mais
jusqu’à peu (dans l’échelle de l’humanité) il n’y avait aucun moyen de se la représenter réellement, sous forme de symboles,
d’assertions, etc. Il n’y avait aucune représentation formelle de la logique.
Or un ordinateur est logique (même si on peut lui demander des choses illogiques, c’est vous qui le programmez après tout). La logique
est même la base de nombreuses applications mathématiques, électroniques, d’intelligence artificielle. En informatique, le matériel est
électronique et dépend de la logique, et les programmes dépendent tant de tests et de calculs faisant appel à la logique, et devant
fonctionner sur des circuits électroniques. Sans logique, pas d’électronique, ni d’ordinateurs, ni de programmes.
C’est ce qui fait que les opérateurs, conditions et tests ne doivent pas être posés n’importe comment. Il n’y a rien de plus logique qu’un
ordinateur, mais aussi rien de plus stupide : il va bêtement (et encore la notion de bêtise lui est inconnue) exécuter exactement ce que
vous lui demandez, même si le résultat entraîne une erreur ou est faux et cela du moment que les tests sont bien posés et qu’une
réponse logique peut en être déduite. Ainsi :
PROGRAMME STUPIDE
VAR
froid, nu, sortir en Booléen
DEBUT
Froid←VRAI
Nu←VRAI
Si Froid=VRAI ET nu=VRAI Alors
Sortir←VRAI
FinSi
FIN
Cet algorithme peut être ainsi interprété : "S’il fait froid dehors et que je suis nu, alors je peux sortir". Cet algorithme est pour vous et
moi, êtres humains, faux. Vous n’allez pas sortir nu s’il fait froid, vous auriez plutôt intérêt à mettre Sortir à FAUX, ou à inverser la
condition froid ou nu. C’est évident ! Mais l’ordinateur s’en fiche : il n’a aucun moyen de savoir que vous avez fait une erreur dans vos
tests. Le programme est mathématiquement logique : chaque test analysé est correct et donc les conditions sont remplies pour passer
la variable Sortir à VRAI.
La suite aborde des points théoriques. Le but n’est pas de vous donner un cours magistral sur l’algèbre de Boole mais de vous fournir
des bases de compréhension du fonctionnement de la logique vu du côté de l’informatique. Si vous voulez aller plus loin, il existe une
littérature conséquente à ce sujet dans les bibliothèques et les librairies (par exemple, "Algèbre de Boole" chez Masson). S’il vous
intéresse un jour d’aller largement audelà et d’explorer les mécanismes de logique et de pensée humaine ou d’intelligence artificielle, il
existe un gros ouvrage de référence, référence de nombreux scientifiques, informaticiens etc, qui s’appelle "Gödel, Escher, Bach : les
brins d’une guirlande éternelle", par Douglas Hofstadter.
2. Petites erreurs, grosses conséquences
Comprenezvous maintenant l’importance de la logique formelle et de bien écrire les tests et conditions dans un algorithme ?
Pour vous conforter un peu voici deux exemples de programmes mal écrits et de leurs désastreuses conséquences.
a. Ariane 5
Le 4 juin 1996 un bug d’un programme de la première fusée Ariane 5 a provoqué sa destruction après 40 secondes de vol. Le
programme en question contrôlait les gyroscopes (qui indiquent l’orientation) de la fusée. Il venait d’Ariane 4 et n’avait pas été testé ni
modifié pour Ariane 5. En gros, un nombre de 64 bits a été converti en 16 bits. Évidemment ça ne "rentre pas" et les valeurs
retournées par ce programme sont devenus aberrantes. Or ce programme était critique et n’aurait jamais dû retourner de valeurs
impossibles. Les données retournées n’étaient pas testées et vérifiées par le programme central de calcul de vol qui les prenaient pour
argent comptant et les interprétaient telles quelles. Sur un nombre signé, le dernier bit correspond au signe. Lorsque les 16 bits ont
été remplis, le dernier bit est passé à un. Le programme a reçu une indication comme quoi la fusée avait changé de sens (pointait vers
le bas) et a orienté les tuyères des réacteurs en les braquant à fond pour rectifier une situation totalement fausse. La fusée a donc
subi à un moment donné de par la poussée et sa position, des forces aérodynamiques telles que sa destruction est devenue
inévitable. Le comble ? Le programme des gyroscopes ne devait être utilisé que durant le compte à rebours et uniquement sur les
modèles Ariane 3 ! Autrement dit, il n’aurait jamais dû être présent ni fonctionner en vol.
b. Mars Climate Orbiter
L’autre exemple touche encore au domaine spatial. Le 11 décembre 1998 la NASA lança une sonde en direction de Mars : Mars Climate
Orbiter (MCO), dans le but d’étudier le climat martien. La sonde arriva en insertion orbitale (mise en orbite autour de Mars) le 23
septembre 1999. La sonde devait allumer son moteur principal un bon quart d’heure, passer derrière la planète (perte de contact avec
la Terre) puis de nouveau devant (reprise de contact). Le contact n’a jamais repris. Pourquoi ? Parce que lors des calculs nécessaires à
cette insertion sur orbite, MCO a fait appel à un programme issu d’un autre fournisseur (Lockheed Martin). Or MCO programmé par la
- 1 -
© ENI Editions - All rigths reserved - Jonifar lina
61
1. L’origine des tests
Les tests effectués tant en algorithmique qu’en programmation sont des tests logiques, ou plutôt faisant appel à la logique. Le chapitre
Les variables et opérateurs a déjà brièvement abordé ce point lorsqu’il a été question des opérateurs booléens. Les opérateurs dits
logiques ET, OU et NON sont des représentations de la logique. De quelle logique parleton ?
Fondamentalement, la logique est la même pour tout le monde, bien que évidemment l’interprétation des résultats puisse varier d’un
individu à l’autre (en statistique par exemple). La logique est universelle. Monsieur Spock, s’il avait existé n’aurait pas dit mieux. Mais
jusqu’à peu (dans l’échelle de l’humanité) il n’y avait aucun moyen de se la représenter réellement, sous forme de symboles,
d’assertions, etc. Il n’y avait aucune représentation formelle de la logique.
Or un ordinateur est logique (même si on peut lui demander des choses illogiques, c’est vous qui le programmez après tout). La logique
est même la base de nombreuses applications mathématiques, électroniques, d’intelligence artificielle. En informatique, le matériel est
électronique et dépend de la logique, et les programmes dépendent tant de tests et de calculs faisant appel à la logique, et devant
fonctionner sur des circuits électroniques. Sans logique, pas d’électronique, ni d’ordinateurs, ni de programmes.
C’est ce qui fait que les opérateurs, conditions et tests ne doivent pas être posés n’importe comment. Il n’y a rien de plus logique qu’un
ordinateur, mais aussi rien de plus stupide : il va bêtement (et encore la notion de bêtise lui est inconnue) exécuter exactement ce que
vous lui demandez, même si le résultat entraîne une erreur ou est faux et cela du moment que les tests sont bien posés et qu’une
réponse logique peut en être déduite. Ainsi :
PROGRAMME STUPIDE
VAR
froid, nu, sortir en Booléen
DEBUT
Froid←VRAI
Nu←VRAI
Si Froid=VRAI ET nu=VRAI Alors
Sortir←VRAI
FinSi
FIN
Cet algorithme peut être ainsi interprété : "S’il fait froid dehors et que je suis nu, alors je peux sortir". Cet algorithme est pour vous et
moi, êtres humains, faux. Vous n’allez pas sortir nu s’il fait froid, vous auriez plutôt intérêt à mettre Sortir à FAUX, ou à inverser la
condition froid ou nu. C’est évident ! Mais l’ordinateur s’en fiche : il n’a aucun moyen de savoir que vous avez fait une erreur dans vos
tests. Le programme est mathématiquement logique : chaque test analysé est correct et donc les conditions sont remplies pour passer
la variable Sortir à VRAI.
La suite aborde des points théoriques. Le but n’est pas de vous donner un cours magistral sur l’algèbre de Boole mais de vous fournir
des bases de compréhension du fonctionnement de la logique vu du côté de l’informatique. Si vous voulez aller plus loin, il existe une
littérature conséquente à ce sujet dans les bibliothèques et les librairies (par exemple, "Algèbre de Boole" chez Masson). S’il vous
intéresse un jour d’aller largement audelà et d’explorer les mécanismes de logique et de pensée humaine ou d’intelligence artificielle, il
existe un gros ouvrage de référence, référence de nombreux scientifiques, informaticiens etc, qui s’appelle "Gödel, Escher, Bach : les
brins d’une guirlande éternelle", par Douglas Hofstadter.
2. Petites erreurs, grosses conséquences
Comprenezvous maintenant l’importance de la logique formelle et de bien écrire les tests et conditions dans un algorithme ?
Pour vous conforter un peu voici deux exemples de programmes mal écrits et de leurs désastreuses conséquences.
a. Ariane 5
Le 4 juin 1996 un bug d’un programme de la première fusée Ariane 5 a provoqué sa destruction après 40 secondes de vol. Le
programme en question contrôlait les gyroscopes (qui indiquent l’orientation) de la fusée. Il venait d’Ariane 4 et n’avait pas été testé ni
modifié pour Ariane 5. En gros, un nombre de 64 bits a été converti en 16 bits. Évidemment ça ne "rentre pas" et les valeurs
retournées par ce programme sont devenus aberrantes. Or ce programme était critique et n’aurait jamais dû retourner de valeurs
impossibles. Les données retournées n’étaient pas testées et vérifiées par le programme central de calcul de vol qui les prenaient pour
argent comptant et les interprétaient telles quelles. Sur un nombre signé, le dernier bit correspond au signe. Lorsque les 16 bits ont
été remplis, le dernier bit est passé à un. Le programme a reçu une indication comme quoi la fusée avait changé de sens (pointait vers
le bas) et a orienté les tuyères des réacteurs en les braquant à fond pour rectifier une situation totalement fausse. La fusée a donc
subi à un moment donné de par la poussée et sa position, des forces aérodynamiques telles que sa destruction est devenue
inévitable. Le comble ? Le programme des gyroscopes ne devait être utilisé que durant le compte à rebours et uniquement sur les
modèles Ariane 3 ! Autrement dit, il n’aurait jamais dû être présent ni fonctionner en vol.
b. Mars Climate Orbiter
L’autre exemple touche encore au domaine spatial. Le 11 décembre 1998 la NASA lança une sonde en direction de Mars : Mars Climate
Orbiter (MCO), dans le but d’étudier le climat martien. La sonde arriva en insertion orbitale (mise en orbite autour de Mars) le 23
septembre 1999. La sonde devait allumer son moteur principal un bon quart d’heure, passer derrière la planète (perte de contact avec
la Terre) puis de nouveau devant (reprise de contact). Le contact n’a jamais repris. Pourquoi ? Parce que lors des calculs nécessaires à
cette insertion sur orbite, MCO a fait appel à un programme issu d’un autre fournisseur (Lockheed Martin). Or MCO programmé par la
- 1 -
© ENI Editions - All rigths reserved - Jonifar lina
61
