Vous vous souvenez sans doute de cette nouvelle, qui date un peu, mais qui avait fait grand bruit lors de la première guerre du Golfe : le 25 février 1991, un missile SCUD irakien avait frappé la base de Dhahran, en Arabie saoudite, tuant 28 soldats américains. Après analyse, l’enquête avait montré qu’un missile MIM-104C (PAC-2) PATRIOT avait bien été lancé pour intercepter le missile, mais qu’il avait manqué sa cible en raison… d’une erreur logicielle.
La batterie de missiles Patriot de Dharan se trouvait en effet en fonction depuis plus de 100 heures, et des erreurs d’arrondi avaient progressivement amené un décalage proche d’une seconde, soit 600m, entre la position perçue de la cible, et sa position réelle. Pas d’erreur mathématique ici, mais simplement la constatation que si les maths sont justes, ce n’est pas pour cela qu’un ordinateur est capable de bien calculer.
Ce n’est d’ailleurs pas le seul exemple d’une erreur logicielle minime ayant des conséquences dévastatrices : citons pêle-mêle l’explosion d’Ariane V en raison d’une erreur dans la gestion de l’accélération, ou encore effondrement de la plateforme Sleipner A le 23 août 1991 (décidément une annus horribilis pour les systèmes critiques) à la suite d’une erreur logicielle résultant en un défaut de conception dans la résistance des ballasts – ci-dessus. Le résultat : une plate-forme gazière reposant à plus de 200m de fond. Pour les personnes intéressées, une liste des catastrophes dues à des erreurs de ce type est accessible ici.
Le logiciel, ce n’est donc pas que du virtuel. Et c’est pour s’attaquer à ce type de problèmes qu’une start-up de Montpellier, la société NUMALIS, soutenue par le programme GENERATE du GICAT, a développé une technologie assez révolutionnaire.
On peut la voir comme l’équivalent du correcteur orthographique de Word, mais appliqué aux codes et calculs critiques. Car plus un défaut est détecté en amont, plus on est en mesure d’en éviter les conséquences critiques. La manière classique de procéder, c’est de développer le logiciel de calcul, puis de tester le résultat en conditions réelles, ce qui est long, coûteux, mais surtout risqué ; on peut en effet passer à côté d’un défaut numérique, qui n’apparaîtra que dans certaines conditions. Numalis a développé des outils pour éviter cet écueil.
Il est impossible, pour un ordinateur, de calculer juste (oui, je sais, c’est paradoxal). Pour faire simple, du fait des contraintes matérielles, les représentations de nombres dans un microprocesseur sont bornées, alors que les mathématiciens calculent avec des nombres qui possèdent bien souvent une infinité de chiffres après la virgule. Et cela a deux conséquences : les erreurs de représentation, et les erreurs d’arrondi. Par exemple, un ordinateur ne connait pas le nombre 0,1. Il est obligé d’en réaliser une représentation binaire, ce qui pourra par exemple amener le nombre à une valeur réelle de 0.100000001490116119384765625… avec un petit souci : plus on additionne ou multiplie, plus l’écart entre le nombre envisagé et sa représentation réelle est important.
La représentation d’un nombre en virgule flottante (par exemple) est encadrée par une norme, la norme IEEE 754, qui fixe la représentation des nombres, les formats des données, les valeurs spéciales, les modes d’arrondi les règles de conversion et le comportement des opérations élémentaires pour l’arithmétique à virgule flottante. Pourtant, il est impossible de représenter exactement tous les nombres avec la norme IEEE 754. Car même si la norme définit des règles, le problème majeur du calcul flottant reste les erreurs d’arrondi dont les principales sources sont l’annulation catastrophique, l’absorption et l’accumulation des erreurs (un exemple ci-dessous).
C’est là que Numalis intervient. La société fondée par Arnault Ioualalen (ci-dessous) se veut le correcteur orthographique du code critique. Elle s’est spécialisée dans l’analyse et l’optimisation de la fiabilité et des performances des calculs numériques, avec des produits permettant de réaliser de manière automatique un audit numérique de codes critiques ainsi qu’une correction également automatique et une optimisation de ces codes.
Le but est d’anticiper les défauts numériques dès la phase de conception, avec un outil qui surligne, à la manière d’un correcteur, les lignes du programme présentant un risque, et qui les améliore d’un simple clic.
Les solutions de Numalis (baptisées Spoat et Wizoat) sont capables d’analyser le code C, C++ et bientôt Ada2012, et d’en détecter les erreurs comme la division par zéro, la dérive catastrophique d’un code numérique, le dépassement (overflow), etc… La gamme Spoat détecte les vulnérabilités numériques par une technique appelée analyse multispectrale de code, et met en avant les axes d’amélioration. La gamme Wizoat propose des patchs du code source pour améliorer sa qualité et/ou sa performance de calculs.
Outre le fait de pouvoir détecter, avant les phases de tests, la fiabilité des systèmes critiques, les outils de Numalis permettent d’augmenter la fiabilité des calculs, d’améliorer leurs performances (rapidité de traitement, par exemple dans le traitement sol d’images satellites) et de réaliser un arbitrage entre précision et performance au niveau matériel comme logiciel, par exemple pour des systèmes embarqués utilisant des FPGA (« field programmable gate arrays », des processeurs reprogrammables).
Dans le domaine de la défense, les applications sont évidemment nombreuses, qu’il s’agisse de garantir la fiabilité des systèmes critiques (par exemple pour des commandes de vol, des autodirecteurs, etc.), d’améliorer la performance des systèmes de traitement temps réel (image, ROEM,…)
Fondée en novembre 2015, Numalis a été labellisée dans le cadre du dispositif GENERATE du GICAT, et vient d’obtenir le prix innovation du public lors du challenge « start-ups » de l’université d’été du MEDEF – ci-dessus. Une société à suivre…