IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Un bogue informatique avait contraint le Boeing 787 à être redémarré tous les 248 jours
Pour éviter une interruption totale du système électrique

Le , par Coriolan

537PARTAGES

19  0 
De nos jours, toutes nos actions quotidiennes impliquent des programmeurs, du simple fait de passer un appel sur téléphone au pilotage des avions de ligne. C’est pourquoi on a vu pas mal de fois des gens tués dans des accidents de voiture à cause de bogues de logiciels alors que d’autres ont péri dans des crashs d’avions pour la même raison.

Parfois même, des projets de grande envergure sont condamnés à l’échec à cause d’un simple dysfonctionnement informatique lié au codage, à l’image du tristement célèbre vol 501 du lanceur européen Ariane 5 qui a eu lieu le 4 juin 1996 et qui s’est soldé par un échec. Ou plus récemment la chute libre de l'atterrisseur Schiaparelli de l’ESA (Agence spatiale européenne) sur le sol de Mars à cause d’un bogue informatique.

Vous l’aurez compris, même les grands projets coûtant parfois des milliards et des années de travail se trouvent voués à l’échec à cause de simples lignes de code. Mais qu’en est-il d’un avion de ligne moderne comme le Boeing 787 ?


Boeing 787-9 Dreamliner

En 2015, il a été découvert qu’un bogue informatique pouvait empêcher les pilotes de garder le contrôle du Boeing 787, possiblement en plein vol, a informé la Federal Aviation Administration (FAA) dans une directive destinée à toutes les compagnies aériennes utilisant cet avion.

Le bogue qui n’est rien d’autre qu’un problème classique de débordement d’entier, est situé au niveau du contrôle des générateurs de l’avion. Le bogue rapporté par Boeing à la FAA est déclenché lorsque ces derniers sont laissés allumés durant 248 jours (8 mois). Le 787 a quatre de ces unités de contrôle des générateurs, qui allumées simultanément, peuvent s’arrêter en même temps et causer une interruption totale du système électrique.

Cette situation a poussé l’agence américaine de l’aviation civile à émettre une directive d’aéronavigabilité : « Nous avons émis cette directive pour éviter la perte de tout le courant électrique, ce qui pourrait causer une perte du contrôle de l’avion, » a écrit la FAA. « Si les quatre unités de contrôle des générateurs (associées aux générateurs du moteur) venaient d’être allumées simultanément, après 248 jours d’allumage, tous les générateurs entreront en mode sécurité-défaut, causant une perte de tout le courant électrique, quelle que soit la phase de vol. ».

Autrement dit, si l’échec du système électrique venait d’arriver durant une phase critique du vol comme le décollage ou l’atterrissage, ou bien lors d’une manœuvre en plein air, la perte du contrôle pourrait être catastrophique.

À l’époque, la FAA a considéré cette situation comme étant critique et a promulgué une nouvelle règle immédiate pour remédier à cette situation. En même temps, Boeing avait promis de publier un correctif.

« La directive résout un problème d’une condition qui a été observée dans un laboratoire. Des tests de simulation ont révélé que cette situation est possible dans des cas où l’énergie d’un avion est laissée allumée pendant plus de 8 mois continus. Aucun avion dans la flotte n’a connu une telle situation, » a informé un porte-parole de Boeing.

Selon les propres registres de Boeing à l’époque, tous les avions 787 en service ont été arrêtés et redémarrés dans le cadre de leur maintenance. Boeing avait informé que les opérateurs vont continuer à redémarrer leurs avions de façon périodique pendant des intervalles de temps déterminés jusqu’à la disponibilité d’un correctif logiciel.

La note de la FAA n’avait pas donné plus de détails sur ce bogue, mais il s’agirait d’un problème de débordement d’entier 32-bit déclenché après 2^31 centisecondes (248,55 jours) de fonctionnement continu. 2^31 étant le nombre de secondes dans 248 jours multipliés par 100 (un compteur en centièmes de seconde).

Pour implémenter un tel compteur, deux options peuvent être suivies, soit augmenter le nombre de bits utilisés, ce qui empêche le débordement, ou bien travailler avec l’arithmétique multiprécision. Certains commentateurs ont suggéré qu’il y a ici un besoin de passer à une architecture 64 bits puisqu’elle permet d’utiliser plus de registres (généraux et XMM), un meilleur support pour PIC (position-independent code), et en général une meilleure performance des instructions syscall/sysret du système. Et dans ce cas, la période nécessaire pour le redémarrage de l'avion passerait de 248 jours à 3 milliards d'années !


Redémarrer le Dreamliner en plein vol n'est pas une solution possible

Un intéressant point rapporté par la FAA est qu’il faut presque une heure pour redémarrer les unités de contrôle des générateurs dans le 787, donc il n’y a pas un bouton de redémarrage comme un serveur par exemple.

Ce bogue montre juste comment l’immersion de l’informatique dans l’ingénierie rend la conception des systèmes embarqués de plus en plus complexe. Ainsi, l’Airbus A380, un avion dont la complexité est comparable à celle du Dreamliner, compte plus de 100 millions de lignes de code.

Source : federalregister - The Guardian

Et vous ?

Avez-vous déjà rencontré des bogues similaires ? Comment avez-vous entrepris de les corriger ?

Voir aussi

Selon ce développeur, la fausse alerte de missile à Hawaii est due à la conception logicielle, elle est de la faute des développeurs !
Des programmeurs avouent avoir écrit du code non éthique et parfois illégal en raison des requêtes de plus en plus contraignantes de leurs employeurs

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Guntha
Membre expérimenté https://www.developpez.com
Le 05/09/2018 à 10:53
À vrai dire, ce qui m'étonne le plus dans la news, c'est que des gens envisagent de laisser un avion allumé pendant 8 mois. Je croyais naïvement qu'ils étaient rebootés entre chaque vol
10  0 
Avatar de 6carbon
Membre averti https://www.developpez.com
Le 05/09/2018 à 11:41
Ce ne serait pas plutôt Boeing qui aurait ignoré une recommandation de son fournisseur de calculateur?
Les modules de Control Command sur lesquels je travail sont sécurisés SIL2 à conditions d'être rebootés une fois par mois. Donc dans le doute on les reboot automatiquement touts les 7 jours. Sur des engins de chantier c'est pas trop gênant on arrive à trouver 30s d'inactivité sur une semaine.

Même sur des systèmes aéronautiques SIL4 il doit y avoir des recommandations de ce genre.
9  0 
Avatar de sergio_is_back
Expert confirmé https://www.developpez.com
Le 05/09/2018 à 8:26
Citation Envoyé par Aiekick Voir le message
comme pour tout type d'appareil homologué il ya deux type d’énergie. il perde électrique, il leur reste l'hydraulique par contre il vont avoir du mal mais c'est possible, ca a déjà été fait
Oui mais il n'y pas plus de commandes hydrauliques sur les appareils toutes les commandes sont maintenant électriques avec redondance...
De plus l'hydraulique c'est pas magique, la pression est fournie par des pompes.... électriques... ou entrainée mécaniquement par les générateurs...
7  0 
Avatar de Jipété
Expert éminent sénior https://www.developpez.com
Le 05/09/2018 à 9:55
Citation Envoyé par Ryu2000 Voir le message
C'est pas trop grave, il y a un compteur de secondes et au bout de 231 il y a un débordement d'entier 32 bits.
Redémarrer un système dans un avion ce n'est pas la fin du monde...
Non, il faut juste patienter une heure...
Et si les 4 sont en carafe en même temps, tu te retrouves avec un fer à repasser de je sais pas combien de centaines de tonnes à 10 000 pieds, mais tout va bien, Ryu2000 est le pilote.
Tu aurais pu faire l'effort de lire l'article en entier. Maintenant si tu ne comprends pas ce que tu lis, c'est un autre problème...

Citation Envoyé par Ryu2000 Voir le message
C'est beaucoup moins grave que ça :
Vol 501 d'Ariane 5
C'est vrai que la vie humaine n'a aucune valeur, je l'oublie toujours... Alors comparé à des satellites, elle ne fait pas le poids.

Citation Envoyé par Ryu2000 Voir le message
Est-ce que sans passer par un système 64 bits il n'y aurait pas moyen de retarder le problème ?
Si tu prends 2 entiers, t’incrémente un deuxième compteur à chaque fois que le premier fait un tour et voilà.
Ce qui revient à prendre un int64...
9  2 
Avatar de sergio_is_back
Expert confirmé https://www.developpez.com
Le 05/09/2018 à 14:04
Citation Envoyé par Ryu2000 Voir le message

Est-ce que sans passer par un système 64 bits il n'y aurait pas moyen de retarder le problème ?
Si tu prends 2 entiers, t’incrémentes un deuxième compteur à chaque fois que le premier fait un tour et voilà.
Et après ça doit faire dans les 231 * 231 secondes avant que la combinaison des 2 compteurs soit au max.
C'est comme ça que l'on fait sur les architectures 32 bits pour avoir des entiers 64 bits... C'est un artifice mais ça fonctionne
L'entier 64 bits est composé en fait d'une paire d'entiers 32 bits

Beaucoup de compilateurs 32 bits utilisent cet artifice pour gérer les entiers 64 bits sur architecture 64 bits (C, C++, Pascal, etc...) encore faut-il que l'entier soit correctement déclaré
exemple UInt64 au lieu de UInt : Si on compile sur une plateforme 64 bits UInt sera sur 64 bits mais si on compile pour 32 bits alors UInt n'aura que 32 bits d’où l'importance de la déclaration
7  0 
Avatar de Steinvikel
Membre expert https://www.developpez.com
Le 05/09/2018 à 13:02
Citation Envoyé par domcars0 Voir le message
"un problème de débordement d’entier 32-bit déclenché après 231 centisecondes (248,55 jours)"
Joli Bug !!
Sachant qu'une centiseconde vaut 10^−2 seconde , on en déduit que 231 cs vaut (...)
le problème est orthographique, le mystère est résolu en lisant la phrase qui la suit : il manque simplement le chapeau circonflexe pour indiquer l'usage d'une puissance.
" (...) 32-bit déclenché après 231 centisecondes (248,55 jours) de fonctionnement continu. 2^31 étant le nombre de secondes dans 248 jours multipliés par 100 (...) "
2^31 valant: 2 147 483 648
248,55 jours: 2 147 472 0 (*100 cs)
6  0 
Avatar de Aurelien.Regat-Barrel
Expert éminent sénior https://www.developpez.com
Le 05/09/2018 à 13:52
Citation Envoyé par Ryu2000 Voir le message
Il faut implémenter un processus de redémarrage simplifier.
Je propose CTRL+ALT+DEL.

(oui moi aussi j'aime enfoncer les portes ouvertes)
5  0 
Avatar de
https://www.developpez.com
Le 05/09/2018 à 0:15
Cf liste suivante, non exhaustive probablement

https://en.wikipedia.org/wiki/List_o..._software_bugs

Dans cette liste, j'ai d'ailleurs retrouvé un bug que j'avais vu de mes propres yeux il y a quelques années sur le jeu PAC-MAN (c'est pas moi qui jouais, c'était un pote addict à ce jeu )

http://www.donhodges.com/how_high_can_you_get2.htm

Moins dangereux que le bazar survenu au Boeing 787 mais somme toute spectaculaire

-VX
3  0 
Avatar de Ryu2000
Membre extrêmement actif https://www.developpez.com
Le 07/09/2018 à 8:23
Citation Envoyé par jpouly Voir le message
Et puis c'est une mécanique compliqué, alors qu'une remise à zéro après le dépassement d'une borne est tellement plus simple à coder et à tester.
Ça ne peut pas être aussi simple.
Tu ne peux pas juste dire que si t'atteins l'entier maximal tu mets la variable à 0.
Parce que par rapport à toutes les autres variables ça ne voudrait plus rien dire.
Là il y a un truc d'état, comme dans la théorie des automates en informatique.

Il faut un redémarrage pour réinitialiser le système correctement et le remettre dans un bon état.
Changer une variable n'importe comment ça peut provoquer des problèmes. (y'en a qui ont essayé)

Le plus efficace serait de mettre en place une procédure simple pour redémarrer le système rapidement.
3  0 
Avatar de domcars0
Candidat au Club https://www.developpez.com
Le 05/09/2018 à 10:34
"un problème de débordement d’entier 32-bit déclenché après 231 centisecondes (248,55 jours)"
Joli Bug !!
Sachant qu'une centiseconde vaut 10−2 seconde , on en déduit que 231 cs vaut donc 2,31 secondes. Et non pas 248,55 jours.
2  0