Études de cas
Ariane 5
La théorie
youtube.com/watch?v=_rNmszfIvAw
Le vol d’inauguration
4 juin 1996 Ariane 501 Vol 88 4 satellites
youtube.com/watch?v=fCnO-UYF3co
Ariane 4
-
1981 Conception
-
1988 Vol inaugural
-
2003 15 ans de service
116 lancements
97% de succès
Ariane 5
-
1987 Conception
-
199x Décision de réutiliser le
Système de Référence Inertielle
d’Ariane 4 (réputé fiable).
Pour éviter de refaire des tests (800 kF)
on garde la phase de calibration
nécessaire pour Ariane 4 seulement. -
1996 Échec du vol inaugural
-
1997 Réussite du second vol (16 mois)
Coût
C’était le bug le plus coûteux du monde.
3 milliards de francs (de l’époque)
pour les 4 satellites, le lancement,
les 16 mois de retard du projet…
Coût de l’image ternie de la marque.
Un petit bug…
-
L’accélération d’Ariane 5 est
cinq fois plus élevée qu’Ariane 4. -
La valeur accélération sur 32 bits et copiée
dans un registre de 16 bits (trop petit)
ce qui provoque une interruption matérielle. -
Les deux Système de Référence Inertielle
(même matériel, même logiciel)
se désactivent simultanément (à 72 ms près). -
37 secondes après le décollage,
le pilote automatique prend les commandes.
… un grand boum !
-
Le On Board Computer (OBC) détecte le SRI 1 en panne
et bascule sur le SRI 2. -
Le SRI 2 remonte une erreur, mais l’OBC la considère comme
valeur de navigation et braque la trajectoire de la fusée. -
Un des deux boosters est arraché à cause de la pression trop élevée
et déclenche le système d’auto-destruction de la fusée. -
Les débris de la fusée tombent dans la mangrove
et sont récupérés dont l’EEPROM contenant les info de l’erreur.
Code source Ada
Le petit bug
Test des bornes -32768..32767 de la composante Verticale BV
L_M_BV_32 := TBD.T_ENTIER_32S ((1.0/C_M_LSB_BV) *
G_M_INFO_DERIVE(T_ALG.E_BV));
if L_M_BV_32 > 32767 then
P_M_DERIVE(T_ALG.E_BV) := 16#7FFF#;
elsif L_M_BV_32 < -32768 then
P_M_DERIVE(T_ALG.E_BV) := 16#8000#;
else
P_M_DERIVE(T_ALG.E_BV) := UC_16S_EN_16NS(TDB.T_ENTIER_16S(L_M_BV_32));
end if;
Et pour l'**H**orizontale `BH` ?
P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS (TDB.T_ENTIER_16S
((1.0/C_M_LSB_BH) *
G_M_INFO_DERIVE(T_ALG.E_BH)));
Commission d’enquête
Rapport rendu un mois après l’incident
-
Les concepteurs du calculateur de la trajectoire
ont volontairement exclu la spécificité d’Ariane 5. -
La commission (composée d’ingénieurs logiciel)
conclut à un problème logiciel.
Lire aussi : Arnold et Bielefeld
Enquêtes indépendantes
-
Gérard Le Lann (INRIA) conclut
à un problème d’intégration système -
Mark Dowson insiste sur l’environnement de travail
- Pressions budgétaires
- Pressions sur les délais
- If it’s not broken don’t fix it
- Carriérisme des managers, Politique
Que retenir du cas Ariane 501 ?
-
Le changement justifie le test
-
Ne pas laisser tomber la qualité face
- aux contraintes budget
- aux contraintes planning
- au conservatisme (continuous refactoring)
- à la politique…
Autres cas
- 1980 NORAD alerte d’une attaque de missiles
(le logiciel ne gérait pas la défaillance électrique) - 1983 Un satellite soviétique alerte d’une attaque de missiles
(l’officier russe n’y croit pas) - 1983 Vancouver Stock Exchange corrige son index de 525 à 1099
(erreurs d’arrondi) - 1985 La NASA ne détecte aucun trou d’ozone pendant 7 ans
(grandes variations écartées) - 1993 Bug du Pentium sur les flottants
- 1998 Désintégration Mars Climate Orbiter
(unité pound/second au lieu de newton/second) - Médical : Surdose de rayons X…
- Avion, hélicoptère…
Toyota
Accélération inattendue du véhicule
-
2010 Toyota rappelle à nouveau un million de véhicules
car ce n’est pas la mécanique qui est en cause
mais le code spaghetti bourré de négligences -
Il a fallu attendre une centaine de morts,
des milliers d’accidents et une poursuite en justice -
2013 Barr trouve 80000 violations des règles MISRA C 2004.
(les dév. transgressent leurs règles sans se justifier) -
Coût : Quelques milliards $ et image de la marque
« Rien n’arrête une Toyota, même pas ses freins. »
Knight Capital Group (2012)
Comment perdre 440 millions $ en 45 minutes ?
-
La fonction de test Power Peg est codée dans un logiciel de Prod
-
Les développeurs gardent ce vieux code Power Peg (non utilisé)
-
Un technicien oublie d’installer la nouvelle version
sur un des huit serveurs SMARS (automate de trading) -
La config active le Power Peg qui fait dévier
à la hausse et à la baisse les cours de la bourse -
Power Peg achète et vend 397 millions d’actions sur 154 titres (NYSE)
-
4 millions d’ordres exécutés perturbent 148 titres (ex: 3.50 $ <-> 14.76 $)
(qu’est devenu KCG ?)
-
2012 Baisse de la capitalisation (350 millions $) de 75% dès le lendemain
-
4 jours après, KCG lève 400 millions $
-
2015 Vente des logiciels KCG Hotspot à BATS pour 365 millions $
-
2017 Virtu Financial achète KCG Holdings pour 1,4 milliard $
Apple (2014)
OSStatus SSLVerifySignedServerKeyExchange(...)
{
OSStatus err;
...
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
goto fail;
goto fail;
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
goto fail;
...
fail:
SSLFreeBuffer(&signedHashes);
SSLFreeBuffer(&hashCtx);
return err;
}
2016 => Nouvelle option GCC 6 -Wmisleading-indentation
Valve Steam (2015)
Ce script peut effacer tout le $HOME
.
STEAMROOT="$(cd "${0%/*}" && echo $PWD)"
# Scary!
rm -rf "$STEAMROOT/"*
Le commentaire Scary!
est d’origine.
Que retenir de ces études de cas ?
-
La non-qualité coûte plus cher
(qui pratique le quick and dirty ?) -
Gérer les erreurs
Refuser la négligence